linux2.6 内核的 initrd 机制解析

linux2.6 内核的 initrd 机制解析

ID:15262897

大小:50.00 KB

页数:21页

时间:2018-08-02

linux2.6 内核的 initrd 机制解析_第1页
linux2.6 内核的 initrd 机制解析_第2页
linux2.6 内核的 initrd 机制解析_第3页
linux2.6 内核的 initrd 机制解析_第4页
linux2.6 内核的 initrd 机制解析_第5页
资源描述:

《linux2.6 内核的 initrd 机制解析》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、Linux2.6内核的Initrd机制解析Linux2.6内核的Initrd机制解析1.什么是Initrdinitrd的英文含义是bootloaderinitializedRAMdisk,就是由bootloader初始化的内存盘。在Linux内核启动前,bootloader会将存储介质中的initrd文件加载到内存,内核启动时会在访问真正的根文件系统前先访问该内存中的initrd文件系统。在bootloader配置了initrd的情况下,内核启动被分成了两个阶段,第一阶段先执行initrd文件系统中的"某个文件",完成加载驱

2、动模块等任务,第二阶段才会执行真正的根文件系统中的/sbin/init进程。这里提到的"某个文件",Linux2.6内核会同以前版本内核的不同,所以这里暂时使用了"某个文件"这个称呼,后面会详细讲到。第一阶段启动的目的是为第二阶段的启动扫清一切障爱,最主要的是加载根文件系统存储介质的驱动模块。我们知道根文件系统可以存储在包括IDE、SCSI、USB在内的多种介质上,如果将这些设备的驱动都编译进内核,可以想象内核会多么庞大、臃肿。Initrd的用途主要有以下四种:1.Linux发行版的必备部件Linux发行版必须适应各种不同的

3、硬件架构,将所有的驱动编译进内核是不现实的,initrd技术是解决该问题的关键技术。Linux发行版在内核中只编译了基本的硬件驱动,在安装过程中通过检测系统硬件,生成包含安装系统硬件驱动的initrd,无非是一种即可行又灵活的解决方案。2.livecd的必备部件同Linux发行版相比,livecd可能会面对更加复杂的硬件环境,所以也必须使用initrd。3.制作Linuxusb启动盘必须使用initrdusb设备是启动比较慢的设备,从驱动加载到设备真正可用大概需要几秒钟时间。如果将usb驱动编译进内核,内核通常不能成功访问u

4、sb设备中的文件系统。因为在内核访问usb设备时,usb设备通常没有初始化完毕。所以常规的做法是,在initrd中加载usb驱动,然后休眠几秒中,等待usb设备初始化完毕后再挂载usb设备中的文件系统。4.在Linuxrc脚本中可以很方便地启用个性化bootsplash。2.Linux2.4内核对Initrd的处理流程为了使读者清晰的了解Linux2.6内核initrd机制的变化,在重点介绍Linux2.6内核initrd之前,先对Linux2.4内核的initrd进行一个简单的介绍。Linux2.4内核的initrd的格式

5、是文件系统镜像文件,本文将其称为image-initrd,以区别后面介绍的Linux2.6内核的cpio格式的initrd。Linux2.4内核对initrd的处理流程如下:1.bootloader把内核以及/dev/initrd的内容加载到内存,/dev/initrd是由bootloader初始化的设备,存储着initrd。2.在内核初始化过程中,内核把/dev/initrd设备的内容解压缩并拷贝到/dev/ram0设备上。3.内核以可读写的方式把/dev/ram0设备挂载为原始的根文件系统。4.如果/dev/ram0被指

6、定为真正的根文件系统,那么内核跳至最后一步正常启动。5.执行initrd上的/Linuxrc文件,Linuxrc通常是一个脚本文件,负责加载内核访问根文件系统必须的驱动,以及加载根文件系统。6./Linuxrc执行完毕,真正的根文件系统被挂载。7.如果真正的根文件系统存在/initrd目录,那么/dev/ram0将从/移动到/initrd。否则如果/initrd目录不存在,/dev/ram0将被卸载。8.在真正的根文件系统上进行正常启动过程,执行/sbin/init。Linux2.4内核的initrd的执行是作为内核启动的一

7、个中间阶段,也就是说initrd的/Linuxrc执行以后,内核会继续执行初始化代码,我们后面会看到这是Linux2.4内核同2.6内核的initrd处理流程的一个显著区别。3.Linux2.6内核对Initrd的处理流程Linux2.6内核支持两种格式的initrd,一种是前面第3部分介绍的Linux2.4内核那种传统格式的文件系统镜像-image-initrd,它的制作方法同Linux2.4内核的initrd一样,其核心文件就是/Linuxrc。另外一种格式的initrd是cpio格式的,这种格式的initrd从Linu

8、x2.5起开始引入,使用cpio工具生成,其核心文件不再是/Linuxrc,而是/init,本文将这种initrd称为cpio-initrd。尽管Linux2.6内核对cpio-initrd和image-initrd这两种格式的initrd均支持,但对其处理流程有着显著的区别,下面分别介绍

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。