动态编译busybox编译安装busybox
动态编译busybox当你进入选项,不选择编译BusyBox为静态二进制。所有其他操作步骤都类似于静态编译。您会发现这样的文件系统无法启动,并在终端上打印以下消息。
内核恐慌不synving:没有初始化的发现。尝试将init选项传递给内核。
为什么这个问题回到两编译方法的特点,是使用静态编译的库文件编译和动态编译为相应的库时,它是必要的。当我们选择动态编译,我们不添加任何库文件运行,这显然是不对的。然后如何看待使用BusyBox的可执行文件的库。两LDD和readelf可显示。
LDD
下面是查看猫的Linux库的结果。因此,1是与内核通信,没有管。所有程序实际上是LD Linux。所以2找到库文件,它是一个中介,必不可少的。
# LDD /斌/猫
Linux的大门。所以,1 = >(0x00bfe000)
Libc。所以,6 = / / libc库,6(0x00a4a000)。
/lib/ld-linux.so.2 (0x00a28000)
readelf
下面是编译后的arm系统的库文件查找。
# ARM Linux readelf -d busybox uClibc
动态部分抵消0xca014包含18个条目:
标签类型名称值
0x00000001(需要)共享库:{ 0 }也可以。所以。
0x00000001(需要)共享库libc:{ 0 }。所以。
0x0000000c(init)0xbe24
0x0000000d(菲尼)0xb2054
0x00000004(哈希)0x80e8
0x00000005(strtab)0xa500
0x00000006(symtab)0x8b70
0x0000000a(strsz)3259(字节)
0x0000000b(syment)16(字节)
0x00000015 0x0(调试)
0x00000003(pltgot)0xda0cc
0x00000002(pltrelsz)3040(字节)
0x00000014(pltrel)关系
0x00000017(jmprel)0xb244
0x00000011(REL)0xb1bc
0x00000012(relsz)136(字节)
0x00000013(怜悯)8(字节)
0x00000000 0x0(空)
从上面的结果,我们可以看到,busybox程序采用两库文件也可以。所以。0和libc。所以。0,实际上是2个符号链接,指向分别libc-0.9.28.so和libuclibc-0.9.28.so。
复制以上四个文件分别的lib目录,原因,应该是好的,但它仍然不能正常工作。显示错误消息,而不仅仅是gakou之前。可能的原因有2:一是库文件不全,和二是库文件不正确加载。
基于readelf的结果不应该是第一个原因,那么为什么不能被正确加载,原库文件被加载,和一个共享库装载机是必要的。找到相应的文件ld-uclibc-0.9.28.so和LD uClibc。所以。0后添加到lib目录下,运行正常。
编译和安装busybox
#使
#安装
用make命令编译busybox软件。
安装与使config_prefix =安装命令。
如果对config_prefix变量的分配是从命令行省略,缺省值。 / _install目录installed.config_prefix可以在配置界面改性menuconfig。
编译后,生成的busybox目录的子目录_install,内容的内容:
drwxr-xr-x 2根409611月24 15:28仓
rwxrwxrwx 1根1111根24 15:28 linuxrc ->斌/ busybox
drwxr-xr-x 2根409611个月就是24 15:28
Oslash;本包含用户的工具,在BusyBox执行这个目录,在这个目录的所有其他文件是busybox的符号链接。
Oslash;的sbin目录包含操作系统工具,同时指出busybox。
Oslash;linuxrc是链接文件,指向BusyBox。
将文件复制到镜像根文件夹中。