initrd原理


什么是 initial ram disk (缩写 initrd)

    它是由 bootloader 初始化的内存盘。在 linux 启动之前,bootloader 会将它(通常是 initrd.img-xxx...xxx 文件)加载到内存中。内核启动的时候会将这个文件解开,并作为根文件系统使用。
    设计 initrd 的主要目的是让系统的启动分为两个阶段。首先,带有最少但是必要的驱动的内核启动。然后,其它需要的模块将从 initrd 中根据实际需要加载。这样就可以不必将所有的驱动都编译进内核,而根据实际情况有选择地加载。对于启动较慢的设备如 usb 设备等,如果将驱动编译进内核,当内核访问其上的文件系统时,通常设备还没有准备好,就会造成访问失败。所以,通常在 initrd 中加载 usb 驱动,然后休眠几秒钟,带设备初始化完成后,再挂载其中的文件系统。


initrd 的具体形式

    目前有两种形式:cpio-initrd 和 image-initrd。
    image-initrd 的制作相对麻烦,处理流程相对复杂(内核空间->用户空间->内核空间 与初始化越来越多的在用户空间进行的趋势不符),本文不对其进行介绍。
    cpio-initrd 的处理流程(内核空间->用户空间):
        1. boot loader 把内核以及 initrd 文件加载到内存的特定位置。
        2. 内核判断 initrd 的文件格式,如果是 cpio 格式。
        3. 将 initrd 的内容释放到 rootfs 中。
        4. 执行 initrd 中的 /init 文件,执行到这一点,内核的工作全部结束,完全交给 /init 文件处理。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值