我是新来的,希望我能在正确的部分发帖......
好吧,我得到了 debian 3.16.0-4-686-pae 的 initrd.img (下载并烧录了整个 iso)。如果我从磁盘或 LAN initrd 启动没问题,那么一切都会正常启动。
当我想向 initrd 添加驱动程序时,问题就开始了。我获取文件 initrd.img 并将其解压缩。我只得到 1 个名为 kernel 的目录。经过搜索后,我在这里找到了一个具有相同问题的线程,并尝试了他的解决方案(线程链接:为什么我的initrd只有一个目录,即“kernel”?)。
我尝试使用 cpio 只提取了 1410 个块,在 dd 从 1410 到存档末尾之后,我得到了一个存档(如果重要的话,只有在我命名它时才可读)姓名.tar.gz )包含所有文件夹和所有内容,但它有些损坏,一些文件的大小为 0(例如 sh 和 bash,这使得任何 initrd 我将尝试从这个无用且无法启动的错误中创建:Sh 发现但是无法执行。与 shell 相同)。
如果我在同一线程上使用 binwalk 解决方案,我会设法从 initrd 中提取存档,但该存档仅包含 3 个文件夹(bin 等、lib),而没有所有文件。 (例如,没有 sh 或 bash)。
注意 - 根据 binwalk,initrd 包含:
1 - ascii 存档
1 - xz 压缩数据
30 - gzip 压缩数据存档,根据 binwalk 是
来自 NTFS 文件系统 (NT) NULL 日期: 1970 年 1 月 1 日星期四 00:00:00
它们全部小于 1MB。
因此,由于其格式,我几乎无法将驱动程序添加到此 initrd.img 文件中...任何帮助将不胜感激,如果需要更多信息,请告诉我,我会尽力提供。
Tl;dr 我得到了奇怪的 initrd.img 文件,我似乎无法添加驱动程序。
Binwalk 输出:
请注意,我编辑了该文件,它的开头是 ASCII 存档中的文件,我删除的所有其他内容都是 gzip 压缩存档的日期,所有这些都如所述: Thu 1 Jan 00:00:00 1970(我相信,由于这是纪元日期,也许由于某些奇怪的原因无法读取其真实日期......)
任何帮助将不胜感激,如果需要更多信息,请告诉我,我会尽力提供,谢谢:)
忘了提及 - 我正在运行和使用的所有命令都在 Ubuntu 3.16.0-30-generic 上(我认为它是值得信赖的)
答案1
首先,如果它正常启动,我会看看你如何提取 img 文件。图像完好无损。
对于 Redhat/Fedora initrd 映像,我使用以下方法:
# This should confirm it is a gziped image
file initrd0.img
# This should leave you with unzipped initrd0 (no .img)
# The -d is decompress, the -S is to expect the .img suffix not the usual .gz
gzip -dS .img
# This should show confirm it is now a cpio archive
file initrd0
# Create a directory to unpack to
# and unpack inside the new directory
mkdir new-init
cd new-init
cpio -id < ../initrd0
我对上面一些“不太明显”的行添加了评论。我们的想法是在尝试解压之前确认我们拥有正确的文件类型。如果每个文件命令的输出与预期不同(首先是 gzip 文件,然后是 cpio),则必须使用适当的工具来解压。