Ubuntu initramfs映像文件的解压 和 打包

目标:添加驱动至Ubuntu 以支持PXE网络部署

问题:Ubuntu启动文件initrd缺少需要的驱动模块

解决办法:解压开initrd文件系统镜像,修改文件系统——添加驱动后,重新打包用于启动

目录

目标:添加驱动至Ubuntu 以支持PXE网络部署

问题:Ubuntu启动文件initrd缺少需要的驱动模块

解决办法:解压开initrd文件系统镜像,修改文件系统——添加驱动后,重新打包用于启动

1.找到/boot目录下启动文件系统镜像

2.解压initramfs系统启动文件

第一种方法:手动解压

(1)先通过binwalk工具分析文件数据

(2)dd命令从文件中截取读取文件数据,分别读出第一层、第二层和第三层

(3)分别通过cpio -i -F 和gunzip 解压开三个包,会得到三个文件夹,第三层包解开后就是我们需要修改的文件系统转存失败重新上传取消​编辑

(4)修改文件系统

(5)添加驱动完毕重新打包这三层包

第二种方法:通过unmkintramfs工具解压出分层文件夹

(1)通过Linux unmkintramfs工具解压和提取initramfs镜像文件中的内容到expand目录中:

(2)解压开镜像文件后expand目录的文件如下:

(3)添加驱动,修改文件系统

(4)同上第一种方法打包文件rebuild出initrd启动镜像

Error:

1.如果重新启动系统出现这种情况,是initrd文件系统构建失败,重新按步骤构建即可

1.找到/boot目录下启动文件系统镜像

2.解压initramfs系统启动文件

initramfs :

Initramfs(Initial RAM File System)是Linux系统中的一个临时文件系统,用于在系统引导过程中提供必要的文件和工具。它被加载到内存中,并在系统引导过程的早期阶段使用。

Initramfs包含了用于处理器微代码更新的.bin文件,以及真正的根文件系统。在系统引导过程中,initramfs会被挂载为根文件系统,并执行一系列初始化和准备工作,包括硬件初始化、加载驱动程序、检测和挂载根文件系统等。

通过initramfs,系统可以在引导过程中提供必要的文件和工具,以确保系统能够正常启动。一旦初始化工作完成,真正的根文件系统将被加载,并继续系统的正常启动过程。

如果在引导过程中进入了initramfs界面,通常意味着系统遇到了一些问题,无法成功加载真正的根文件系统。这可能是由于硬件故障、文件系统错误、引导配置错误等原因引起的。在initramfs界面中,你可以使用一些命令来诊断和解决问题,如查看设备和文件系统情况、重新挂载根文件系统等。

第一种方法:手动解压

(1)先通过binwalk工具分析文件数据

Binwalk是一款用于分析和提取嵌入式设备固件中的文件和数据的工具。它可以扫描固件文件,识别常见的文件类型和嵌入式文件系统,并提供有关这些文件的信息。Binwalk还可以帮助你提取嵌入式设备固件中的特定文件或数据,以便进行进一步的分析或修改。

例如,你可以使用Binwalk来扫描一个固件文件,找出其中的压缩文件、图像、文本文件等,并提取出这些文件进行查看或编辑。它还可以检测到嵌入式文件系统,例如SquashFS、JFFS2等,并帮助你提取其中的文件系统镜像。

Binwalk是一个功能强大且常用的工具,特别适用于嵌入式设备固件的逆向工程和分析。它可以帮助你了解固件的组成部分,提取出所需的文件或数据,并为后续的研究和修改提供基础。

(2)dd命令从文件中截取读取文件数据,分别读出第一层、第二层和第三层
dd if=initrd.img bs=1 skip=0 of=initrd.first

dd if=initrd.img bs=1 skip=28672 of=initrd.second

dd if=initrd.img bs=1 skip=3493888 of=initrd.third

会获取到如下三个文件,file获取文件格式分别为cpio、cpio和gzip

(3)分别通过cpio -i -F 和gunzip 解压开三个包,会得到三个文件夹,第三层包解开后就是我们需要修改的文件系统

三层文件包分别是什么:

第一层和第二层:

        AuthenticAMD.bin和GenuineIntel.bin是用于处理器微代码更新的文件。微代码是一种固件,用于解决处理器在硬件级别上的一些问题或漏洞。这些.bin文件包含了特定处理器的微代码更新,用于在系统引导过程中加载到处理器中。

第三层:

        至于第三层文件系统,它是真正的根文件系统。在Ubuntu的initramfs文件系统中,根文件系统通常被放置在最内层的文件包中。它包含了完整的操作系统文件和目录结构,是系统的主要文件系统,提供了用户所需的各种程序、库和配置文件。在系统引导过程中,initramfs会先被加载到内存中,然后挂载为根文件系统,使得系统能够正常引导和运行。

(4)修改文件系统

将需要添加的.ko模块添加至/lib/modules/5.4.0-125-generic/kernel/drivers/net/usb目录中

(5)添加驱动完毕重新打包这三层包
cd binwalk/

pushd 1 && find . | cpio -o -H newc > ../myinitrd && popd

pushd 2 && find . | cpio -o -H newc >> ../myinitrd && popd

pushd 3 && find . | cpio -o -H newc | gzip >> ../myinitrd && popd

pushd 1命令将1目录推入目录栈,接下来,find . | cpio -o -H newc > ../myinitrd命令将"1"目录中的所有文件和文件夹列表通过管道传递给cpio命令,使用"newc"格式创建一个新的cpio归档文件,然后将该文件输出到上一级目录中的"myinitrd"文件中。最后,popd命令将目录栈中的顶部目录弹出,并将当前工作目录返回至原来的目录

        其实就是分别进入1、2、3层目录,从上至下解压的,就从下至上通过重定向操作将三层归档文件追加到"myinitrd"文件中,从而实现rebuild出我们需要的initrd文件

第二种方法:通过unmkintramfs工具解压出分层文件夹

(1)通过Linux unmkintramfs工具解压和提取initramfs镜像文件中的内容到expand目录中:
mkdir expand unmkinitramfs initrd.img ./expand

如果显示unmkintramfs command not found,说明缺少相应的软件包,执行命令安装软件包:

sudo apt-get install initramfs-tools
(2)解压开镜像文件后expand目录的文件如下:

通过工具解压就省去了第一种方法dd读取以及cpio gunzip解压的繁琐步骤,直接一步到位

(这种方法解开镜像文件但是第二层的.bin文件就不见了,只剩下第一层的AuthenticAMD.bin了,不过结果不影响正常启动)

(3)添加驱动,修改文件系统
(4)同上第一种方法打包文件rebuild出initrd启动镜像
cd expand/

pushd early && find . | cpio -o -H newc > ../myinitrd && popd

pushd main && find . | cpio -o -H newc | gzip >> ../myinitrd && popd

Error:

1.如果重新启动系统出现这种情况,是initrd文件系统构建失败,重新按步骤构建即可

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
文件系统是指在内核启动时被挂载为最终的根文件系统的文件系统。可以通过指定内核启动参数"root=xxx"来挂载真正的根文件系统。然而,也可以使用initramfs内嵌式文件系统作为最终的根文件系统或临时过渡的文件系统。initramfs是一种ramfs文件系统,可以用来制作和使用根文件系统。 制作initramfs文件系统的方法有多种途径。其中一种方法是通过使用内核启动参数"initrd=addr,0x400000 root=/dev/ram rw"来指定initrd的下载地址、大小和设备节点。另一种方法是通过内核配置中的选项"General setup -> [*] Initial RAM filesystem and RAM disk (initramfs/initrd) support (/rootfs_dir) Initramfs source file(s)"来指定根文件系统的来源目录。这样,我们就可以制作并使用initramfs文件系统。 需要注意的是,initramfs文件系统可以作为最终的根文件系统,也可以作为临时过渡的文件系统。具体使用哪种方式取决于具体的需求和配置。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [根文件系统(三)——initramfs文件系统制作](https://blog.csdn.net/zz2633105/article/details/120100571)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* *3* [initramfs文件系统](https://blog.csdn.net/u014426028/article/details/108085621)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值