2009年12月27日 星期日

移植 Busybox 1.15.3 到 BeagleBoard

首先下載 Busybox 1.15.3CodeSourcery Sourcery G++ Lite Edition 2009q3

將 Busybox 1.15.3 解開,並修改 Makefile 裡的 CROSS_COMPILE 如下:

CROSS_COMPILE ?= arm-none-linux-gnueabi- 

然後編譯 Busybox:

$ make defconfig
$ make
$ make install

到這裡已經備妥 Busybox 了。

接著使用 dd 指令建立一個 64MB 大小的檔案(rootfs-1.15.3-2009q3.bin),並格式化為 ext2 格式。

$ dd if=/dev/zero of=rootfs-1.15.3-2009q3.bin bs=1024 count=65536
$ sudo mkfs.ext2 rootfs-1.15.3-2009q3.bin

建立 file system 除了需要 Busybox 外,還需要再編寫像是 etc/inittab 及 etc/profile 等設定檔,這些檔案可以在 Busybox 的原始碼裡的 examples 和 examples/bootfloppy 目錄裡找到範例,此外也可以利用 BeagleBoard 的範例,例如從 http://code.google.com/p/beagleboard/downloads/list 下載 rd-ext2-8M.bin 及 ramdisk_revc_v3.gz 來取得範例。

$ sudo mount -o loop rootfs-1.15.3-2009q3.bin /tmp/rootfs
$ sudo mount -o loop rd-ext2-8M.bin /tmp/orig

將 rootfs-1.15.3-2009q3.bin 掛載在 /tmp/rootfs,並將當參考範例的 rd-ext2-8M.bin 掛載在 /tmp/orig,然後將編譯後的 Busybox 複製到 /tmp/rootfs,並從 cross compiler 複製需要的 libc。

$ (cd ./busybox-1.15.3/_install/ && sudo tar cf - .) | \
(cd /tmp/rootfs/ && sudo tar xvf -)

$ (cd /opt/CodeSourcery/arm-2009q3/arm-none-linux-gnueabi/libc/lib/ \
&& sudo tar cf - .) | (cd /tmp/rootfs/lib/ && sudo tar xvf -)

再取用 rd-ext2-8M.bin 的 etc 目錄。

$ (cd /tmp/orig/etc/ && sudo tar cf - .) | \
(cd /tmp/rootfs/etc/ && sudo tar xvf -)

最後再建立 console 及 null 兩個裝置節點,基本上 file system 就建立完成了。

sudo mknod -m 600 console c 5 1
sudo mknod -m 666 null c 1 3

OK~~~以下是這個 file system 在 BeagleBoard 執行起來後的訊息摘錄:

VFS: Mounted root (ext2 filesystem) on device 1:0.
Freeing init memory: 120K

beagleboard.org (v0.90) : System initialization...

Kernel release : Linux 2.6.32-rc8-06879-g4355c41
Kernel version : #1 Sun Nov 29 12:20:43 CST 2009

Mounting /proc : [SUCCESS]
Mounting /sys : [SUCCESS]
Mounting /dev : [SUCCESS]
Mounting /dev/pts : [SUCCESS]
Enabling hot-plug : [SUCCESS]
Populating /dev : [SUCCESS]
Mounting other filesystems : [SUCCESS]
Starting syslogd : [SUCCESS]
Starting telnetd : [SUCCESS]
/etc/init.d/rcS: line 100: can't create /sys/power/fb_timeout_value: nonexistent directory
Jan 1 00:00:04 beagleboard syslog.info syslogd started: BusyBox v1.15.3

System initialization complete.

Please press Enter to activate this console.

延伸閱讀: