2015/01/25

ZYBOのFile System (ramdisk)を修正してみました

はじめに

前回の記事で,ZYBO上でのLinux起動に成功しました. しかし,ZedBoardのデザインからramdisk8M.image.gzを流用したため,Linux起動時に下記のような警告が発生しています. そこで,この問題を修正するとともに,myled.koをLinux起動時にinsmodするようにramdiskを修正してみました. 初心者ですので,非効率だったり,不可解だったりする操作をしている可能性があります. その場合は,コメントなどでご指摘いただければ幸いです….

218
219
220
221
222
223
224
225
226
227
228
229
230
Starting rcS...
++ Mounting filesystem
++ Setting up mdev
++ Configure static IP 192.168.1.10
++ Starting telnet daemon
++ Starting http daemon
++ Starting ftp daemon
++ Starting dropbear (ssh) daemon
[    2.676499] random: dropbear urandom read with 7 bits of entropy available
++ Starting OLED Display
insmod: can't read '/lib/modules/3.14.0-xilinx-13567-g906a2c9/pmodoled-gpio.ko': No such file or directory
++ Exporting LEDs & SWs
rcS Complete

下記の記事が参考になりました.ありがとうございます.

作業ログ
  1. microSDHCカードとramdiskをマウントする
  2. ZYBOでLinuxを起動し,作業開始しました. 下記は,Tera Term上でのコマンド実行ログです.

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    zynq> mkdir -p /mnt/sd_card
    zynq> mkdir -p /mnt/ramdisk
    zynq> mount /dev/mmcblk0p1 /mnt/sd_card/
    zynq> ls /mnt/sd_card/
    BOOT.bin           led_blink          uImage
    devicetree.dtb     myled.ko           uramdisk.image.gz
    zynq> cp /mnt/sd_card/uramdisk.image.gz /tmp/
    zynq> cd /tmp/
    zynq> ls
    uramdisk.image.gz
    zynq> dd if=uramdisk.image.gz of=ramdisk.image.gz bs=64 skip=1
    57720+1 records in
    57720+1 records out
    3694108 bytes (3.5MB) copied, 1.784584 seconds, 2.0MB/s
    zynq> ls
    ramdisk.image.gz   uramdisk.image.gz
    zynq> gunzip ramdisk.image.gz
    zynq> ls
    ramdisk.image      uramdisk.image.gz
    zynq> mount -o loop /tmp/ramdisk.image /mnt/ramdisk/
    [  196.002988] EXT2-fs (loop0): warning: mounting unchecked fs, running e2fsck is recommended
    zynq> ls /mnt/ramdisk/
    bin         lib         lost+found  proc        sys         var
    dev         licenses    mnt         root        tmp
    etc         linuxrc     opt         sbin        usr
  3. ramdiskの編集:/lib/modules以下の編集
  4. /mnt/ramdisk/lib/modules以下を編集し,myled.koを追加しました.

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    zynq> cd /mnt/ramdisk/
    zynq> ls
    bin         lib         lost+found  proc        sys         var
    dev         licenses    mnt         root        tmp
    etc         linuxrc     opt         sbin        usr
    zynq> mkdir -p /mnt/ramdisk/lib/modules/`uname -r`
    zynq> ls /mnt/ramdisk/lib/modules/
    3.14.0-xilinx-13567-g906a2c9   3.3.0-digilent-12.07-zed-beta
    zynq> cp /mnt/sd_card/myled.ko /mnt/ramdisk/lib/modules/`uname -r`
    zynq> ls /mnt/ramdisk/lib/modules/`uname -r`
    myled.ko
  5. ramdiskの編集:/etc/init.d/rcSと/usr/bin以下の編集
  6. /mnt/ramdisk/etc/init.d/rcSと/usr/bin以下を編集し,Linux起動時にmyled.koがinsmodされるようにしました.

    1
    2
    3
    4
    5
    6
    zynq> cd /mnt/ramdisk/
    zynq> ls
    bin         lib         lost+found  proc        sys         var
    dev         licenses    mnt         root        tmp
    etc         linuxrc     opt         sbin        usr
    zynq> vi ./etc/init.d/rcS

    rcSは,「echo "++ Starting OLED Display"」より下部を下記のように変更しました. 既存記述をコメントアウトし,2行を追加記述しています.

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    echo "++ Starting dropbear (ssh) daemon"
    dropbear
     
    #echo "++ Starting OLED Display"
    #load_oled
     
    #echo "++ Exporting LEDs & SWs"
    #for i in 0 1 2 3 4 5 6 7;
    #do
    #       sw=$(($i+69));
    #       led=$(($i+61));
    #       echo $sw > /sys/class/gpio/export;
    #       echo $led > /sys/class/gpio/export;
    #       echo out > /sys/class/gpio/gpio$led/direction;
    #done;
     
    echo "++ Starting myLed"
    load_myLed
     
    export PATH=$PATH:/usr/local/bin
     
    echo "rcS Complete"

    rcSから実行される,load_myledを作成しました.

    1
    2
    zynq> mv ./usr/bin/load_oled ./usr/bin/load_myled
    zynq> vi ./usr/bin/load_myled

    load_myledの内容は,下記の通りです.

    1
    2
    #!/bin/sh
    insmod /lib/modules/`uname -r`/myled.ko;
  7. ramdiskとmicroSDHCカードをアンマウントする
  8. microSDHCカードに編集済みのramdisk.image.gzをコピーします.

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    zynq> cd /tmp
    zynq> umount /mnt/ramdisk/
    zynq> ls
    ramdisk.image      uramdisk.image.gz
    zynq> gzip ramdisk.image
    zynq> ls
    ramdisk.image.gz   uramdisk.image.gz
    zynq> cp /tmp/ramdisk.image.gz /mnt/sd_card/
    zynq> ls /mnt/sd_card/
    BOOT.bin           led_blink          ramdisk.image.gz   uramdisk.image.gz
    devicetree.dtb     myled.ko           uImage
    zynq> umount /mnt/sd_card/
  9. ramdisk.image.gzをuramdisk.image.gzに変換する
  10. ZYBO上のLinuxにはmkimageコマンドがないようでしたので,これ以降はPCのUbuntu上で作業を行います. microSDHC上のramdisk.image.gzをUbuntu上の任意の作業ディレクトリにコピーし,下記コマンドを実行します. 生成されたuramdisk.image.gzをmicroSDHCカードに上書きして,作業は完了です.

    1
    modified_ramdisk$ mkimage -A arm -T ramdisk -C gzip -d ramdisk.image.gz uramdisk.image.gz
編集後のLinux起動ログ

myled.koがLinux起動時にinsmodされるようになりました.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
0
Device: zynq_sdhci
Manufacturer ID: 74
OEM: 4a45
Name: USD
Tran Speed: 50000000
Rd Block Len: 512
SD version 3.0
High Capacity: Yes
Capacity: 7.5 GiB
Bus Width: 4-bit
reading uEnv.txt
** Unable to read file uEnv.txt **
Copying Linux from SD to RAM...
reading uImage
3819360 bytes read in 334 ms (10.9 MiB/s)
reading devicetree.dtb
7442 bytes read in 16 ms (454.1 KiB/s)
reading uramdisk.image.gz
3678760 bytes read in 323 ms (10.9 MiB/s)
## Booting kernel from Legacy Image at 03000000 ...
   Image Name:   Linux-3.14.0-xilinx-13567-g906a2
   Image Type:   ARM Linux Kernel Image (uncompressed)
   Data Size:    3819296 Bytes = 3.6 MiB
   Load Address: 00008000
   Entry Point:  00008000
   Verifying Checksum ... OK
## Loading init Ramdisk from Legacy Image at 02000000 ...
   Image Name:
   Image Type:   ARM Linux RAMDisk Image (gzip compressed)
   Data Size:    3678696 Bytes = 3.5 MiB
   Load Address: 00000000
   Entry Point:  00000000
   Verifying Checksum ... OK
## Flattened Device Tree blob at 02a00000
   Booting using the fdt blob at 0x2a00000
   Loading Kernel Image ... OK
   Loading Ramdisk to 1f7ad000, end 1fb2f1e8 ... OK
   Loading Device Tree to 1f7a8000, end 1f7acd11 ... OK
 
Starting kernel ...
 
Uncompressing Linux... done, booting the kernel.
[    0.000000] Booting Linux on physical CPU 0x0
[    0.000000] Linux version 3.14.0-xilinx-13567-g906a2c9 (省略) (gcc version 4.8.3 20140320 (prerelease) (Sourcery CodeBench Lite 2014.05-23) ) #1 SMP PREEMPT Thu Jan 22 20:59:00 JST 2015
[    0.000000] CPU: ARMv7 Processor [413fc090] revision 0 (ARMv7), cr=18c5387d
[    0.000000] CPU: PIPT / VIPT nonaliasing data cache, VIPT aliasing instruction cache
[    0.000000] Machine model: Xilinx Zynq
[    0.000000] bootconsole [earlycon0] enabled
[    0.000000] cma: CMA: reserved 128 MiB at 17400000
[    0.000000] Memory policy: Data cache writealloc
[    0.000000] PERCPU: Embedded 8 pages/cpu @dfb9e000 s10752 r8192 d13824 u32768
[    0.000000] Built 1 zonelists in Zone order, mobility grouping on.  Total pages: 130048
[    0.000000] Kernel command line: console=ttyPS0,115200 root=/dev/ram rw earlyprintk
[    0.000000] PID hash table entries: 2048 (order: 1, 8192 bytes)
[    0.000000] Dentry cache hash table entries: 65536 (order: 6, 262144 bytes)
[    0.000000] Inode-cache hash table entries: 32768 (order: 5, 131072 bytes)
[    0.000000] Memory: 371812K/524288K available (5133K kernel code, 319K rwdata, 1888K rodata, 206K init, 5339K bss, 152476K reserved, 0K highmem)
[    0.000000] Virtual kernel memory layout:
[    0.000000]     vector  : 0xffff0000 - 0xffff1000   (   4 kB)
[    0.000000]     fixmap  : 0xfff00000 - 0xfffe0000   ( 896 kB)
[    0.000000]     vmalloc : 0xe0800000 - 0xff000000   ( 488 MB)
[    0.000000]     lowmem  : 0xc0000000 - 0xe0000000   ( 512 MB)
[    0.000000]     pkmap   : 0xbfe00000 - 0xc0000000   (   2 MB)
[    0.000000]     modules : 0xbf000000 - 0xbfe00000   (  14 MB)
[    0.000000]       .text : 0xc0008000 - 0xc06e3a0c   (7023 kB)
[    0.000000]       .init : 0xc06e4000 - 0xc0717a00   ( 207 kB)
[    0.000000]       .data : 0xc0718000 - 0xc0767d40   ( 320 kB)
[    0.000000]        .bss : 0xc0767d4c - 0xc0c9eb88   (5340 kB)
[    0.000000] Preemptible hierarchical RCU implementation.
[    0.000000]  RCU lockdep checking is enabled.
[    0.000000]  Dump stacks of tasks blocking RCU-preempt GP.
[    0.000000]  RCU restricting CPUs from NR_CPUS=4 to nr_cpu_ids=2.
[    0.000000] RCU: Adjusting geometry for rcu_fanout_leaf=16, nr_cpu_ids=2
[    0.000000] NR_IRQS:16 nr_irqs:16 16
[    0.000000] ps7-slcr mapped to e0802000
[    0.000000] zynq_clock_init: clkc starts at e0802100
[    0.000000] Zynq clock init
[    0.000016] sched_clock: 64 bits at 325MHz, resolution 3ns, wraps every 3383112499200ns
[    0.008513] ps7-ttc #0 at e0804000, irq=43
[    0.013585] Console: colour dummy device 80x30
[    0.017925] Lock dependency validator: Copyright (c) 2006 Red Hat, Inc., Ingo Molnar
[    0.026005] ... MAX_LOCKDEP_SUBCLASSES:  8
[    0.030021] ... MAX_LOCK_DEPTH:          48
[    0.034195] ... MAX_LOCKDEP_KEYS:        8191
[    0.038612] ... CLASSHASH_SIZE:          4096
[    0.042966] ... MAX_LOCKDEP_ENTRIES:     16384
[    0.047437] ... MAX_LOCKDEP_CHAINS:      32768
[    0.051937] ... CHAINHASH_SIZE:          16384
[    0.056382]  memory used by lock dependency info: 3695 kB
[    0.061827]  per task-struct memory footprint: 1152 bytes
[    0.067276] Calibrating delay loop... 1292.69 BogoMIPS (lpj=6463488)
[    0.110961] pid_max: default: 32768 minimum: 301
[    0.116266] Mount-cache hash table entries: 1024 (order: 0, 4096 bytes)
[    0.122805] Mountpoint-cache hash table entries: 1024 (order: 0, 4096 bytes)
[    0.137446] CPU: Testing write buffer coherency: ok
[    0.143748] CPU0: thread -1, cpu 0, socket 0, mpidr 80000000
[    0.149391] Setting up static identity map for 0x4deb20 - 0x4deb78
[    0.155764] L310 cache controller enabled
[    0.159720] l2x0: 8 ways, CACHE_ID 0x410000c8, AUX_CTRL 0x72760000, Cache size: 512 kB
[    0.240372] CPU1: Booted secondary processor
[    0.328289] CPU1: thread -1, cpu 1, socket 0, mpidr 80000001
[    0.329292] Brought up 2 CPUs
[    0.342156] SMP: Total of 2 processors activated.
[    0.346857] CPU: All CPU(s) started in SVC mode.
[    0.354960] devtmpfs: initialized
[    0.365694] VFP support v0.3: implementor 41 architecture 3 part 30 variant 9 rev 4
[    0.380025] regulator-dummy: no parameters
[    0.393200] NET: Registered protocol family 16
[    0.401996] DMA: preallocated 256 KiB pool for atomic coherent allocations
[    0.415591] cpuidle: using governor ladder
[    0.419573] cpuidle: using governor menu
[    0.446584] syscon f8000000.ps7-slcr: regmap [mem 0xf8000000-0xf8000fff] registered
[    0.459105] hw-breakpoint: found 5 (+1 reserved) breakpoint and 1 watchpoint registers.
[    0.467059] hw-breakpoint: maximum watchpoint size is 4 bytes.
[    0.473396] zynq-ocm f800c000.ps7-ocmc: ZYNQ OCM pool: 256 KiB @ 0xe0880000
[    0.544551] bio: create slab <bio-0> at 0
[    0.554073] vgaarb: loaded
[    0.558669] SCSI subsystem initialized
[    0.564786] usbcore: registered new interface driver usbfs
[    0.571458] usbcore: registered new interface driver hub
[    0.577203] usbcore: registered new device driver usb
[    0.583722] media: Linux media interface: v0.10
[    0.589081] Linux video capture interface: v2.00
[    0.594308] pps_core: LinuxPPS API ver. 1 registered
[    0.599146] pps_core: Software ver. 5.3.6 - Copyright 2005-2007 Rodolfo Giometti <giometti@linux.it>
[    0.608666] PTP clock support registered
[    0.613529] EDAC MC: Ver: 3.0.0
[    0.619871] Advanced Linux Sound Architecture Driver Initialized.
[    0.635714] DMA-API: preallocated 4096 debug entries
[    0.640817] DMA-API: debugging enabled by kernel config
[    0.646463] Switched to clocksource arm_global_timer
[    0.709368] NET: Registered protocol family 2
[    0.716229] TCP established hash table entries: 4096 (order: 2, 16384 bytes)
[    0.723679] TCP bind hash table entries: 4096 (order: 5, 147456 bytes)
[    0.731674] TCP: Hash tables configured (established 4096 bind 4096)
[    0.738174] TCP: reno registered
[    0.741311] UDP hash table entries: 256 (order: 2, 20480 bytes)
[    0.747679] UDP-Lite hash table entries: 256 (order: 2, 20480 bytes)
[    0.755204] NET: Registered protocol family 1
[    0.761154] RPC: Registered named UNIX socket transport module.
[    0.767008] RPC: Registered udp transport module.
[    0.771671] RPC: Registered tcp transport module.
[    0.776429] RPC: Registered tcp NFSv4.1 backchannel transport module.
[    0.783935] Trying to unpack rootfs image as initramfs...
[    0.790821] rootfs image is not initramfs (no cpio magic); looks like an initrd
[    0.822200] Freeing initrd memory: 3592K (df7ad000 - dfb2f000)
[    0.828366] hw perfevents: enabled with ARMv7 Cortex-A9 PMU driver, 7 counters available
[    0.842320] futex hash table entries: 512 (order: 3, 32768 bytes)
[    0.855927] jffs2: version 2.2. (NAND) (SUMMARY)  c 2001-2006 Red Hat, Inc.
[    0.863480] msgmni has been set to 989
[    0.868816] io scheduler noop registered
[    0.872628] io scheduler deadline registered
[    0.877164] io scheduler cfq registered (default)
[    0.903391] dma-pl330 f8003000.ps7-dma: Loaded driver for PL330 DMAC-2364208
[    0.910360] dma-pl330 f8003000.ps7-dma:      DBUFF-128x8bytes Num_Chans-8 Num_Peri-4 Num_Events-16
[    0.922509] e0001000.serial: ttyPS0 at MMIO 0xe0001000 (irq = 82, base_baud = 3125000) is a xuartps
[    0.931977] console [ttyPS0] enabled
[    0.931977] console [ttyPS0] enabled
[    0.939085] bootconsole [earlycon0] disabled
[    0.939085] bootconsole [earlycon0] disabled
[    0.950278] xdevcfg f8007000.ps7-dev-cfg: ioremap 0xf8007000 to e0866000
[    0.960077] [drm] Initialized drm 1.1.0 20060810
[    0.998317] brd: module loaded
[    1.020791] loop: module loaded
[    1.037001] m25p80 spi0.0: found s25fl128s1, expected n25q128
[    1.042712] m25p80 spi0.0: s25fl128s1 (16384 Kbytes)
[    1.048102] 4 ofpart partitions found on MTD device spi0.0
[    1.053505] Creating 4 MTD partitions on "spi0.0":
[    1.058370] 0x000000000000-0x000000400000 : "qspi-fsbl-uboot"
[    1.071620] 0x000000400000-0x000000900000 : "qspi-linux"
[    1.081695] 0x000000900000-0x000000920000 : "qspi-device-tree"
[    1.092290] 0x000000920000-0x000001000000 : "qspi-user"
[    1.111564] e1000e: Intel(R) PRO/1000 Network Driver - 2.3.2-k
[    1.117381] e1000e: Copyright(c) 1999 - 2013 Intel Corporation.
[    1.129061] libphy: XEMACPS mii bus: probed
[    1.135400] xemacps e000b000.ps7-ethernet: pdev->id -1, baseaddr 0xe000b000, irq 54
[    1.146094] ehci_hcd: USB 2.0 'Enhanced' Host Controller (EHCI) Driver
[    1.153483] ehci-pci: EHCI PCI platform driver
[    1.158650] ULPI transceiver vendor/product ID 0x0424/0x0007
[    1.164226] Found SMSC USB3320 ULPI transceiver.
[    1.168954] ULPI integrity check: passed.
[    1.173775] zynq-ehci zynq-ehci.0: Xilinx Zynq USB EHCI Host Controller
[    1.181170] zynq-ehci zynq-ehci.0: new USB bus registered, assigned bus number 1
[    1.216566] zynq-ehci zynq-ehci.0: irq 53, io mem 0x00000000
[    1.236544] zynq-ehci zynq-ehci.0: USB 2.0 started, EHCI 1.00
[    1.249258] hub 1-0:1.0: USB hub found
[    1.253254] hub 1-0:1.0: 1 port detected
[    1.261273] usbcore: registered new interface driver usb-storage
[    1.270141] mousedev: PS/2 mouse device common for all mice
[    1.277842] i2c /dev entries driver
[    1.290334] zynq-edac f8006000.ps7-ddrc: ecc not enabled
[    1.296578] cpufreq_cpu0: failed to get cpu0 regulator: -19
[    1.305008] Xilinx Zynq CpuIdle Driver started
[    1.311471] sdhci: Secure Digital Host Controller Interface driver
[    1.317632] sdhci: Copyright(c) Pierre Ossman
[    1.321914] sdhci-pltfm: SDHCI platform and OF driver helper
[    1.328223] mmc0: no vqmmc regulator found
[    1.332245] mmc0: no vmmc regulator found
[    1.376466] mmc0: SDHCI controller on e0100000.ps7-sdio [e0100000.ps7-sdio] using ADMA
[    1.391761] usbcore: registered new interface driver usbhid
[    1.397382] usbhid: USB HID core driver
[    1.413032] TCP: cubic registered
[    1.416321] NET: Registered protocol family 17
[    1.421207] Registering SWP/SWPB emulation handler
[    1.428537] regulator-dummy: disabling
[    1.432746] drivers/rtc/hctosys.c: unable to open rtc device (rtc0)
[    1.449239] mmc0: new high speed SDHC card at address b368
[    1.457706] mmcblk0: mmc0:b368 USD   7.45 GiB
[    1.466956] ALSA device list:
[    1.470202]   No soundcards found.
[    1.470412]  mmcblk0: p1
[    1.478273] RAMDISK: gzip image found at block 0
[    1.898859] EXT2-fs (ram0): warning: mounting unchecked fs, running e2fsck is recommended
[    1.907329] VFS: Mounted root (ext2 filesystem) on device 1:0.
[    1.914020] devtmpfs: mounted
[    1.917408] Freeing unused kernel memory: 204K (c06e4000 - c0717000)
Starting rcS...
++ Mounting filesystem
++ Setting up mdev
++ Configure static IP 192.168.1.10
++ Starting telnet daemon
++ Starting http daemon
++ Starting ftp daemon
++ Starting dropbear (ssh) daemon
[    2.688942] random: dropbear urandom read with 7 bits of entropy available
++ Starting myLed
[    2.747360] myled probed at VA 0xe08e0000
rcS Complete
zynq> ls
bin         lib         lost+found  proc        sys         var
dev         licenses    mnt         root        tmp
etc         linuxrc     opt         sbin        usr
zynq> echo 0xa > /proc/myled
zynq> echo 0xf > /proc/myled
zynq> echo 0x5 > /proc/myled
zynq> rmmod myled
製品紹介

0 件のコメント:

コメントを投稿