2012年03月06日

KZM-A9-DualボードでBuildrootを試す

ELCでも紹介されていたBuildrootを使ってbusybox + uclibc のコンパクトなルートファイルシステムを作成し、KZM-A9-Dualボードで動かしてみました。



開発マシンには、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サーバの準備が不要です。

Buildrootで作ったルートファイルシステムをinitramfsでカーネルに組み込む



トラックバックURL

コメントする

名前
URL
 
  絵文字
 
 
記事検索
最新コメント
アクセスカウンター
  • 今日:
  • 昨日:
  • 累計:

QRコード
QRコード