[rootfs] InitRamdisk & InitRamfs 介绍和使用

一、rootfs
    rootfs,Root FileSystem,是指根文件系统,对应/目录节点。
    rootfs又分为虚拟rootfs和真实rootfs。
    虚拟rootfs由内核自己创建和加载,仅仅存在于内存之中(后续的InitRamfs也是在这种基础上实现),其文件系统是tmpfs类型或者ramfs类型。
    真实rootfs则是指根文件系统存在于存储设备上,内核在启动过程中会在虚拟rootfs上挂载这个存储设备,然后将/目录节点切换到这个存储设备上,这样存储设备上的文件系统就会被作为根文件系统使用(后续InitRamdisk是在这种基础上实现),其文件系统类型更加丰富,可以是ext2、yaffs、yaffs2等等类型,由具体的存储设备的类型决定。


二、InitRamdisk InitRamfs
     InitRamdisk InitRamfs 技术都是 使用ram的区域来作为根文件系统。
    1、差异如下
       (1)实现原理上的差异
            InitRamdisk,初始化内存盘INITRD(INITial Ram Disk)技术,利用ramdisk的技术,将系统一部分内存区域实现为/dev/ram,把/dev/ram作为作为一个存储设备,最终将根目录切换到/dev/ram的挂载,实现将/dev/ram作为根文件系统的目的。从原理上属于真是rootfs。
            InitRamfs,将一个包含有根文件系统的文件、目录、节点的cpio压缩的描述包直接释放到虚拟rootfs的内存区域中,后续都是由rootfs来作为系统的根文件系统使用,无需块设备参与。
        (2)文件系统上的差异
             InitRamdisk,使用ext2格式的文件系统。
             InitRamfs,使用kernel内核直接支持的ROOTFS格式的文件系统。
        (3)数据传输流上的差异
             InitRamdisk,需要经过ext2文件系统和/dev/ram设备
                
             InitRamfs,直接通过ROOTFS文件系统进行
                
       (3)初始化进程init的区别
             InitRamdisk,使用根文件系统下的/linuxrc来作为init进程
             InitRamfs,使用根文件系统下的/init来作为init进程
       (4)内核支持版本上的差异
             InitRamdisk,由kernel 2.4版本上开始支持
             InitRamfs,由kernel 2.6版本上开始支持
        (5)镜像的差异和制作方式上的差异会在后面说明    

    2、优缺点
        (1) InitRamfs的优势
             InitRamfs省去了创建/dev/ram、挂接文件系统和切换根目录的操作,启动过程更会简单和快速。
           同时, InitRamfs InitRamdisk 更简单快速,而Kernel对 InitRamfs 的内部处理也更为简单。
        (2) InitRamfs的缺点
            InitRamfs使用的是cpio包,包含了文件、目录、节点的描述语言包,为了描述一个文件、目录、节点,要增加很多额外的描述文字开销。这样使得cpio包比相应的image文件大很多。
        

三、名词、类型说明
    因为网上对于initrd有很多种名词,因为在这里做解释和统一说明。
    前面已经说过了 InitRamdisk和 InitRamfs,同时 InitRamfs又分为独立式 InitRamfs和集成式 InitRamfs。
     1、InitRamdisk
        老式块设备的initrd,对应init ramdisk的镜像,格式ext2。
        网上的名词:image-initrd,也可能直接用initrd来表示 InitRamdisk,具体需要根据文章自己进行判断。

     2、独立式InitRamfs
        是指将InitRamfs的压缩包与kernel Image独立开来,对应initramfs压缩包,是一个cpio格式压缩的独立文件。
        网上的名词:cpio-initrd(本质上是属于InitRamfs类型)

     3、集成式InitRamfs
        是指将InitRamfs的cpio压缩包集成到kernel Image中,该cpio格式压缩的文件会被被链接进了内核中特殊的数据段.init.ramfs上,其中全局变量__initramfs_start和__initramfs_end分别指向这个数据段的起始地址和结束地址。内核启动时会对.init.ramfs段中的数据进行解压,然后使用它作为临时的根文件系统。
        网上的名词:initramfs(本质上确实 是属于InitRamfs类型,但是是其中的一种类型


四、 InitRamdisk InitRamfs的制作
     1、InitRamdisk
    (1)通用命令如下:
   
   
   
  1. genext2fs -b 4096 -d rootfs ramdisk
  2. gzip -9 -
  • 4
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值