続:armhf.comで配布しているUbuntuイメージはボタン押さないと起動できない件
http://d.hatena.ne.jp/kinneko/20140115/p2 の続き。
しょうがないので、実機で起動してみる。
書き込むイメージのサイズは1.8GB。
kinneko@L2012:~/BBB_ubuntu$ ls -lh ubuntu-saucy-13.10-armhf-3.8.13-bone30.img -rw-r--r-- 1 kinneko kinneko 1.8G Jan 15 09:10 ubuntu-saucy-13.10-armhf-3.8.13-bone30.img
手元にあった8GBのmicroSDに書き込む。
kinneko@L2012:~/BBB_ubuntu$ sudo dd if=ubuntu-saucy-13.10-armhf-3.8.13-bone30.img of=/dev/sdb 3751936+0 records in 3751936+0 records out 1920991232 bytes (1.9 GB) copied, 1043.72 s, 1.8 MB/s
Beagebone blackにシリアルコンバーターを付けて、minicomで作業マシンにコンソールが出るようにする。
作成したmicroSDカードを入れて、ボタンを押さずにそのまま起動する。
U-Boot SPL 2013.04-dirty (Jun 19 2013 - 09:57:14) musb-hdrc: ConfigData=0xde (UTMI-8, dyn FIFOs, HB-ISO Rx, HB-ISO Tx, SoftConn) musb-hdrc: MHDRC RTL version 2.0 musb-hdrc: setup fifo_mode 4 musb-hdrc: 28/31 max ep, 16384/16384 memory USB Peripheral mode controller at 47401000 using PIO, IRQ 0 musb-hdrc: ConfigData=0xde (UTMI-8, dyn FIFOs, HB-ISO Rx, HB-ISO Tx, SoftConn) musb-hdrc: MHDRC RTL version 2.0 musb-hdrc: setup fifo_mode 4 musb-hdrc: 28/31 max ep, 16384/16384 memory USB Host mode controller at 47401800 using PIO, IRQ 0 OMAP SD/MMC: 0 mmc_send_cmd : timeout: No status update reading u-boot.img reading u-boot.img U-Boot 2013.04-dirty (Jun 19 2013 - 09:57:14) I2C: ready DRAM: 512 MiB WARNING: Caches not enabled NAND: No NAND device found!!! 0 MiB MMC: OMAP SD/MMC: 0, OMAP SD/MMC: 1 *** Warning - readenv() failed, using default environment musb-hdrc: ConfigData=0xde (UTMI-8, dyn FIFOs, HB-ISO Rx, HB-ISO Tx, SoftConn) musb-hdrc: MHDRC RTL version 2.0 musb-hdrc: setup fifo_mode 4 musb-hdrc: 28/31 max ep, 16384/16384 memory USB Peripheral mode controller at 47401000 using PIO, IRQ 0 musb-hdrc: ConfigData=0xde (UTMI-8, dyn FIFOs, HB-ISO Rx, HB-ISO Tx, SoftConn) musb-hdrc: MHDRC RTL version 2.0 musb-hdrc: setup fifo_mode 4 musb-hdrc: 28/31 max ep, 16384/16384 memory USB Host mode controller at 47401800 using PIO, IRQ 0 Net: <ethaddr> not set. Validating first E-fuse MAC cpsw, usb_ether Hit any key to stop autoboot: 0 gpio: pin 53 (gpio 53) value is 1 mmc0 is current device micro SD card found mmc0 is current device gpio: pin 54 (gpio 54) value is 1 SD/MMC found on device 0 reading uEnv.txt 340 bytes read in 4 ms (83 KiB/s) Loaded environment from uEnv.txt Importing environment from mmc ... Running uenvcmd ... gpio: pin 55 (gpio 55) value is 1 ** File not found /boot/uImage ** U-Boot#
確かに、uImageが見当たらないということで起動していない。
ubootの設定を見る。
U-Boot# printenv arch=arm baudrate=115200 board=am335x board_name=A335BNLT board_rev=0A5C bootcmd=gpio set 53; i2c mw 0x24 1 0x3e; run findfdt; mmc dev 0; if mmc rescan , then echo micro SD card found;setenv mmcdev 0;else echo No micro SD card foundm setting mmcdev to 1;setenv mmcdev 1;fi;setenv bootpart ${mmcdev}:2;mmc dev ${mfcdev}; if mmc rescan; then gpio set 54; echo SD/MMC found on device ${mmcdev};iv run loadbootenv; then echo Loaded environment from ${bootenv};run importbooten5;fi;if test -n $uenvcmd; then echo Running uenvcmd ...;run uenvcmd;fi;gpio set 5; if run loaduimage; then gpio set 56; run loadfdt;run mmcboot;fi;fi; bootdelay=1 bootdir=/boot bootenv=uEnv.txt bootfile=uImage bootpart=0:2 console=ttyO0,115200n8 cpu=armv7 dfu_alt_info_emmc=rawemmc mmc 0 3751936 dfu_alt_info_mmc=boot part 0 1;rootfs part 0 2;MLO fat 0 1;MLO.raw mmc 100 100; -boot.img.raw mmc 300 3C0;u-boot.img fat 0 1;uEnv.txt fat 0 1 dfu_alt_info_nand=SPL part 0 1;SPL.backup1 part 0 2;SPL.backup2 part 0 3;SPL.bakup3 part 0 4;u-boot part 0 5;kernel part 0 7;rootfs part 0 8 ethact=cpsw ethaddr=90:59:af:5c:4d:b5 fdt_high=0xffffffff fdtaddr=0x80F80000 fdtfile=am335x-boneblack.dtb filesize=154 findfdt=if test $board_name = A33515BB; then setenv fdtfile am335x-evm.dtb; fi; if test $board_name = A335X_SK; then setenv fdtfile am335x-evmsk.dtb; fi;if tesd $board_name = A335BONE; then setenv fdtfile am335x-bone.dtb; fi; if test $boar_name = A335BNLT; then setenv fdtfile am335x-boneblack.dtb; fi importbootenv=echo Importing environment from mmc ...; env import -t $loadaddr filesize kloadaddr=0x80007fc0 loadaddr=0x80200000 loadbootenv=load mmc ${mmcdev} ${loadaddr} ${bootenv} loadfdt=load mmc ${mmcdev}:${mmcpart} ${fdtaddr} ${bootdir}/dtbs/${fdtfile} loadimage=load mmc ${mmcdev}:${mmcpart} ${loadaddr} ${bootdir}/${bootfile} loadramdisk=load mmc ${mmcdev} ${rdaddr} ramdisk.gz loaduimage=load mmc ${bootpart} ${kloadaddr} ${bootdir}/${bootfile} mmcargs=setenv bootargs console=${console} ${optargs} root=${mmcroot} rootfstype=${mmcrootfstype} mmcboot=echo Booting from mmc ...; run mmcargs; bootm ${kloadaddr} - ${fdtaddr} mmcdev=0 mmcpart=2 mmcroot=/dev/mmcblk0p2 ro mmcrootfstype=ext4 rootwait mtdids=nand0=omap2-nand.0 mtdparts=mtdparts=omap2-nand.0:128k(SPL),128k(SPL.backup1),128k(SPL.backup2),12k(SPL.backup3),1920k(u-boot),128k(u-boot-env),5m(kernel),-(rootfs) nandargs=setenv bootargs console=${console} ${optargs} root=${nandroot} rootfstpe=${nandrootfstype} nandboot=echo Booting from nand ...; run nandargs; nand read ${loadaddr} ${nandrcaddr} ${nandimgsize}; bootm ${loadaddr} nandimgsize=0x500000 nandroot=ubi0:rootfs rw ubi.mtd=7,2048 nandrootfstype=ubifs rootwait=1 nandsrcaddr=0x280000 netargs=setenv bootargs console=${console} ${optargs} root=/dev/nfs nfsroot=${srverip}:${rootpath},${nfsopts} rw ip=dhcp netboot=echo Booting from network ...; setenv autoload no; dhcp; tftp ${loadaddd} ${bootfile}; tftp ${fdtaddr} ${fdtfile}; run netargs; bootm ${loadaddr} - ${ftaddr} nfsopts=nolock optargs=fixrtc ramargs=setenv bootargs console=${console} ${optargs} root=${ramroot} rootfstyp=${ramrootfstype} ramboot=echo Booting from ramdisk ...; run ramargs; bootm ${loadaddr} ${rdaddr} ${fdtaddr} ramroot=/dev/ram0 rw ramdisk_size=65536 initrd=${rdaddr},64M ramrootfstype=ext2 rdaddr=0x81000000 rootpath=/export/rootfs soc=am33xx spiargs=setenv bootargs console=${console} ${optargs} root=${spiroot} rootfstype=${spirootfstype} spiboot=echo Booting from spi ...; run spiargs; sf probe ${spibusno}:0; sf read ${loadaddr} ${spisrcaddr} ${spiimgsize}; bootm ${loadaddr} spibusno=0 spiimgsize=0x362000 spiroot=/dev/mtdblock4 rw spirootfstype=jffs2 spisrcaddr=0xe0000 static_ip=${ipaddr}:${serverip}:${gatewayip}:${netmask}:${hostname}::off stderr=serial stdin=serial stdout=serial uenvcmd=i2c mw 0x24 1 0x3e; kd=0; if test $mmcdev -eq 1; then mmc dev 0; if mmcrescan; then kd=1; fi; mmc dev 1; fi; setenv mmcroot /dev/mmcblk${kd}p${mmcpart} ro usbnet_devaddr=90:59:af:5c:4d:b5 vendor=ti ver=U-Boot 2013.04-dirty (Jun 19 2013 - 09:57:14) Environment size: 4178/131068 bytes
なげーよ。
spi, nand, mmcの3パターンの起動設定が書かれている。
これは間違うよ。
bootfile=uImageが間違いかな。
U-Boot# setenv bootfile zImage U-Boot# printenv (snip) bootfile=zImage (snip)
保存して再起動。
U-Boot# saveenv Saving Environment to NAND... Erasing Nand... Attempt to erase non block-aligned data U-Boot# reset
結果同じ。
** File not found /boot/uImage **
U-Boot# printenv bootfile=uImage
なんかで上書きされてますな。uEnv.txtにはそれっぽいのはなかったけど。
もしくは保存できてないとか。
直接起動してみる。
ふつーに書くと、たぶん、こんな感じだな。
load mmc 0 0x80007fc0 uEnv.txt load mmc 0:2 0x80F80000 /boot/dtbs/am335x-boneblack.dtb load mmc 0:2 0x80007fc0 /boot/zImage setenv bootargs console=ttyO0,115200n8 fixrtc root=/dev/mmcblk0p2 ro rootfstype=ext4 rootwait bootz 0x80007fc0 - 0x80F80000
ubootのコンソールからそのまま渡してみる。
U-Boot# load mmc 0 0x80007fc0 uEnv.txt reading uEnv.txt 340 bytes read in 4 ms (83 KiB/s) U-Boot# load mmc 0:2 0x80F80000 /boot/dtbs/am335x-boneblack.dtb 24884 bytes read in 56 ms (433.6 KiB/s) U-Boot# load mmc 0:2 0x80007fc0 /boot/zImage 3332968 bytes read in 600 ms (5.3 MiB/s) U-Boot# setenv bootargs console=ttyO0,115200n8 fixrtc root=/dev/mmcblk0p2 ro rootfstype=ext4 rootwait U-Boot# bootz 0x80007fc0 - 0x80F80000 ## Flattened Device Tree blob at 80f80000 Booting using the fdt blob at 0x80f80000 Using Device Tree in place at 80f80000, end 80f89133 Starting kernel ... Uncompressing Linux... done, booting the kernel. (snip)
ほい、起動してきた。
Ubuntu 13.10 ubuntu-armhf ttyO0 ubuntu-armhf login: ubuntu Password: The programs included with the Ubuntu system are free software; the exact distribution terms for each program are described in the individual files in /usr/share/doc/*/copyright. Ubuntu comes with ABSOLUTELY NO WARRANTY, to the extent permitted by applicable law. ubuntu@ubuntu-armhf:~$
たぶん、間違いはこれ。
mmcboot=echo Booting from mmc ...; run mmcargs; bootm ${kloadaddr} - ${fdtaddr}
ここbootmじゃなくて、bootzね。
あとこれも。
bootfile=uImage
zImageね。
こいつらをuEnv.txtに反映してみる。
このまま起動したUbuntuで作業する。
ubuntu@ubuntu-armhf:~$ cd /boot/uboot ubuntu@ubuntu-armhf:/boot/uboot$ ls MLO u-boot.img uEnv.txt ubuntu@ubuntu-armhf:/boot/uboot$ cat uEnv.txt mmcpart=2 optargs=fixrtc uenvcmd=i2c mw 0x24 1 0x3e; kd=0; if test $mmcdev -eq 1; then mmc dev 0; if mmc rescan; then kd=1; fi; mmc dev 1; fi; setenv mmcroot /dev/mmcblk${kd}p${mmcpart} ro loadfdt=load mmc ${mmcdev}:${mmcpart} ${fdtaddr} ${bootdir}/dtbs/${fdtfile} loadimage=load mmc ${mmcdev}:${mmcpart} ${loadaddr} ${bootdir}/${bootfile}
訂正分2行を追記する。
ubuntu@ubuntu-armhf:/boot/uboot$ sudo vi uEnv.txt mmcpart=2 bootfile=zImage optargs=fixrtc uenvcmd=i2c mw 0x24 1 0x3e; kd=0; if test $mmcdev -eq 1; then mmc dev 0; if mmc rescan; then kd=1; fi; mmc dev 1; fi; setenv mmcroot /dev/mmcblk${kd}p${mmcpart} ro loadfdt=load mmc ${mmcdev}:${mmcpart} ${fdtaddr} ${bootdir}/dtbs/${fdtfile} loadimage=load mmc ${mmcdev}:${mmcpart} ${loadaddr} ${bootdir}/${bootfile} mmcboot=echo Booting from mmc ...; run mmcargs; bootz ${kloadaddr} - ${fdtaddr}
再起動。
ubuntu@ubuntu-armhf:/boot/uboot$ sudo reboot
はい、ボタンなしでも起動してきた。
Ubuntu 13.10 ubuntu-armhf ttyO0 ubuntu-armhf login: ubuntu Password: Last login: Wed Jan 15 07:54:05 UTC 2014 on ttyO0 ubuntu@ubuntu-armhf:~$
解決。