一、编译
1.busybox简介
了解嵌入式Linux的人对busybox必定不会生疏。它被十分形象地称为嵌入式Linux体系中的“瑞士军刀”,由于它将许多常用的UNIX指令和东西结合到了一个独自的可履行程序中。尽管与相应的GNU东西比较起来,busybox所供给的功用和参数略少,但在比较小的体系(例如启动盘)或许嵌入式体系中,现已足够了。
下面就来一步步地用busybox从无到有地树立一个全新的Linux文件体系。
2. 编译busybox
完好的源代码能够从http://www.busybox.net下载,压缩包巨细为1.3 MB左右。将源码解压之后,进入到busybox1.00目录中,运转make menuconfig能够翻开它的编译界面。这个界面和Linux内核编译有些挨近。在这个菜单界面中除了能够对终究编译到可履行文件中的指令进行挑选外,还有许多其他设置也是十分重要的。下面三个目录是许多人都会感兴趣的:
我改变了以下选项:
General Configuration —>
[*] Support for devfs
Build Options —>
[ ] Build BusyBox as a static binary (no shared libs)
[*] Do you want to build BusyBox with a Cross Compiler?
/usr/local/arm/3.4.1/bin/arm-linux-
(/usr/local/arm/3.4.1/bin/arm-linux-) Cross Compiler prefix
Installation Options —>
(./_install) BusyBox installation prefix
然后到当时目录树立一个_install的文件夹。
Linux Ext2 FS Progs —>
[*] e2fsck
Linux Module Utilities —>
[*] insmod
[*] rmmod
[ ] lsmod
[ ] modprobe
— Options common to multiple modutils
[*] Support tainted module checking with new kernels (NEW)
[ ] Support version 2.2.x to 2.4.x Linux kernels
[*] Support version 2.6.x Linux kernels (NEW)
留意此处的挑选,或许会影响到编译不过。
Networking Utilities —>
[*] ftpget
[*] ftpput
…
[*] wget
…
[*] telnet
[*] Pass TERM type to remote host (NEW)
[*] Pass USER type to remote host (NEW)
[*] telnetd
注释:tlenetd指令是一个长途登录服务程序,把它编译进busybox中会为将来的调试供给许多的便利。
Shells —>
[*] Enable builtin version of ‘echo’
Linux System Utilities —>
[*] mount
[*] Support mounting NFS file systems
注释:这个比较重要,不然会在后来的mount时分呈现mount program didn’t pass remote address的过错。
在Installation Options里边能够设置装置的途径,即设置为新文件体系的根目录。当然也能够用缺省的 _install目录,装置之后再复制到新文件体系中去。
在设置Login/Password Management Utilities的时分,为了免除装备glibc的费事,最好设置运用busybox自己的password和shadow文件的功用(Use internal password and group functions rather than system functions)。
busybox供给的指令无疑比较全面,但它的缺省装备还不能构成一个功用比较齐备的文件体系。必需求增加的指令有Login/Password Management Utilities里边的getty、login和passwd,这些指令早年是由别的一个软件包tinylogin所供给的。当然,假如不需求一个交互的登录界面,这些指令也能够去掉。经过设定内核参数init=/bin/sh能够在体系启图1busybox的编译装备界面动后直接得到一个shell。
设置结束后保存、退出,履行make; make install指令,busybox将在未来的根文件体系中树立/usr、/bin、/sbin等目录。从中能够看到,编译好的busybox可履行文件和其他使用指令的符号链接。典型的busybox文件巨细在动态链接的情况下是300 KB左右,静态链接为800 KB左右,用它完成的文件体系完全能够控制在1 MB以下。但就目前为止,得到的还不是一个完好可用的文件体系,必需求在这个基础上增加一些必要的文件,让它能够作业。
编译的时分或许犯错:variable or field ‘__user’ declared void
能够将
/usr/local/arm/3.4.1/arm-linux/sys-include/linux/fd.h
中修正下面的句子,编译完成后再修正回去。
//void __user *data;
void *data;
3. 装置
make install
二、制造文件体系
用现已编译好的busybox制造完善的能自启动的文件体系
1、树立文件夹arm2410-root-1.0:
mkdir /ebutek/arm2410-root-1.0
export ARM2410HOME=/ebutek/arm2410-root-1.0
export BUSYBOXHOME=/ebutek/busybox-1.1.0
2、将busybox编译后的文件复制到arm2410-root-1.0.
cp -fr $BUSYBOXHOME/_install/* $arm2410HOME
复制后能够看到$arm2410HOME下的文件如下:
ls -all $arm2410HOME
总计 20
drwxr-xr-x 5 root root 4096 01-24 13:58 .
drwxr-xr-x 16 root root 4096 01-24 13:56 ..
drwxr-xr-x 2 root root 4096 01-24 13:58 bin
lrwxrwxrwx 1 root root 11 01-24 13:58 linuxrc -> bin/busybox
drwxr-xr-x 2 root root 4096 01-24 13:58 sbin
drwxr-xr-x 4 root root 4096 01-24 13:58 usr
3、创立其它文件夹:
cd $arm2410HOME
mkdir mnt root var tmp proc boot etc lib dev
mkdir var/{lock,log,mail,run,spool}
3、将穿插编译器中的busybox需求的lib库文件复制过来。
在/usr/local/arm/3.4.1/arm-linux/lib中找到如下文件和链接:
-rwxrwxrwx 192519 ld-2.3.2.so
lrwxrwxrwx 111 ld-linux.so.2 -> ld-2.3.2.so
-rwxrwxrwx 1 1190032 libc-2.3.2.so
lrwxrwxrwx 113 libc.so.6 -> libc-2.3.2.so
-rwxr-xr-x 118348 libcrypt-2.3.2.so