一、环境Ubuntu 8.04arm-linux-gcc 3.4.5busybox-1.1.3
二、busybox制作文件系统 1、下载busybox1.1.3(http://www.busybox.net/)并解压。 2、进入解压后的目录,配置Busybox
#make menuconfig
Busybox Settings >
General Configuration > [*] Support for devfs
Init Utilities > [*] init [*] Support reading an inittab file /* 支持init读取/etc/inittab配置文件,一定要选上 */ [*] Be _extra_ quiet on boot [*] Support running init from within an initrd (not initramfs) [*] poweroff, halt, and reboot [*] mesg
Shells >
Choose your default shell (ash) > /* (X) ash 选中ash,这样生成的时候才会生成bin/sh文件 * 看看我们前头的linuxrc脚本的头一句: * #!/bin/sh 是由bin/sh来解释执行的 */ (我开始就因为在这里没选上,结果就造成启动不起来 ) [*] ash
添加历史记录、自动补全、删除字符的功能: Shells --->--- Bourne Shell Options [ ] Hide message on interactive shell startup [ ] Standalone shell [*] command line editing [*] vi-style line editing commands (15) history size [*] history saving [*] tab completion [*] username completion [ ] Fancy shell prompts
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
Linux Module Utilities ---> [*] insmod [*] rmmod [*] lsmod [*] lsmod pretty output for 2.6.x Linux kernels [*] modprobe [*] Multiple options parsing --- Options common to multiple modutils [*] Support tainted module checking with new kernels [ ] Support version 2.2.x to 2.4.x Linux kernels //此项一定不要选!!! [*] Support version 2.6.x Linux kernels
Networking Utilities > [*] ifconfig [*] ping
Archival Utilities ---> [*] tar [*] Enable archive creation (NEW) [*] Enable -j option to handle .tar.bz2 files
注:可根据需要自已选择命令。
3、如果文件系统在2410上运行的话,不需要修改源码,如果在2440上运行,需要将busybox-1.1.3/init/init.c中的两处 close(0); close(1); close(2);注释掉: /* Clean up */ //close(0); //close(1); //close(2);
/* Close whatever files are open, and reset the console. */ //close(0); //close(1); //close(2); 4、编译并安装Busybox (1.1.3的Makefile里没有设置ARCH和CROSS内容,需要亲自在指令里写上,我是这么做的)
#export PATH=$PATH:usr/crosstool/gcc-3.4.5-glibc-2.3.6/arm-linux/bin #make TARGET_ARCH=arm CROSS="arm-linux-" #make install
5、建立根文件系统结构 #cd ~ #mkdir rootfs #cd rootfs #mkdir bin dev etc lib proc sbin tmp usr var mnt #chmod 1777 tmp #mkdir usr/bin usr/lib usr/sbin #mkdir var/lib var/lock var/log var/run var/tmp #mkdir etc/init.d #chmod 1777 var/tmp 把 busybox1.1.3/_install/目录下的所有文件copy过来覆盖rootfs文件夹里的空文件夹。
lib里面还要拷入一些库文件,下面仅给出一些常用的库 #cd rootfs/lib #cp -rfd /usr/crosstool/gcc-3.4.5-glibc-2.3.6/arm-linux/arm-linux/lib/ld* ./ #cp -rfd /usr/crosstool/gcc-3.4.5-glibc-2.3.6/arm-linux/arm-linux/lib/libc-2.3.6.so ./ #cp -rfd /usr/crosstool/gcc-3.4.5-glibc-2.3.6/arm-linux/arm-linux/lib/libc.so.6 ./ #cp -rfd /usr/crosstool/gcc-3.4.5-glibc-2.3.6/arm-linux/arm-linux/lib/libm* ./ #cp -rfd /usr/crosstool/gcc-3.4.5-glibc-2.3.6/arm-linux/arm-linux/lib/libcrypt* ./ 当然为了方便,可以将交叉编译的库全放进去,但是这样会增加文件系统的体积。 #cp -rfd /usr/crosstool/gcc-3.4.5-glibc-2.3.6/arm-linux/arm-linux/lib/* ./ (注意-d,保持库文件的链接关系)
6、创建etc/init.d/rcS#!/bin/shecho "running /etc/init.d/rcS"echo "mount the /proc file system"/bin/mount -t proc proc /proc
echo "mount tmpfs filesystem to /tmp"/bin/mount -t tmpfs none /tmp
echo "mount ramfs filesystem to /var"/bin/mount -t ramfs none /var
然后修改权限:chmod 775 rcS
7、创建etc/inittab# This is run first except when bootingconsole::sysinit:/etc/init.d/rcS# Start an "askfirst" shell on the console#::askfirst:-/bin/bashconsole::askfirst:-/bin/sh# Stuff to do when restarting the init process::restart:/sbin/init# Stuff to do before rebooting::ctrlaltdel:/sbin/reboot::shutdown:/bin/umount -a -r 注:需要将内核源码drivers/char/tty_io.c中所有的noctty = 1改为noctty = 0
8、再创建etc/fstabnone /proc proc defaults 0 0none /dev/pts devpts mode="0622" 0 0tmpfs /dev/shm tmpfs defaults 0 0
至此,根文件系统制作完毕。