作業用miniroot作成 -1-
ターゲットは、arm-v7a-neon。
ほんとは、multistrapでarmhfでやりたかったのだけど、時間がなかったのでarmelでdebootstrapで妥協した。
いかんいかん、勉強の機会を逸した。
debootstrapはえらく久しぶりだったので、とりあえず、後のために履歴を残す。
要求はmkfs.ext3, mkfs.vfat, fdisk, dd, tarが入っていればいいということ。
要するに内蔵eMMCの書き換え専用イメージのベースがほしいわけ。
単独起動したらいいので、細かい設定は抜きで。
ターゲットには、どのみち無線LANしかないので、ネットワーク接続可能になることは期待薄。
debootstrapする
kinneko@BuildSV:~/ARMinimal$ mkdir armel kinneko@BuildSV:~/ARMinimal$ cd armel/ kinneko@BuildSV:~/ARMinimal/armel$ sudo apt-get install debootstrap kinneko@BuildSV:~/ARMinimal/armel$ sudo debootstrap --arch armel squeeze ./ http://ftp.debian.org/debian (snip) W: Failure trying to run: chroot /home/kinneko/ARMinimal/armel/. mount -t proc proc /proc
あ、foreignオプション忘れた。
ついでにminbaseも追加。
kinneko@BuildSV:~/ARMinimal/armel$ sudo debootstrap --arch armel --variant=minbase --foreign squeeze ./ http://ftp.debian.org/debian (snip) I: Extracting zlib1g... kinneko@BuildSV:~/ARMinimal/armel$ ls bin debootstrap etc lib proc sbin sys usr boot dev home mnt root selinux tmp var
できあがり。
アーカイブする。
kinneko@BuildSV:~/ARMinimal/armel$ sudo tar zcvfp ../root-armel.tgz ./ kinneko@BuildSV:~/ARMinimal/armel$ cd .. kinneko@BuildSV:~/ARMinimal$ ls -l root-armel.tgz -rw-r--r-- 1 root root 82946901 Jul 12 23:39 root-armel.tgz
80MBくらい。
でかい...
まぁ、起動容量に余裕があるから、小さくする労力をかける必要はないな。
実機にてdebootstrapのセカンドステージを実行
次に、実機でセカンドステージる。
最近は、qemuのライブラリ使ったり、Multiarchライブラリ使ったりで、セカンドステージもクロスでできるらしいが、それも試している余裕がない。
SDを用意して書き込み。
SDを4パーティションに分け、フォーマット。
中身をそれぞれに展開。
kinneko@BuildSV:~/ARMinimal$ sudo mount /dev/sdb4 /media kinneko@BuildSV:~/ARMinimal$ cd /media/ kinneko@BuildSV:/media$ sudo tar xvfp ~/ARMinimal/root-armel.tgz kinneko@BuildSV:/media$ cd ~/ARMinimal/ kinneko@BuildSV:~/ARMinimal$ sudo umount /media kinneko@BuildSV:~/ARMinimal$ sudo mount /dev/sdb3 /media kinneko@BuildSV:/media$ sudo tar xvf ~/TARGET/buildtest/work/outobj/android-fs_shurink_neon.tar.gz kinneko@BuildSV:/media$ cd ~/ARMinimal/ kinneko@BuildSV:~/ARMinimal$ sudo umount /media kinneko@BuildSV:~/ARMinimal$ sudo mount /dev/sdb1 /media kinneko@BuildSV:~/ARMinimal$ sudo cp ~/TARGET/buildtest/work/outobj/*.bin /media/ kinneko@BuildSV:~/ARMinimal$ sudo cp ~/TARGET/buildtest/work/outobj/uImage.neon /media/uImage kinneko@BuildSV:~/ARMinimal$ sudo umount /media
ターゲットにSDを入れてシリアル接続してubootから適当に起動。
kinneko@BuildSV:~/ARMinimal$ sudo minicom -8 -D /dev/ttyUSB1 Booted Device: SD DRAM: 256 MB *** Warning - bad CRC, using default environment In: serial Out: serial Err: serial Hit any key to stop autoboot: 0 U-BOOT # setenv bootargs root=/dev/mmcblk1p4 noinitrd init=/bin/sh console=ttyS0,115200n8n SELINUX_INIT=no mem=180M@1024M rw video=qfb: ip=none rootfstype=ext3 rootwait;bootm 40007fc0 (snip) VFS: Mounted root (ext3 filesystem) on device 179:12. Freeing init memory: 116K /bin/sh: can't access tty; job control turned off #
来た。
セカンドステージを実行。
# /debootstrap/debootstrap --second-stage I: Installing core packages... (snip) I: Base system installed successfully.
完成。
この状態で、mkfs.ext3, fdisk, dd, tarあり。
mkfs.vfatだけ不足。
これは後から考える。
eMMCへのアクセスを確認
起動ログでは、内蔵eMMCとSDCardは認識している。
mmc0: new high speed MMC card at address 0001 mmcblk0: mmc0:0001 M4G1FA 3.72 GiB mmcblk0: p1 p2 p3 p4 mmc1: new high speed SD card at address 8dc5 mmcblk1: mmc1:8dc5 SD02G 1.83 GiB mmcblk1: p1 p2 p3 p4
kernelのビルドオプションでeMMCアクセスに必要なモジュールが組み込まれているか調べる。
# mount -t proc proc /proc # zcat /proc/config.gz |grep CONFIG_MMC CONFIG_MMC=y # CONFIG_MMC_DEBUG is not set CONFIG_MMC_UNSAFE_RESUME=y CONFIG_MMC_EMBEDDED_SDIO=y # CONFIG_MMC_PARANOID_SD_INIT is not set CONFIG_MMC_BLOCK=y # CONFIG_MMC_BLOCK_BOUNCE is not set # CONFIG_MMC_BLOCK_DEFERRED_RESUME is not set # CONFIG_MMC_TEST is not set # CONFIG_MMC_SDHCI is not set
MMC_SDHCIってなくてもよかったんだっけ?
sdhci: Secure Digital Host Controller Interface driver
今回の用途では、なくても問題なさそう。
内蔵eMMCにアクセスするには、デバイスファイルが必要。
作っておく。
たしか、ubootは8パーティションまでしか見られないのだったかな。
一応、8つまで作っておく。
# mknod /dev/mmcblk0 b 179 0 # mknod /dev/mmcblk0p1 b 179 1 # mknod /dev/mmcblk0p2 b 179 2 # mknod /dev/mmcblk0p3 b 179 3 # mknod /dev/mmcblk0p4 b 179 4 # mknod /dev/mmcblk0p5 b 179 5 # mknod /dev/mmcblk0p6 b 179 6 # mknod /dev/mmcblk0p7 b 179 7 # mknod /dev/mmcblk0p8 b 179 8
ddで、ダンプできることを確認しておく。
できたできた。
mkfs.vfatの追加
mkfs.vfatを入れたい。
ネットないので、SDだけ外して、パッケージファイルを取得しておく。
kinneko@BuildSV:/media$ sudo wget http://ftp.de.debian.org/debian/pool/main/d/dosfstools/dosfstools_3.0.9-1_armel.deb
SDをターゲットに挿して起動。
# dpkg -i dosfstools_3.0.9-1_armel.deb dpkg: error: PATH is not set.
うぐぐ。
# export PATH=$PATH:/usr/local/sbin/ # export PATH=$PATH:/usr/sbin/ # export PATH=$PATH:/sbin # dpkg -i dosfstools_3.0.9-1_armel.deb Selecting previously deselected package dosfstools. (Reading database ... 6140 files and directories currently installed.) Unpacking dosfstools (from dosfstools_3.0.9-1_armel.deb) ... Setting up dosfstools (3.0.9-1) ... # mkfs.vfat mkfs.vfat 3.0.9 (31 Jan 2010) No device specified! Usage: mkdosfs [-a][-A][-c][-C][-v][-I][-l bad-block-file][-b backup-boot-sector] [-m boot-msg-file][-n volume-name][-i volume-id] [-s sectors-per-cluster][-S logical-sector-size][-f number-of-FATs] [-h hidden-sectors][-F fat-size][-r root-dir-entries][-R reserved-sectors] /dev/name [blocks] # rm dosfstools_3.0.9-1_armel.deb # apt-get clean # sync
アーカイブ作成
あとは、アーカイブ作って終わり。
kinneko@BuildSV:/media$ sudo tar zcvfp ~/ARMinimal/rootfs-armel.tgz ./ kinneko@BuildSV:/media$ ~/ARMinimal kinneko@BuildSV:~/ARMinimal$ ls -lh rootfs-armel.tgz -rw-r--r-- 1 root root 39M Jul 13 02:07 rootfs-armel.tgz
しかしデカいな。
ふつうは、このあと、ネットワーク設定したり、fstab書いたり、シリアルコンソールまともにしたり、エディタ入れたり、hostnameつけたり、apt-get update/upgradeしたり、そういう作業もする。
今回は必要ないのと、ネットワークないのでパス。
RTCないので、時計ないときは、こんなことも。
echo HWCLOCKACCESS=no >> /etc/default/rcS
buildrootで作ったものとかはさらに小さいけど、パッケージ管理が生きていないので、いろいろと追加していくのは自前ビルドになって、結構メンテナンスがしんどい。
debootstrapだと、違うアーキテクチャでも簡単に作れて便利だ。
しかし、久しぶりにやったら、思ったより時間かかってしまつた。
1時間くらいでできると思ったのだけど(^^;。
耄碌したわい...