linux生成initramfs,linux – 如何使用busybox链接生成initramfs映像?

通过对my earlier question的回答被引导到initramfs(谢谢!),我一直在努力让initramfs工作.我现在可以启动内核并进入shell提示符,在那里我可以执行busybox命令,这很棒.

这就是我被困的地方 – 至少有两种生成initramfs图像的方法:

>通过将内核路径传递给要压缩的预构建目录层次结构

>通过向内核传递列出要包含的文件的文件的名称.

第二种方法似乎有点清洁,所以我一直在使用它.

仅供参考,到目前为止这是我的文件列表:

dir /dev 755 0 0

nod /dev/console 644 0 0 c 5 1

nod /dev/loop0 644 0 0 b 7 0

dir /bin 755 1000 1000

slink /bin/sh busybox 777 0 0

file /bin/busybox /home/brandon/rascal-initramfs/bin/busybox 755 0 0

dir /proc 755 0 0

dir /sys 755 0 0

dir /mnt 755 0 0

file /init /home/brandon/rascal-initramfs/init.sh 755 0 0

不幸的是,我了解到busybox需要很长的链接列表来充当其所有不同命令的别名.有没有办法生成所有这些命令的列表,以便我可以将其添加到我的文件列表中?

或者,我可以使用预构建的目录层次结构切换到方法1,但我不确定如何在这种情况下创建/ dev节点.

这两条路都显得凌乱.有一个优雅的解决方案吗?

解决方法:

它不是生成initramfs的内核,它是cpio.所以你真正想要的是一种构建包含设备,符号链接等的cpio存档的方法.

您的方法2在内核源代码树中使用usr / gen_init_cpio在内核构建期间构建cpio存档.这确实是构建cpio存档的好方法,而不必首先填充本地文件系统(这需要root用户来创建所有设备,或者使用fakeroot或FUSE文件系统,我不确定已经编写过).

您所缺少的只是生成gen_init_cpio的输入文件作为构建步骤.例如.在shell中:

INITRAMFS_SOURCE_DIR=/home/brandon/rascal-initramfs

exec >initramfs_source.txt

echo "dir /bin 755 0 0"

echo "file /bin/busybox $INITRAMFS_SOURCE_DIR/bin/busybox 755 0 0"

for x in sh ls cp …; do echo "slink /bin/$x busybox 777 0 0" done

# etc …

如果你想反映构建树中存在的busybox的符号链接,这是一种方式(我假设你在Linux上构建):

( cd "$INITRAMFS_SOURCE_DIR/bin" &&

for x in *; do

if [ "$(readlink "$x")" = busybox ]; then

echo "slink /bin/$x busybox 777 0 0"

fi

done )

这是复制所有符号链接的方法:

find "$INITRAMFS_SOURCE_DIR" -type l -printf 'slink %p %l 777 0 0\n'

对于busybox,也许你的构建树没有符号链接,而是你想为你编译的每个实用程序创建一个.我能想到的最简单的方法是浏览你的busybox构建树.*. o.cmd文件:每个生成的命令都有一个.

find /path/to/busybox/build/tree -name '.*.cmd' -exec sh -c '

for x; do

x=${x##*/.}

echo "slink /bin/${x%%.*} busybox 777 0 0"

done

' _ {} +

标签:linux,kernel,busybox,initramfs,cpio

来源: https://codeday.me/bug/20190809/1633400.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值