続: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:~$

解決。