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

根文件系统(三)——initramfs文件系统制作相关推荐

  1. 制作buildroot根文件系统(三):使用mplayer播放视频

    文章目录 参考 前言 一.制作根文件系统 1.关于 mplayer 2.配置buildroot 3.编译buildroot 4.生成的根文件系统和工具链位置 二.测试根文件系统 1.解压根文件系统到N ...

  2. 嵌入式根文件系统的移植和制作详解

    理论上说一个嵌入式设备如果内核能够运行起来,且不需要运行用户进程的话,是不需要文件系统的,文件系统简单的说就是一种目录结构,由于 linux操作系统的设备在系统中是以文件的形式存在,将这些文件进行分类 ...

  3. Initramfs文件系统的制作

    在制作Initramfs文件系统之前,我先简单介绍下linux各文件系统.linux支持多种文件系统类型,包括ext2,ext3,vfat,jffs, ramfs,nfs等,为了对各类文件系统进行统一 ...

  4. Linux学习笔记---使用BusyBox创建根文件系统(三)

    目录 创建/etc/init.d/rcS 文件 创建/etc/fstab 文件 创建/etc/inittab 文件 创建/etc/init.d/rcS 文件 通过nfs加载根文件系统成功后,在串口终端 ...

  5. ramdisk文件系统的介绍与制作

    一.文件系统与根文件系统     1.文件系统         文件系统是操作系统用于明确存储设备(常见的是磁盘,也有基于NAND Flash的固态硬盘)分区上的文件的存储方法和数据结构,即在存储设备 ...

  6. MySQL 调优基础(三) Linux文件系统

    Linux的文件系统有点像MySQL的存储引擎,它支持各种各样的文件系统.它最上层是通过 virtual files system虚拟文件系统作为一个抽象接口层来对外提供调用的.然后下层的各种文件系统 ...

  7. Hadoop教程(三)HDFS文件系统Shell命令

    Hadoop教程(三)HDFS文件系统Shell命令 本文链接:https://blog.csdn.net/yuan_xw/article/details/50202381 Hadoop教程(三)HD ...

  8. 管理磁盘文件系统(三)

    一.使用外部存储设备 二.linux的分区与格式化 三.linux文件系统的维护 1.ext2/ext3文件系统的高级特性 2.文件系统检查 3.磁盘配额 4.自动挂载工具automounter 四. ...

  9. 【Linux命令行与Shell脚本编程】三,Linux文件系统

    Linux命令行与Shell脚本编程 第三章 Linux文件系统 文章目录 Linux命令行与Shell脚本编程 三.Linux文件系统 3.1,查看文件 3.1.1,ls 命令 选项和参数 3.1. ...

最新文章

  1. 字符串-字符串反转(双指针)
  2. 利用现有资源快速实现汉语专用分词系统
  3. html语言的空格键,如何在如何在HTML中插入空格中插入空格
  4. 02- 流行歌曲 最新热门
  5. 解决由于操作顺序问题导致 hbase 一直处于启动无法关闭的问题
  6. Python字典的常用操作
  7. python3 ascii转utf8_ASCII、Unicode、UTF-8以及Python3编码问题
  8. ibm+i+to+mysql_IBM X3650 M3下配置nginx+tomcat+mysql
  9. matplotlib.pyplot库解析
  10. 实施工程师的发展前景
  11. IEEE Transactions on Intelligent Transportation Systems投稿记录
  12. 人生无常,心安便是归处
  13. html交互视频如何制作,H5交互视频如何实现?
  14. 小红书笔记无法展示是什么原因?让我们来看看吧
  15. BC26 计算三角形的周长和面积(海伦公式)
  16. SAP-ME mobile开发基础
  17. 数据分析项目实战项目二:入驻商用户画像体系
  18. 认识字符集、ASCII、GBK、Unicode、UTF-8
  19. 【SCI论文写作】笔记五:Writing in the Sciences -Unit5
  20. python -m json.tool的使用

热门文章

  1. 韩峰是个好干部,犀利哥其实很无奈,都放过他们吧
  2. pycharm怎么用html注释,pycharm怎么注释?
  3. FT232R之Bit Bang
  4. web前端设计与开发大作业(二)----酒店预约界面
  5. 微信小程序 理发店美容店预约会员管理系统Android hbuilderx App毕业设计
  6. 使用淘宝镜像下载Git的安装包
  7. 部署Squid代理服务器 —— 反向代理(acl 访问控制 、sarg 日志分析、 Squid反向代理) —— 再续前缘..
  8. ubantu 黑屏_手机黑屏、卡屏怎么办?几招就能轻松搞定!
  9. Mybatis-plus LambdaQueryWrapper 模糊查询 like方法使用记录
  10. CAD恢复被删除的实体