使用 busybox 建置 Root Filesystem

1. 下載最新的busybox。http://www.busybox.net/

2. 修改 Makefile 中的 ARCH 和 CROSS_COMPLIE。


3. make menuconfig
以下選項為必選項:
|---Busybox Settings
| |---General Configuration
| | |---Show verbose applet usage messages
| | |---Runtime SUID/SGID configuration via /etc/busybox.conf
| |---Build Options
| | |---Build BusyBox as a static binary (no shared libs) //(1)

| | |---(arm-linux-) Cross Compiler prefix  //(5) -add 20100208
| |---Installation Options
| | |---Don't use /usr //(2)
|---Linux System Utilities --->
| |---mdev //(3)
| |---Support /etc/mdev.conf
| |---Support command execution at device addition/removal
|Shells
|---Choose your default shell (msh) ---> //(4)
其它命令和工具則根據需要自行選擇!
1) 這個選項是一定要選擇的,這樣才能把busybox編譯成靜態鏈接的可執行文件,運行時才獨立於其他函數庫.否則必需要其他庫文件才能運行,在單一個linux內核不能使他正常工作。
2) 這個選項也一定要選,否則make install後,busybox將安裝在原系統的/usr下,
3) 如果沒有啟動udev,造成/dev下沒有設備文件。也就是說所有的設備都沒有掛接進來。最新的busybox已經包含了udev的簡化版本即mdev,且使用非常簡單。 要使用mdev還需要在rootfs中做適當配置。
4) 由於ash功能不夠強大,不能支持tab補齊,歷史紀錄等等的高級功能,所以使用busybox裡面的msh代替ash。這裡我使用msh也是可以的,支持tab,歷史紀錄,不過歷史紀錄貌似有點問題。

5) Cross Compiler prefix,要和 Makefile 一致。


4. $ make clean
$ make install
會在 busybox 下產生 _install 這個目錄,包涵了 busybox 的 command (也可以在 Installation Options 裡修改,預設的目錄)。



5. 建立root filesystem 所需的目錄和文件。建立完可以用 $ tree 觀看目錄
1) 先建立一個 script 產生需要的資料夾。
#! /bin/sh
echo "necessary dir : bin sbin dev etc lib proc sys usr"
echo "supported by busybox : bin sbin usr"

echo "making dir : proc sys dev lib etc"
mkdir proc sys dev lib etc

echo "making dir : etc/init.d"
mkdir etc/init.d

echo "necessary dir : usr/bin usr/lib usr/sbin lib/modules"
echo "supported by busybox : usr/bin usr/sbin"
mkdir usr/lib lib/modules

echo "making dir : mnt tmp var"
mkdir mnt tmp var
chmod 1777 tmp

mkdir mnt/etc mnt/jffs2 mnt/yaffs mnt/data mnt/temp
mkdir var/lib var/lock var/log var/run var/tmp
chmod 1777 var/tmp

echo "making dir : home root boot"
mkdir home root boot

echo "done"
2) 建立 /etc/init.d/rcS, /etc/inittab, /etc/fstab, /etc/passed, /etc/group, /etc/shadow,
--------------------------------------------------------------------
/etc/init.d/rcS
#! /bin/sh
echo "mount all ..."
/bin/mount -a

echo "starting mdev ..."
/bin/echo /sbin/mdev > /proc/sys/kernel/hotplug
mdev -s

echo "*******************************************"
echo "* Root Filesystem *"
echo "* Mode by Joseph Lin 2009.09.24 *"
echo "*******************************************"

--------------------------------------------------------------------
etc/inittab
::sysinit:/etc/init.d/rcS
::respawn:-/bin/sh
::ctrlaltdel:/bin/umount -a -r
::shutdown:/bin umount -a -r
::shutdown:/sbin/swapoff -a

--------------------------------------------------------------------
etc/fstab
proc /proc proc defaults 0 0
none /tmp ramfs defaults 0 0
none /var ramfs defaults 0 0
mdev /dev ramfs defaults 0 0
sysfs /sys sysfs defaults 0 0

--------------------------------------------------------------------
etc/passwd
root:x:0:0:root:/root:/bin/sh

--------------------------------------------------------------------
etc/group
root:x:0:

--------------------------------------------------------------------
etc/shadow
root::13942:0:99999:7:::

上面這些檔案,也可以參考 /example 裡的使用。
另外加入一個空白檔案 etc/mdev.conf

3) 建立 node。
3 種方法
** 可以從 /dev 下 copy 到 root filesystem 的 dev 下。
** 似乎也可以從 device.txt 。沒試過
** mknod -m 600 dev/console c 5 1 # 因為有使用 mdev,所以可以只建立基本的,
mknod -m 666 dev/null c 1 3
mknod -m 666 dev/ttyS0 c 4 64

4) 建立 lib, 這部份用途。並不是很清楚。
cp -d /opt/Orion-SDK/armel-2.0/tools/gcc/arm-none-linux-gnueabi/libc/lib/* ./

** -d 因為有些為 symbolic link,要加 -d。
** lib 的來源依照 toolchain 不同來修改。



6. 可以利用 NFS 掛載 filesystem.


7. 製作可以燒到 Flash 的 Imgae.
待續.............................................................................................
最後壓縮成jffs2格式即可
#mkfs.jffs2 -r /home/color/filesystem/rootfs -o rootfs.jffs2 -e 0x20000 --pad=0x500000 -s 0x200 -n
^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^ ^^^^^^^ ^^^^^^^^^^^^^
(1) (2) (3) (4)
(1)根目錄所在文件夾 (2)壓縮後檔名 (3)Block size (4)壓縮後大小



參考

http://tldp.org/HOWTO/Bootdisk-HOWTO/buildroot.htmlhttp://blog.yam.com/jackpapa/article/23322815

http://ycpapa-tw.blogspot.com/2008/10/ggg.html

留言

這個網誌中的熱門文章

NMEA標準格式 -- GPS

網路 Transformer 的用途

cut,sed,awk 字串處理