我是靠谱客的博主 传统河马,最近开发中收集的这篇文章主要介绍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 0n'

对于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

最后

以上就是传统河马为你收集整理的linux生成initramfs,linux – 如何使用busybox链接生成initramfs映像?的全部内容,希望文章能够帮你解决linux生成initramfs,linux – 如何使用busybox链接生成initramfs映像?所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(40)

评论列表共有 0 条评论

立即
投稿
返回
顶部