如何在initramfs.cpio中更新动态链接的Busybox?

时间:2017-02-24 23:21:05

标签: embedded-linux busybox

我正在尝试将动态链接的Busybox正确放入initramfs.cpio文件中。我正在尝试将udhcpd服务器添加到未包含在构建映像中的Busybox中。然后我将更新后的版本放入我的initramfs.cpio中,编译成我的linux内核。我无法确定要添加哪些文件以及放置它们的位置。董事会股票图片中的initramfs.cpio文件并没有包含很多库。

我可以用他们的源文件编译板子的linux,更新SD卡,然后运行重新编译的内核。他们的电路板需要一些额外的模块。

我有正确的交叉编译器设置,可以使用或不使用我想要的添加包编译busybox。

我想出了如何打包

find . -depth -print | cpio -ov > ../initramfs.cpio  

并解压缩cpio

cpio -idv < initramfs.cpio  

解压后的股票cpio看起来像这样

- bin
    + busybox
    + cat2
- cgi_bin
    + cmd
    + download
    + index.cgi
    + mac
    + reboot
    + upload
- dev (empty directory)
- mnt (empty directory)
- proc (empty directory)
- sbin
    + bin2coe
    + dns-sd
    + load_fpga
    + mdnsd.bz2
    + sdctl
    + spiflashctl
    + strace.bz2
    + tshwctl
    + xuartctl
- slib
    + ld-uClibc.so.0
    + libc.so.0
    + libdns_sd.so
    + libutil.so.0
- sys (empty directory)
- tmp (empty directory)
- var
    - run (empty directory)

Busybox设置:

Cross Compiler Prefix:
/opt/toolchains/arm-ts-linux-uclibcgnueabi/bin/arm-ts-linux-uclibcgnueabi-

Path to sysroot:
/opt/toolchains/arm-ts-linux-uclibcgnueabi/arm-ts-linux-uclibcgnueabi/sysroot

Busybox Bin信息:

readelf -d _install/bin/busybox

Tag |  Type    | Name/Value  
0x01| (NEEDED) | Shared Library: [libc.so.0]   
0x0F| (RPATH)  | Library rpath: [/slib]  

我做了什么:

尝试1
在为busybox运行make install之后,我将busybox二进制文件从_install / bin复制到我的解压缩的cpio目录test / bin。我打包了cpio,然后使用新的initramfs.cpio创建了内核。然后我用新版本运行了SD卡。的失败

尝试2
我从中复制了以下库 / opt / toolchains / arm-ts-linux-uclibcgnueabi / arm-ts-linux-uclibcgnueabi / sysroot / lib /

+ ld-uClibc.so.0
+ libc.so.0
+ libutil.so.0

并将它们粘贴到我的解压缩的cpio目录test / slib中 然后我从原始源中放置二进制文件,然后从我的busybox中放置一个_install / bin,每个都在不同的版本中。每个构建都没有正确运行。的失败

我没有想法。 每个人似乎都在他们的指南中静态地链接它,但我的zImage大约有4MB,并且它最终太大了。

0 个答案:

没有答案