首先在讲解如果运用BusyBox构建根文件系统之前,我们先大致了解下构建根文件系统的大概步骤:
1、运用BusyBox生成一些基本的命令;
2、在根文件系统目录下创建必要的目录;
3、创建初始化脚本;
4.创建设备文件,这些文件可以被init进程读取。
接下来我们就讲解如何运用busybox构建我们所需的根文件系统。
1、获取busybox的压缩包,并运用解压命令解压压缩包在某个目录下,然后运行命令make menuconfig配置busybox相关选项,具体的选项开发者可查看相关资料,自行进行配置;在这里可以对busybox的几种常用配置进行说明:(1)Tab键自动补齐功能,例如在控制台输入mak会自动补齐为make,这个配置选项为BusyBox Settings-->BusyBox Liarary Tuning-->Tab completion;(2)将BusyBox编译为静态链接,这样在没有其他库支持时,BusyBox也能启动,这个配置项为BusyBox Settings-->Build Options-->Build Busybox as a static binary(no shared libs);(3)如果使用不同的交叉编译工具,需指定编译工具的路径,这个配置项为:Busybox Settings-->Build Options-->Cross Compiler prefix;(4)init程序应该读取配置文件/etc/inittab.这个配置项为Init Utilities-->Support reading an inittab file;
2、编译和安装BusyBox,编译后的BusyBox将运行在ARM处理器上,所以应该修改Makefile文件,使用交叉编译工具,修改BusyBox的Makefile文件如下:
ARCH ?= arm
CROSS_COMPILE ?= arm-linux-
然后运行命令make编译工程,运行命令make install 安装,安装成功后,在_install目录下生成以下几个文件:
在_install子目录中只是一些BusyBox生成的命令,这些命令被存储在bin,sbin目录和usr目录中,其中bin和sbin中包含的是系统命令,usr中包含的是用户命令;
3、创建其它目录,BusyBox生成的目录,并不符合文件系统的要求,还需要为其添加一些额外的目录,使用如下命令在_install目录中添加如下目录:
其中,media目录不是必须的,但是在嵌入式开发中一般添加这个目录来存放多媒体文件,然后进入之前创建的etc目录,创建一些必要的配置文件,操作命令如下:
cd etc
touch inittab
touch fstab
touch profile
touch passwd
touch group
touch shadow
touch resolv.conf
touch mdev.conf
touch inetd.conf
mkdir rc.d
mkdir init.d
touch init.d/rcS
chmod +x init.d/rcS
mkdir sysconfig
touch sysconfig/HOSTNAME
4、修改etc目录中的文件,etc目录中的文件时用来对系统进行整体配置的,一般只需要3个文件,系统就能够正常工作了,这3个文件分别是etc/inittab、etc/fstab和etc/init.d/rcS,其中文件etc/inittab用来创建其它子进程,其内容是:
::sysinit:/etc/init.d/rcS
s3c2410_serial10::askfirst:-/bin/sh
::ctrlaltdel:-/sbin/reboot
::shutdown:/bin/umount -a -r
::restart:/sbin/init
文件etc/init.d/rcS是一个脚本文件,可以再里面添加系统启动后将执行的命令。文件的内容如下:
#!/bin/sh
PATH=/sbin:/bin:/usr/sbin:/usr/bin
runlevel=S
prevlevel=N
umask 022
export PATH runlevel prevlevel
mount -a
mkdir /dev/pts
mount -t devpts devpts /dev/pts
echo /sbin/mdev > /proc/sys/kernel/hotplug
mdev -s
/bin/hostname -F /etc/sysconfig/HOSTNAME
ifconfig eth0 192.168.1.68
文件etc/fstab用来挂接文件系统,mount命令会解析这个文件,并挂接其中的文件系统,其内容如下:
proc /proc proc defaults 0 0
sysfs /sys sysfs defaults 0 0
tmpfs /var tmpfs defaults 0 0
tmpfs /tmp tmpfs defaults 0 0
tmpfs /dev tmpfs defaults 0 0
5、创建dev目录中的文件,dev目录中,包含了一些设备文件,根文件系统中的应用程序需要使用这些设备文件来对硬件进行操作。设备文件可以动态创建,也可以静态创建,为了节省嵌入式系统的资源,一班采用静态创建的方式。在这里简单创建几个简单的设备文件,已经能够满足大部分系统的要求,操作命令如下:
cd dev
mknod console c 5 1
chmod 777 console
mknod null c 1 3
chmod 777 null
其他设备文件,可以在系统启动后,使用"cat /proc/devices"命令查看内核注册了哪些设备,然后以手动方式一个一个创建设备文件。实际上,各个Linux操作系统使用的dev目录是很相似的,所以可以从其他已经构建好的根文件系统中直接复制过来尝试。经过以上的各个步骤,就成功的构建了一个基本的根文件系统。