initramfs文件系统的介绍与制作

一、什么是initramfs文件系统
    initramfs最初的想法是Linus提出的,把cache当作文件系统装载。他在一个叫ramfs的cache实现上加了一层很薄的封装,其它内核开发人员编写了一个改进版tmpfs,这个文件系统上的数据可以写出到交换分区,而且可以设定一个tmpfs装载点的最大尺寸以免耗尽内存。 initramfs就是tmpfs的一个应用。
    ramdisk是一个基于ram的块设备,因此它占据了一块固定的内存,而且事先要使用特定的工具比如mke2fs格式化,还需要一个文件系统驱动来读写其上的文件。如果这个disk上的空间没有用完,这些未用的内存就浪费掉了,并且这个disk的空间固定导致容量有限,要想装入更多的文件就需要重新格式化。
    initramfs和ramdisk相比,主要有以下几个特点:
    (1)ramfs的大小随着用户数据的增加而动态增加,相对与ramdisk不会造成额外的内存浪费。但是,它的一个缺点是它可能不停的动态增长直到耗尽系统的全部内存,所以只有root或授权用户允许使用ramfs。为了解决这个问题,从ramfs派生出了tmpfs文件系统,增加了容量大小的限制,而且允许把数据写入交换分区。由于增加了这两个特性,所以tmpfs允许普通用户使用。
    (2)对于ramdisk而言,由于Linux的块设备缓冲特性,ram disk上的数据被拷贝到page cache(对于文件数据)和dentry cache(对于目录项),这个导致了内存的浪费。而initramfs在tmpfs和page cache/dentry cache之间没有重复数据。
    (3)initramfs不需要额外的文件系统驱动。
    (4)initramfs只支持cpio格式,ramdisk支持cpio格式和传统的image-initrd格式。
    (5)ramdisk是启动时加载的,initramfs是编译到内核中的。
    (6)使用initramfs的内核启动参数不需要"initrd="和"root="参数,但是必须在initramfs中创建/init文件或者修改内核启动最后代码,否则系统启动将会失败。(initramfs文件系统启动时会在根文件系统中执行第一个init程序,它对uboot传过来的参数init=/linuxrc不予理睬,所以需要在制作的根文件系统里的根目录加入init程序,否则无法启动。init程序和linuxrc程序一样都是符号链接文件,它们都是指向/bin/busybox程序)
    
二、Initramfs文件系统的制作
    (1)按照我的另一篇文章《ramdisk文件系统的介绍与制作》中的步骤,制作好根文件系统目录。
    (2)对内核进行配置,指定制作好根文件系统的路径。
        General setup  --->
        [*] Initial RAM filesystem and RAM disk (initramfs/initrd) support
        (/rootfs_dir) Initramfs source file(s)   //输入根文件系统的所在目录
    (3)编译内核。编译完成后,initramfs就生成一个cpio包附在内核中了。
  • 1
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 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、付费专栏及课程。

余额充值