最小根文件系统制作

时间:2021-07-06 00:34:01
 

 一、移植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挂载到你的开发板做其它实验。
如果你觉得有点小,那么你可以在这个基础上扩展。