六祖慧能 圆寂的寺庙:6.5 使用initramfs

来源:百度文库 编辑:中财网 时间:2024/04/29 08:00:49

    6.5 使用initramfs

    initramfs是用来执行早期用户空间程序所采用的一种新机制(在Linux 2.6的内核中使用),它与前面描述的initrd在概念上较为相似,其作用也很相似,即在挂载真正的根文件系统之前加载必要的设备驱动程序。然而,二者在某些方面还是有显著区别的。

    initrd和initramfs的具体执行细节有着显著的区别。例如,initramfs要在调用do_basic_setup() 之前加载,它会在硬件设备的驱动程序加载之前加载其固件程序。如果要了解更具体的内容,可以参阅最新的相关Linux内核文档,详见.../Documentation/filesystems/ ramfs-rootfs-initramfs.txt。

    从实用角度看,initramfs更易使用。initramfs是一种cpio格式的档案文件,而initrd是一种gzipped格式的系统映像文件,二者这种简单的区别就使得initramfs更容易使用。当用户编译链接Linux内核映像的时候,initramfs会被集成到Linux内核源代码中并且被自动编译,此外,对initramfs做出改变要比构建和加载一个新的initrd映像更容易一些。代码清单6-13显示了Linux内核下.../usr目录的内容,就是在这里编译链接了initramfs映像,代码清单6-13所示的内容为Linux内核编译链接之后的结果。

    代码清单6-13 内核initramfs映像的编译链接目录

    1. $ ls -l  
    2. total 56  
    3. -rw-rw-r--  1 chris chris   834 Mar 25 11:13 built-in.o  
    4. -rwxrwxr-x  1 chris chris 11512 Mar 25 11:13 gen_init_cpio  
    5. -rw-rw-r--  1 chris chris 10587 Oct 27  2005 gen_init_cpio.c  
    6. -rw-rw-r--  1 chris chris   512 Mar 25 11:13 initramfs_data.cpio  
    7. -rw-rw-r--  1 chris chris   133 Mar 25 11:13 initramfs_data.cpio.gz  
    8. -rw-rw-r--  1 chris chris   786 Mar 25 11:13 initramfs_data.o  
    9. -rw-rw-r--  1 chris chris  1024 Oct 27  2005 initramfs_data.S  
    10. -rw-rw-r--  1 chris chris   113 Mar 25 11:13 initramfs_list  
    11. -rw-rw-r--  1 chris chris  1619 Oct 27  2005 Kconfig  
    12. -rw-rw-r--  1 chris chris  2048 Oct 27  2005 Makefile 

    该目录下的initramfs_list文件包含了要在initramfs档案中添加的文件列表,对于最新内核版本所默认添加的内容如下所示:

    1. dir /dev 0755 0 0  
    2. nod /dev/console 0600 0 0 c 5 1  
    3. dir /root 0700 0 0 

    这是一个小型的目录结构,包含了/root和/dev目录以及表示控制台的一个独立设备节点。添加这些文件可以用来构建用户自己的initramfs,用户也可以通过使用内核配置工具来指定创建initramfs的源文件。在内核配置工具中启用INITRAMFS_SOURCE选项并且使它指向用户的开发平台,内核编译链接系统就将使用这些文件作为用户initramfs映像的源文件。

    这个编译链接目录生成的最后一个用来构建initramfs映像的文件是initramfs_ data_cpio.gz,它是一个包含了用户所指定文件(不论是通过initramfs_list指定还是通过选择内核编译工具的INITRAMFS_SOURCE选项来指定)的压缩档案文件,该档案文件将被链接到最后的内核映像之中。这也是使用initramfs的另一个优势所在,即不需要在引导时加载一个单独的initrd映像。