嵌入式linux开发学习笔记之运用BusyBox构建根文件系统

时间:2021-04-01 22:32:58

首先在讲解如果运用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目录下生成以下几个文件:

        嵌入式linux开发学习笔记之运用BusyBox构建根文件系统

在_install子目录中只是一些BusyBox生成的命令,这些命令被存储在bin,sbin目录和usr目录中,其中bin和sbin中包含的是系统命令,usr中包含的是用户命令;

3、创建其它目录,BusyBox生成的目录,并不符合文件系统的要求,还需要为其添加一些额外的目录,使用如下命令在_install目录中添加如下目录:

嵌入式linux开发学习笔记之运用BusyBox构建根文件系统

其中,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目录是很相似的,所以可以从其他已经构建好的根文件系统中直接复制过来尝试。经过以上的各个步骤,就成功的构建了一个基本的根文件系统。