armhf.comで配布しているUbuntuイメージはボタン押さないと起動できない件

Beaglebone blackにUbuntuを入れるとき、armhf.comのやり方では、UbuntuというかLinux起動できないとトモさんに言われた。
彼は、ddで書けるこのイメージを使っているようだが、SDから起動できないらしい。
http://www.armhf.com/index.php/download/
基板のボタンを押しながら起動すると上がってくるらしい。
わたしは、elinux.orgのを使っているので、そういう不自由な目にあったことはない。
http://elinux.org/BeagleBoardUbuntu


そういえば、ABC2013Autumnのバザール会場でも同じようなこと言ってた人いたな...
?「SDにUbuntu入れると、ボタン押さないと起動しないですよね?」
私「え? できますよ?」
?「え? そうですか?」
で済ましてしまつてスマヌスマヌ。


ubootのプロンプトで止まっているそうなので、uEnv.txtの中身がおかしいようだ。
確認してもらうと、/boot/uImageを探して無いと言っているようだ。
/boot/zImageはあるのだそうだけど、それがmkimageされたものかどうかはわかららないみたい。
fileコマンドで見てっていったけど、やってくんないし。
しょうがないから、見てみることに。

kinneko@L2012:~$ mkdir BBB_ubuntu
kinneko@L2012:~$ cd BBB_ubuntu/
kinneko@L2012:~/BBB_ubuntu$ wget http://s3.armhf.com/debian/saucy/bone/ubuntu-saucy-13.10-armhf-3.8.13-bone30.img.xz

ついでに、Method 2: u-boot and rootfsのほうも落としておく。

kinneko@L2012:~/BBB_ubuntu$ wget http://s3.armhf.com/boards/bbb/uboot-bone.tar.xz
kinneko@L2012:~/BBB_ubuntu$ wget http://s3.armhf.com/debian/saucy/bone/ubuntu-saucy-13.10-armhf-rootfs-3.8.13-bone30.tar.xz

確認。

kinneko@L2012:~/BBB_ubuntu$ ls -lh
total 148M
 -rw-r--r-- 1 kinneko kinneko 154K Nov 24 06:16 uboot-bone.tar.xz
 -rw-r--r-- 1 kinneko kinneko  75M Nov 24 06:33 ubuntu-saucy-13.10-armhf-3.8.13-bone30.img.xz
 -rw-r--r-- 1 kinneko kinneko  73M Nov 24 06:21 ubuntu-saucy-13.10-armhf-rootfs-3.8.13-bone30.tar.xz


kinneko@L2012:~/BBB_ubuntu$ md5sum ./*
d95126f87191de8064e9666983d11cfc  ./uboot-bone.tar.xz
8173dffeaae12421a5542c3578afdd82  ./ubuntu-saucy-13.10-armhf-3.8.13-bone30.img.xz
e53b9a7884af980f552a21057a0bd0d2  ./ubuntu-saucy-13.10-armhf-rootfs-3.8.13-bone30.tar.xz

uboot-boneがチェックサム違うよ...
Webには、

md5: ab57368cddc6dba498c874330a319639

って書いてあるんだけどな...
めんどくさいし、展開できればいいか。
展開。

kinneko@L2012:~/BBB_ubuntu$ xz -dv ./*
./uboot-bone.tar.xz (1/3)
  100 %       153.4 KiB / 470.0 KiB = 0.326

./ubuntu-saucy-13.10-armhf-3.8.13-bone30.img.xz (2/3)
  100 %       74.7 MiB / 1832.0 MiB = 0.041   184 MiB/s       0:09

./ubuntu-saucy-13.10-armhf-rootfs-3.8.13-bone30.tar.xz (3/3)
  100 %        72.8 MiB / 259.8 MiB = 0.280    47 MiB/s       0:05


Method 2: u-boot and rootfsのubootアーカイブから見る。

kinneko@L2012:~/BBB_ubuntu$ tar xvf uboot-bone.tar
MLO
u-boot.img
uEnv.txt
kinneko@L2012:~/BBB_ubuntu$ 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}

肝心のマクロ部分がわかんないな...


imageのほうを見る。

kinneko@L2012:~/BBB_ubuntu$ sudo fdisk -l ubuntu-saucy-13.10-armhf-3.8.13-bone30.img

Disk ubuntu-saucy-13.10-armhf-3.8.13-bone30.img: 1920 MB, 1920991232 bytes
255 heads, 63 sectors/track, 233 cylinders, total 3751936 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x80008000

                                     Device Boot      Start         End      Blocks   Id  System
ubuntu-saucy-13.10-armhf-3.8.13-bone30.img1   *        2048        4095        1024    1  FAT12
ubuntu-saucy-13.10-armhf-3.8.13-bone30.img2            4096     3751935     1873920   83  Linux

第一パーティションをマウントする。
2048x512=1048576。

kinneko@L2012:~/BBB_ubuntu$ sudo mount -o loop,offset=1048576 ubuntu-saucy-13.10-armhf-3.8.13-bone30.img /media
kinneko@L2012:~/BBB_ubuntu$ ls -l /media/
total 466
 -rwxr-xr-x 1 root root 104320 Nov 17 12:54 MLO
 -rwxr-xr-x 1 root root 370652 Nov 17 12:54 u-boot.img
 -rwxr-xr-x 1 root root    340 Nov 17 12:54 uEnv.txt
kinneko@L2012:~/BBB_ubuntu$ cat /media/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}

同じか。

kinneko@L2012:~/BBB_ubuntu$ sudo umount /media

第二パーティションを読みに行っていて、${bootdir}/${bootfile}が/boot/uImageなら辻褄が合うかな。
4096x512=2097152

kinneko@L2012:~/BBB_ubuntu$ sudo mount -o loop,offset=2097152 ubuntu-saucy-13.10-armhf-3.8.13-bone30.img /media
kinneko@L2012:~/BBB_ubuntu$ ls /media/
bin   dev  home  lost+found  mnt  proc  run   srv  tmp  var
boot  etc  lib   media       opt  root  sbin  sys  usr
kinneko@L2012:~/BBB_ubuntu$ ls /media/boot/
System.map-3.8.13-bone30  dtbs   vmlinuz-3.8.13-bone30
config-3.8.13-bone30      uboot  zImage
kinneko@L2012:~/BBB_ubuntu$ ls /media/boot/uboot/

ほんとだ。zImageだよ。
${bootfile}がどこに書かれているかが問題だな。
おそらく、uEnvに書かれていないパラメータは、boards.cfgとかで直に埋め込みか。

kinneko@L2012:~/BBB_ubuntu$ sudo find /media/ | grep uImage

uImageはいないのは確認できた。
ubootで自力ロードしているって感じか。
とりあえずのテスト可能なことというと、${loadaddr}がどこかでちゃんと定義されているのであれば、zImageをuImageに変えるだけで起動してくるんじゃないだろうか。
まぁ、ほんとはちゃんとやったほうがいいけどね。


トモさんに、それはやってみたけど駄目だったと言われた。
こんなquick hackでは倒せないか。
こんどは実機でいじってみやう。


自分的には、coreから入れるのが好みかも。


続きはこちら;http://d.hatena.ne.jp/kinneko/20140116/p1