根文件系统(三)——initramfs文件系统制作

14 篇文章 2 订阅

什么是initramfs文件系统?

       在 根文件系统分类 章节中讲述了内核会去挂载一个特殊的rootfs,然后再通过解析"root=xxx"命令行,去挂载 /dev/xxx 真正的根文件系统,那么,我们是否可以直接使用这个rootfs当做最终的根文件系统呢?当然可以,这便是 initramfs 内嵌式文件系统,它是一种ramfs文件系统,既可以当做最终的根文件系统,也可作为临时过渡的文件系统。关于initramfs 的前世今生不在这讲述,这里只讲述如何制作使用它!

怎么制作initramfs文件系统?

       在 最小根文件系统 章节中讲述了根文件系统制作,本文在此基础上制作initramfs。之前在 根文件系统分类 中提到过,内核挂载了特殊rootfs后会将CPIO归档包释放到rootfs中,再执行rootfs中的init进程。

       所以,我们需要做:

        1)在自己制作的rootfs根目录下添加init进程。

        2)将自己制作的rootfs归档成cpio包。

        3)将这个cpio归档包放到内核能找到的地方或告诉内核去哪找这个包。

(1)添加 init 软链接

       之前使用busybox制作的根文件系统中存在init进程,在 /sbin/ 目录下:

       可以看见/sbin/init是一个软链接,指向/bin/busybox,因此我们要在rootfs根目录下添加一个init软链接,指向/sbin/init或/bin/busybox,进入rootfs目录执行:

                ln -s ./bin/busybox init

        即可生成指向/bin/busybox的init软链接。

(2)将rootfs归档成cpio包

        在归档之前需要使用改变整个rootfs的所有权,使用chown(hikchown)命令,执行:

                sudo hikchown root.root -R ./*

        然后再cpio归档,也可以归档后压缩,执行

        归档: find ./rootfs | sudo cpio -H newc -o > ./rootfs.cpio

        归档和压缩:find ./rootfs | sudo cpio -H newc -o | gzip -9 -n > ./rootfs.cpio.gz

(3)配置内核参数和指定grub参数

        进入内核源码顶层目录,执行make menuconfig,将以下配置项勾上

有两种方式启动initramfs:

        1)将cpio包追加到内核尾部

        将cpio包拷贝到内核源码顶层目录,然后配置上图中initramfs source file选项

                ./xxx.cpio

        然后重新编译内核,即可将cpio包附加到内核尾部,内核启动之后会将cpio包释放到特殊rootfs(系统自建rootfs)。

        2)设置grub参数指定cpio.gz包

        将上述配置的initramfs source file选项路径去掉,或者删除./xxx.cpio包。

        将cpio.gz包拷贝到内核同目录下,设置grub参数 initrd /rootfs.cpio.gz 即可,也就是将下图 # 符号去掉。

        注意:这里使用的是cpio.gz包,也就是cpio归档后再gzip压缩!grub是X86里的引导配置文件,如果是arm,则修改Uboot启动参数。

        重新启动系统即可看见自己制作的根文件系统啦!

        提醒:initramfs 文件系统是基于内存的文件系统,因此在根文件系统上修改或添加文件无法保存,想要修改必须在自己制作的rootfs中修改后重新添加到内核尾部或替换原来的rootfs.cpio.gz包。

  • 7
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
文件系统是指在内核启动时被挂载为最终的文件系统文件系统。可以通过指定内核启动参数"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 ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值