2012年03月06日
KZM-A9-DualボードでBuildrootを試す
開発マシンには、Ubuntu 10. 04 (x86_64), CPU: Intel Core i7 950 @3.07GHz, メモリ 24GB を使用しています。
ダウンロードとコンフィグ
$ wget http://buildroot.uclibc.org/downloads/buildroot-2012.02.tar.bz2 $ tar xvf buildroot-2012.02.tar.bz2 $ cd buildroot-2012.02/ $ make menuconfig
以下の項目を変更しました。
Target Architecture (arm) Target Architecture Variant (cortex-A9) Build options ---> (8) Number of jobs to run simultaneously Toolchain ---> Kernel Headers (Linux 2.6.35.x kernel headers) ---> System configuration ---> (ttyS1) Port to run getty (login prompt) on
ビルド
$ time make 2>&1 |tee make.log
一番最初は必要なファイルをダウンロードします。以下の時間は2回め以降なのでダウンロード時間を含んでいません。
real 8m33.795s user 33m25.410s sys 3m14.800s
$ cd output/images/ $ ls -l -h total 1.4M -rw-r--r-- 1 koba koba 1.4M 2012-03-06 16:12 rootfs.tar
NFSrootでKZM-A9-Dualボードで動かしてみる
$ sudo mkdir -p /export/buildroot/uclibc/root $ sudo tar xvf rootfs.tar -C /export/buildroot/uclibc/root/
カーネルのブートパラメータ。NFSサーバを192.168.1.26とすると
root=/dev/nfs nfsroot=192.168.1.26:/export/buildroot/uclibc/root ip=dhcp \ noinitrd init=/linuxrc mem=129M@0x40000000 mem=256M@0x50000000 \ debug console=ttyS1,115200n8n video=qfb rootwait rw
init=/linuxrc を追加しました。(追記:init=/linuxrc はつけなくても、デフォルトで/sbin/init を起動するので大丈夫です。)
起動ログ。
... [ 3.110000] Sending DHCP requests .., OK [ 5.790000] IP-Config: Got DHCP answer from 0.0.0.0, my address is 192.168.1.125 [ 5.790000] IP-Config: Complete: [ 5.800000] device=eth0, addr=192.168.1.125, mask=255.255.255.0, gw=192.168.1.62, [ 5.800000] host=192.168.1.125, domain=kmckk.jp, nis-domain=(none), [ 5.810000] bootserver=0.0.0.0, rootserver=192.168.1.26, rootpath= [ 5.820000] Looking up port of RPC 100003/2 on 192.168.1.26 [ 5.830000] Looking up port of RPC 100005/1 on 192.168.1.26 [ 5.840000] VFS: Mounted root (nfs filesystem) on device 0:12. [ 5.840000] Freeing init memory: 120K Starting logging: OK Initializing random number generator... done. Starting network... ip: RTNETLINK answers: File exists Welcome to Buildroot buildroot login:
rootでパスワード無しでログインできます。
# ps PID USER COMMAND 1 root {linuxrc} init 2 root [kthreadd] 3 root [ksoftirqd/0] 4 root [migration/0] 5 root [migration/1] 6 root [ksoftirqd/1] 7 root [events/0] 8 root [events/1] 9 root [khelper] 10 root [async/mgr] 11 root [suspend] 12 root [sync_supers] 13 root [bdi-default] 14 root [kblockd/0] 15 root [kblockd/1] 16 root [khubd] 17 root [kmmcd] 18 root [rpciod/0] 19 root [rpciod/1] 20 root [kswapd0] 21 root [aio/0] 22 root [aio/1] 23 root [nfsiod] 24 root [emxx_fb] 25 root [emxx_lcd] 26 root [kv4l2_rot] 27 root [kv4l2_tmr] 28 root [kv4l2_lcd] 31 root [ehci-wq] 32 root [usb_suspend] 33 root [file-storage] 34 root [usbhid_resumer] 35 root [binder] 36 root [mmcqd] 39 root [flush-0:12] 47 root /sbin/syslogd -m 0 49 root /sbin/klogd 63 root -sh 68 root ps #
busybox しか入っていないので、/bin と /sbin のほぼ全てのファイルが /bin/busybox へのシンボリックリンクになっています。
# ls -l /bin total 584 lrwxrwxrwx 1 root root 7 Mar 8 2012 addgroup -> busybox lrwxrwxrwx 1 root root 7 Mar 8 2012 adduser -> busybox lrwxrwxrwx 1 root root 7 Mar 8 2012 ash -> busybox -rwsr-xr-x 1 root root 594104 Mar 8 2012 busybox lrwxrwxrwx 1 root root 7 Mar 8 2012 cat -> busybox lrwxrwxrwx 1 root root 7 Mar 8 2012 catv -> busybox lrwxrwxrwx 1 root root 7 Mar 8 2012 chattr -> busybox lrwxrwxrwx 1 root root 7 Mar 8 2012 chgrp -> busybox lrwxrwxrwx 1 root root 7 Mar 8 2012 chmod -> busybox lrwxrwxrwx 1 root root 7 Mar 8 2012 chown -> busybox lrwxrwxrwx 1 root root 7 Mar 8 2012 cp -> busybox lrwxrwxrwx 1 root root 7 Mar 8 2012 cpio -> busybox lrwxrwxrwx 1 root root 7 Mar 8 2012 date -> busybox ...
libcはuclibcです。
# ls -l /lib total 544 -rwxr-xr-x 1 root root 25300 Mar 6 2012 ld-uClibc-0.9.32.1.so lrwxrwxrwx 1 root root 21 Mar 5 2012 ld-uClibc.so.0 -> ld-uClibc-0.9.32.1.so lrwxrwxrwx 1 root root 21 Mar 5 2012 libc.so.0 -> libuClibc-0.9.32.1.so -rwxr-xr-x 1 root root 12996 Mar 6 2012 libcrypt-0.9.32.1.so lrwxrwxrwx 1 root root 20 Mar 5 2012 libcrypt.so.0 -> libcrypt-0.9.32.1.so -rwxr-xr-x 1 root root 9052 Mar 6 2012 libdl-0.9.32.1.so lrwxrwxrwx 1 root root 17 Mar 5 2012 libdl.so.0 -> libdl-0.9.32.1.so -rw-r--r-- 1 root root 135 Mar 6 2012 libgcc_s.so -rw-r--r-- 1 root root 40944 Mar 6 2012 libgcc_s.so.1 -rwxr-xr-x 1 root root 62248 Mar 6 2012 libm-0.9.32.1.so lrwxrwxrwx 1 root root 16 Mar 5 2012 libm.so.0 -> libm-0.9.32.1.so -rwxr-xr-x 1 root root 4736 Mar 6 2012 libnsl-0.9.32.1.so lrwxrwxrwx 1 root root 18 Mar 5 2012 libnsl.so.0 -> libnsl-0.9.32.1.so -rwxr-xr-x 1 root root 71200 Mar 6 2012 libpthread-0.9.32.1.so lrwxrwxrwx 1 root root 22 Mar 5 2012 libpthread.so.0 -> libpthread-0.9.32.1.so -rwxr-xr-x 1 root root 4740 Mar 6 2012 libresolv-0.9.32.1.so lrwxrwxrwx 1 root root 21 Mar 5 2012 libresolv.so.0 -> libresolv-0.9.32.1.so -rwxr-xr-x 1 root root 13300 Mar 6 2012 librt-0.9.32.1.so lrwxrwxrwx 1 root root 17 Mar 5 2012 librt.so.0 -> librt-0.9.32.1.so -rwxr-xr-x 1 root root 260996 Mar 6 2012 libuClibc-0.9.32.1.so -rwxr-xr-x 1 root root 4756 Mar 6 2012 libutil-0.9.32.1.so lrwxrwxrwx 1 root root 19 Mar 5 2012 libutil.so.0 -> libutil-0.9.32.1.so #
追記
NFSでなくて、initramfsを使ってカーネルに組み込んでしまう方法については、こちらを参照してください。これだとNFSサーバの準備が不要です。