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

14 篇文章 2 订阅
initramfs是一种内嵌式文件系统,既可作为临时过渡,也可作为最终根文件系统。制作initramfs涉及创建init软链接、归档rootfs为cpio包,然后可通过内核配置或GRUB参数启动。关键步骤包括添加init软链接至/bin/busybox,用cpio归档并可能进行gzip压缩,最后配置内核或GRUB加载initramfs。
摘要由CSDN通过智能技术生成

什么是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包。

  • 8
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值