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サーバの準備が不要です。