按这个说明制作的根文件系统直接就能好用,我仅对几个特别之处进行说明.
1 建立根文件系统结构
#mkdir rootfs
#cd rootfs
#mkdir bin dev etc lib proc sbin tmp usr var
#chmod 1777 tmp
#mkdir usr/bin usr/lib usr/sbin
#mkdir var/lib var/lock var/log var/run var/tmp
#chmod 1777 var/tmp
2 准备链接库
#cd $/lib ($是交叉编译环境的目录)
#for file in libc libcrypt libdl libm \
>libpthread libresolv libutil
>do
>cp $file-*.so /home/fortis/rootfs/lib 注:这里的rootfs就是步骤1中建立那个.
>cp -d $file.so.[*0-9] /home/fortis/rootfs/lib
>done
#cp -d ld*.so* /home/fortis/rootfs/lib
3 使用busybox制作系统应用程序
3.1 下载busybox(http://www.busybox.net/)并解压。注:我用的版本是busybox-1.1.3
3.2 进入解压后的目录,配置Busybox
$make menuconfig
Busybox Settings >
General Configuration >
[*] Support for devfs
Build Options >
[*] Build BusyBox as a static binary (no shared libs)
/* 将busybox编译为静态连接,少了启动时找动态库的麻烦 */
[*] Do you want to build BusyBox with a Cross Compiler?
(/usr/local/arm/3.4.1/bin/arm-linux-)
/*Cross Compiler prefix/* 指定交叉编译工具路径 */ 注:这里的交叉编译器根据自己情况而定,最好和linux内核用
同一编译器,还要与busybox版本匹配.我的这个版本没出现问题.
Init Utilities >
[*] init
[*] Support reading an inittab file
/* 支持init读取/etc/inittab配置文件,一定要选上 */
Shells >
Choose your default shell (ash) >
/* (X) ash 选中ash,这样生成的时候才会生成bin/sh文件看看我们前头的linuxrc脚本的头一句: #!/bin/sh 是由
bin/sh来解释执行的*/
[*] ash
Coreutils >
[*] cp
[*] cat
[*] ls
[*] mkdir
[*] echo (basic SuSv3 version taking no options)
[*] env
[*] mv
[*] pwd
[*] rm
[*] touch
Editors >
[*] vi
Linux System Utilities >
[*] mount
[*] umount
[*] Support loopback mounts
[*] Support for the old /etc/mtab file
Networking Utilities >
[*] inetd
/*
* 支持inetd超级服务器
*/
3.3 编译并安装
$cd Busybox-1.1.3
$make TARGET_ARCH=arm PREFIX=/home/fortis/rootfs/ all install
PREFIX指明安装路径:就是我们根文件系统所在路径。
4 准备所需的设备文件
可以直接拷贝宿主机上的,或者自建几个就是。
#cd rootfs/dev
#mknod -m 600 console c 5 1
5 创建linuxrc文件 注:这步可以省掉不用,直接用buybox生成的linuxrc就可以启动.
内容如下:
$ vim rootfs/linuxrc
#!/bin/sh
echo "Hello linux ,gggggg"
exec /sbin/init
然后修改权限:chmod 775 linuxrc
6 制作initrd映象文件
#mkdir initrd
#dd if=/dev/zero of=init.img bs=1k count=8192 注:我对这个根文件系统的文件名进行了修改,使之与
zlg_boot.init中的文件名一致,否则就要修改zlg_boot.init中的文件名.
#/sbin/mke2fs -F -v -m0 init.img
#mount -o loop init.img initrd
#cp -av rootfs/* initrd
#umount initrd