动态编译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。


将文件复制到镜像根文件夹中。