做文件系统,busybox那是少不了的,他主要就是一个工具集,/bin和/sbin下的各种常用命令。
上下载一个最新的
28 March 2010 -- BusyBox 1.16.1 (stable)
注释:为了使生成的二进制文件我选择使用uclibc库,所以编译器我选择ELDK的基于uclibc库的交叉编译环境,下载地址:ftp://ftp.denx.de/pub/eldk/4.1/arm-linux-x86-uclibc/iso/
下载了busybox-1.16.1.tar.bz2
tar xvfj busybox-1.16.1.tar.bz2 -C ./filesystem
cd busybox-1.16.1
make menuconfig
busybox setting --> installation options --> 选上 Don't use /usr
顺便把安装目录填上,我的是${MRFS}
然后miscellanous utilities下的inotifyd readahead taskset去掉,可能由于ELDK的原因这些东西编译会出错,暂时不用就去掉了
make ARCH=arm CROSS_COMPILE=arm-linux-
make install
我们就可以看到在我们的${MRFS}目录下面生成了三个文件,bin linuxrc sbin
然后用
arm-linux-readelf -d ${MRFS}/bin/busybox
我们可以得到我们需要的库,因为我们使用的busybox是动态链接的,这样可以节约空间 Dynamic section at offset 0xd2014 contains 18 entries: Tag Type Name/Value 0x00000001 (NEEDED) Shared library: [libm.so.0] 0x00000001 (NEEDED) Shared library: [libc.so.0]
|
这样一个最基本的文件系统下的工具集做好了.
下面有个脚本可以自动建立一些文件系统的目录
1 #! /bin/sh 2 echo "creatint rootfs dir......" 3 mkdir rootfs 4 cd rootfs 5 6 echo "making dir : bin dev etc lib proc sbin sys usr" 7 mkdir bin dev etc lib proc sbin sys usr #必备的8个目录 8 mkdir usr/bin usr/lib usr/sbin lib/modules 9 10 11 # Don't use mknod ,unless you run this Script as root ! 12 #mknod -m 600 dev/console c 5 1 13 #mknod -m 666 dev/null c 1 3 14 15 16 17 echo "making dir : mnt tmp var" 18 mkdir mnt tmp var 19 chmod 1777 tmp 20 mkdir var/lib var/lock var/log var/run var/tmp 21 chmod 1777 var/tmp 22 23 24 25 echo "making dir : home root boot" 26 mkdir home root 27 28 echo "done"
|
我的ubuntu下执行上面脚本后,可能还要执行下面两句话
sudo mknod -m 600 dev/console c 5 1 sudo mknod -m 666 dev/null c 1 3
|
拷贝库文件
上面看了busybox需要libm.so.0和libc.so.0
到交叉编译路径去找
一般还需要一个和ld相关的库函数
做nfs的时候可以建议把所有的库函数cp过来
|
最后需要写inittab了
在busybox里面可以看到如果没有inittab会自动执行init.d/rcS和一些命令
起始阶段我们求简单就只写一个init.d/rcS
1 #!/bin/sh
2 mount -t proc proc /proc
3 mount -t sysfs sysfs /sys
4 mount -t tmpfs tmpfs /dev
5 mdev -s
6 sync
|
阅读(225) | 评论(0) | 转发(0) |