天天看点

debian9安装busybox,并制作根文件系统(1)

BusyBox 是很多标准 Linux 工具的一个单个可执行实现。BusyBox 包含了一些简单的工具,例如 cat 和 echo,还包含了一些更大、更复杂的工具,例如 grep、find、mount 以及 telnet;有些人将 BusyBox 称为 Linux 工具里的“瑞士军刀”。

BusyBox 揭露了这样一个事实:很多标准 Linux 工具都可以共享很多共同的元素。例如,很多基于文件的工具(比如 grep 和 find)都需要在目录中搜索文件的代码。当这些工具被合并到一个可执行程序中时,它们就可以共享这些相同的元素,这样可以产生更小的可执行程序。实际上,BusyBox 可以将大约 3.5MB 的工具包装成大约 200KB 大小。这就为可引导的磁盘和使用 Linux 的嵌入式设备提供了更多功能。我们可以对 2.4 和 2.6 版本的 Linux 内核使用 BusyBox。

我们平时用的那些Linux命令就好比是分立式的电子元件,而BusyBox就好比是一个集成电路,把常用的工具和命令集成压缩在一个可执行文件里,功能基本不变,而大小却小很多倍,在嵌入式linux应用中,BusyBox有非常广的应用。

1,构建根文件目录

##mkdir rootfs
##mkdir root home bin sbin etc dev usr lib tmp mnt sys proc
##mkdir usr/lib usr/bin      

2,安装busybox

2.1,下载busybox安装包,​​https://busybox.net/downloads/​​,

2.2,解压,

##tar -zxvf  busybox-1.29.3.tar.gz      

我这里下载下来,需要我提取,

2.3,修改makefile文件,改成自己平台的交叉编译器和硬件平台,

ARCH ?= arm

CROSS_COMPILE ?= arm-linux-      

2.4,生成.config文件,

##make distclean
##make defconfig
##make menuconfig      

说明,menuconfig是自己配置,使用defconfig 是缺省配置,allyesconfig是最大配置,allnoconfig是最小配置,一般选择缺省配置恢复一下,然后使用menuconfig根据自己的需求配置。  这一步结束后,将生成.config.

2.5,修改.config文件,

方法1,##make menuconfig

a,选择将Busybox进行静态编译,

settings ---->build options里,

[]build static binary (no shared libs),空格选*,即选中

说明,这个的意思是运行Busybox才动态链接库,busybox需要的库,要我们自己提供,选中之后,就可以把busybox编译成静态链接的可执行文件,运行时才独立于其他函数库,否则必须要其他库才能运行。

b,指定交叉编译器为arm-linux-gcc,

在cross compiler prefix里添加xxx/bin/arm-linux-,然后退出保存。

这里的xxx就为arm-linux-gcc的安装路径,我这里是

(/home/guoyanzhang/practice/arm/opt/FriendlyARM/toolschain/4.4.3/bin/arm-linux-)Cross Compiler prefix

c,选中[*] Don't use /usr,这个选项不选的话,make install后busybox将安装在原系统的/usr下,这将覆盖系统原有的命令。选上这个选项后,make install后会在busybox目录下生成一个叫_install的目录,里面有busybox和指向它的链接。

d,修改busybox的生成文件的存放路径,

在installtion options --->

修改busybox installation prefix(默认是./_install,我这里是保存在/home/guoyanzhang/rootfs下,如果不修改,之后需要单独拷贝一次)

e,init utilities ---> init

这个选项最好选上,这样Busybox就可以初始化脚本inittab,可以用来初始化Linux系统。(我1.29.3上没有这个选项)

f,shells --->

如果要让busybox包含一个可以用于解释linux命令的shell,需要配置busybox的shell里的内容。这里可以选的shell有多种,包括ash,hush,lash,msh。最好使用ash,因为它是功能最全,也是类似于一般linux系统的bash的。(我1.29.3这项是默认的ash)

配置好,保存退出。

方法2,##vi .config

修改CONFIG_CROSS_COMPILER_PREFIX="xxx/bin/arm-linux-"

这里的xxx就为arm-linux-gcc的安装路径,我这里是

(/home/guoyanzhang/practice/arm/opt/FriendlyARM/toolschain/4.4.3/bin/arm-linux-)Cross Compiler prefix

2.6,配置好之后就是编译,##make 

成功之后会有如下提示,

final link with :m resolv

DOC   busybox.pod

DOC   busybox.txt

DOC   busybox.1

DOC   busybox.html      

2.7,编译之后就是安装##make install.

2.8,使用##busybox ls 可以看到当前目录下的文件。

出现如下这个就表示安装成功。

--------------------------------------------------

You will probably need to make your busybox binary

setuid root to ensure all configured applets will

work properly.

--------------------------------------------------      

继续阅读