一、移植Busybox
所谓制作根文件系统,就是创建各种目录,并且在里面创建各种文件。对于创建一个最下根文件系统,只需要在/dev目录下创建必要的设备节点、在/etc目录下创建一些配置文件就可以了,如果Busybox使用动态链接库,那还要在/lib目录下包含库文件。Busybox支持uClibc库和glibc库,对Linux2.2.x之后的内涵支持良好。Busybox的源码可以从http://www.busybox.net/downloads/下载,我下载的是busybox-1.7.5.tar.bz2.
(1)解压busybox
$tar -jxvf busybox-1.7.5.tar.bz2
(2)配置busybox
$make menuconfig Busybox Settings ---> Build Options ---> [ ] Build BusyBox as a static binary (no shared libs) (是否编译成静态库,在这里我没选,使用动态库) Busybox Library Tuning ---> [*] Tab completion (tab缩进功能) [*] Username completion [*] Fancy shell prompts (这两项在创建/etc/profile文件时要用,这样可以命令行有提示符显示) |
其它配置自己可以参考着修改,我就没动了。退出记得保存!
(3)编译和安装Busybox
3.1编译之前首先修改Makefiel,使用交叉编译器
$vim Makefile
175 ARCH ?= arm
176 CROSS_COMPILE ?= arm-linux-gnu-
然后执行"make"命令编译busybox
如果出现什么错误,你尽可上网搜索,一般都可以解决。我这里没什么问题。
3.2安装"make CONFIG_PREFIX=/home/minifs stall"
CONFIG_PREFIX=/home/minifs为指定安装目录(前提你首先得在home目录创建minifs目录,只要mkdir /home/minifs)
如果你没有指定只执行:make install 那么在默认的busybox-1.7.5目下会生成_stall目录,
$ls /home/minifs
bin linuxrc sbin usr
如果是make instll 那么busybox-1.7.5/_stall目录下会有一样的结果。
二、使用glibc库
在你安装交叉工具链时,已经生成了glibc库,可以直接使用它来构建根文件系统。
在上面我用的是编译动态库,所以要拷贝一些应用程序使用的库,否则你交叉编译应用程序要加上-static表示静态链接
这样生成的文件非常大。
首先进入我/home/minifs
$cd /home/minifs
$mkdir lib
$cp /crosstool/gcc-3.4.5-glibc-2.3.6/arm-linux-gnu/arm-linux-gnu/lib/*so* ./lib -a
注意:记得加 -a否则非常大,-a可以把软连接形式保存,不用直接拷贝
顺便可以给库瘦身,这样可以减小库的大小
$arm-linux-gnu-strip lib/* sbin/* bin/*
$du -h lib (可以看出减小了很多,不信你不用瘦身试试)
3.3M lib
这样库就加好了!
三、构建etc目录
etc目录下的内容取决于要运行的程序,init进程根据/etc/inittab文件来创建其它进程,比如调用脚本文件配置IP地址、
挂接其它文件系统,最后启动shell等。
在这里我们只要在etc目录下创建3个文件:etc/inittab、etc/init.d/rcS、etc/fstab、etc/profile。
$mkdir etc
$vim etc/inittab
(1)创建etc/inittab文件
内容如下:
::sysinit:/etc/init.d/rcS s3c2410_serial0::askfirst:-/bin/sh ::restart:/sbin/init ::ctrlaltdel:/sbin/reboot ::shutdown:umount -a -r |
$cd etc
$mkdir init.d
$vim init.d/rcS
(2)创建etc/init.d/rcS文件
内容如下:
mount -a mkdir /dev/pts mount -t devpts devpts /dev/pts echo /sbin/mdev > /proc/sys/kernel/hotplug mdev -s |
给rcS加上可执行权限
$sudo chmod +x rcS
$cd ../
$vim fstab
(3)创建etc/fstab文件
内容如下:
#device mount-point type options dump fsck order proc /proc proc defaults 0 0 sysfs /sys sysfs defaults 0 0 tmpfs /temp tmpfs defaults 0 0 tmpfs /dev tmpfs defaults 0 0 |
$vim profile
(4)创建etc/profile文件 (前面配置busybox提到,用于命令行提示符号)
内容如下:
#!/bin/sh export HOSTNAME=caoyi export USER=root export HOME=root export PS1="[$USER@$HOSTNAME \W]\#" PATH=/bin:/sbin:/usr/bin:/usr/sbin LD_LIBRARY_PATH=/lib:/usr/lib:$LD_LIBRARY_PATH export PATH LD_LIBRARY_PATH |
四、创建其它目录
创建一些常用的目录,只要执行命令:
$cd /home/minifs
$mkdir dev home temp proc sys
五、还要创建两个基本的设备文件
$cd /home/minifs/dev
$ mknod console c 5 1
$ mknod null c 1 3
至此一个最小根文件系统已经制作成功,里面含有命令行提示符、mdev功能!那么你可以通过NFS挂载到你的开发板做其它实验。
如果你觉得有点小,那么你可以在这个基础上扩展。