initramfs与dracut总结

原创 Linux二进制 2024-09-20 08:20

initramfs 和 dracut 是 Linux 系统中与系统启动相关的两个概念。在我们进行内核驱动开发以及测试过程中,可能会接触到,网上的博客大都写的比较晦涩难懂,俗话讲:“好记性不如烂笔头”,于是便想自己总结一下,以便后续用到的时候拿出来看一下;经过查阅资料以及实践,下面将进行详细的归纳总结和说明。

1. initramfs 概述

initramfs 是 initial RAM filesystem 的缩写,指的是 Linux 启动时加载的初始文件系统。它是在操作系统启动过程中,由 Linux 内核在非常早期阶段加载的一个小型文件系统,通常包含一个最小化的环境,包括基本的命令行工具和脚本,以便在启动过程中执行必要的操作。

initramfs 的作用

  • 引导过程initramfs 是内核加载的第一个文件系统,主要负责挂载根文件系统(/)并启动用户空间的服务。

  • 硬件驱动支持:它通常包含与系统硬件相关的驱动程序和必要的模块(如磁盘、网络等),以确保系统能够访问存储设备并加载根文件系统。

  • 灵活性:与以前的 initrdInitial RAM Disk)不同,initramfs 使用的是压缩的 CPIO 文件系统,可以被内核直接解压并加载到内存中,它更加灵活且支持动态构建。

    拓展CPIOCPIOCopy In/Out)是一种归档文件格式,它的名称来源于 copy in 和 copy out,意味着它可以将文件复制到归档中(归档),以及从归档中复制文件出来。常用于 Linux 和 Unix 系统中。它主要用于创建和提取归档文件,特别是在生成 initramfs 映像时非常常见。详情见 CPIO 官方文档(https://www.gnu.org/software/cpio/manual/cpio.html)。

initramfs 的应用流程

  1. 内核加载:内核从 /boot 中加载 initramfs 文件。
  2. 解压缩:内核解压 initramfs,并将它挂载为一个临时根文件系统。
  3. 执行启动脚本:在 initramfs 中包含了基本的用户空间工具和脚本,帮助内核探测硬件、加载必要的模块。
  4. 挂载实际根文件系统initramfs 负责找到并挂载实际的根文件系统(通常是 /dev/sda1 等),然后切换到根文件系统。
  5. 启动系统:切换后,内核从新的根文件系统启动整个操作系统。

2. dracut 概述

dracut 是一个现代化的、通用的 initramfs 生成工具,能够根据系统的实际需求来构建适当的 initramfs 文件。

dracut 的特点

  • 模块化dracut 使用模块化设计,构建 initramfs 时根据系统的实际情况加载所需的模块,避免加载不必要的驱动和工具,从而提高启动效率。
  • 灵活生成:它能够根据具体的系统配置生成不同的 initramfs 文件,比如基于 LVM、加密文件系统(LUKS)、RAID 等特性。
  • 精简高效:生成的 initramfs 只包含启动系统的必要工具和模块,避免了资源浪费。

dracut 的常用命令

  • dracut -f强制重建 initramfs 文件。-f 参数表示覆盖现有的 initramfs 文件,通常用于系统内核更新或系统硬件发生变化后,重新生成与新配置匹配的 initramfs。生成的 initramfs 映像通常位于 /boot 目录下,文件名类似于 initramfs-.img
  • dracut -v:显示详细输出,调试生成过程。
  • dracut --list-modules:列出所有可用的模块。
  • dracut --omit :在生成 initramfs 时忽略指定模块。

dracut 的使用场景

  • 内核更新后:每次系统内核更新时,都会生成新的 initramfs 文件,确保新内核能够正常启动。如果因为某些原因没有自动生成或遇到问题,使用 dracut -f 手动重建 initramfs 是常见的解决方法。

  • 硬件变更:如果添加了新硬件设备或者更改了存储设备配置(如 RAIDLVM、文件系统类型等),也需要重新生成 initramfs

  • 修改 initramfs 配置:如果您对 initramfs 的配置进行了修改(如添加了自定义脚本或驱动程序),需要重新生成 initramfs 以应用这些更改。

  • 修复启动问题:在某些系统启动问题中,比如根文件系统无法挂载、启动过程中找不到设备驱动或者设备驱动无法卸载时,重建 initramfs 可以帮助修复这些问题。设备驱动无法卸载时,使用 dracut -f 更新 initramfs 的示例如下:

    [root@localhost ~]# lsmod | grep nfp
    nfp 655360 0
    [root@localhost ~]#
    [root@localhost ~]# rmmod nfp
    rmmod: ERROR: could not remove 'nfp': Device or resource busy
    rmmod: ERROR: could not remove module nfp: Device or resource busy
    [root@localhost src]#
    [root@localhost src]# rm -rf /lib/modules/4.18.0-193.28.1.an7.aarch64/kernel/drivers/net/ethernet/netronome/nfp/nfp.ko.xz
    [root@localhost src]#
    [root@localhost src]# dracut -f #给内核进行重建initramfs文件
    /usr/lib/dracut/modules.d/90kernel-modules/module-setup.sh: line 16: /lib/modules/4.18.0-193.28.1.an7.aarch64//kernel/drivers/net/ethernet/netronome/nfp/nfp.ko.xz: No such file or directory
    dracut-install: ERROR: installing '/lib/modules/4.18.0-193.28.1.an7.aarch64/kernel/drivers/net/ethernet/netronome/nfp/nfp.ko.xz'
    modinfo: ERROR: Module /lib/modules/4.18.0-193.28.1.an7.aarch64/kernel/drivers/net/ethernet/netronome/nfp/nfp.ko.xz not found.
    [root@localhost src]# lsmod | grep nfp
    nfp 655360 0
    [root@localhost src]#
    [root@localhost src]# reboot

    Remote side unexpectedly closed network connection

    ─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────

    Session stopped
    - Press to exit tab
    - Press R to restart session
    - Press S to save terminal output to file
    ┌──────────────────────────────────────────────────────────────────────┐
    │ • MobaXterm Personal Edition v22.0 • │
    │ (SSH client, X server and network tools) │
    │ │
    │ ➤ SSH session to root@10.8.2.113 │
    │ • Direct SSH : ✔ │
    │ • SSH compression : ✔ │
    │ • SSH-browser : ✔ │
    │ • X11-forwarding : ✘ (disabled or not supported by server) │
    │ │
    │ ➤ For more info, ctrl+click on help or visit our website. │
    └──────────────────────────────────────────────────────────────────────┘


    Last login: Tue Sep 19 15:46:16 2023 from 10.9.4.195
    [root@localhost ~]# lsmod | grep nfp
    [root@localhost ~]#
    [root@localhost ~]# rpm -qa | grep nfp
    [root@localhost ~]#

    这段代码的主要操作如下:

    通过这些操作,我们使用 dracut 重建了 initramfs,在系统重启后成功地移除了 nfp 模块。

    • 检查并尝试卸载 nfp 模块:发现 nfp 模块正在使用中,无法卸载。

    • 删除 nfp 模块文件:手动删除了 nfp.ko.xz 文件。

    • 重建 initramfs 文件:由于 nfp.ko.xz 文件已被删除,dracut 报错。

    • 重启系统:系统重启后,nfp 模块不再加载。

    • 检查系统中是否还有 nfp 相关的 RPM 包:没有找到与 nfp 相关的 RPM 包。


3. initramfs 和 dracut 之间的关系

dracut 是构建 initramfs 的工具。initramfs 是一个文件系统映像,包含了系统启动时最基本的用户空间工具和驱动,dracut 则是生成这个 initramfs 的软件。dracut 根据系统的实际配置(如磁盘分区、文件系统类型、LVMRAID 等)选择合适的模块并生成 initramfs,从而确保系统在启动过程中可以正常加载硬件驱动并挂载根文件系统。

总结如下:

  • initramfs 是内核启动时加载的初始文件系统,主要负责挂载系统的根文件系统和启动用户空间。
  • dracut 是生成 initramfs 文件的工具,提供灵活的模块化机制,能够根据系统需求生成定制化的启动映像。
  • 使用 dracut -f 可以强制重新生成 initramfs,通常用于内核更新或系统硬件配置变更后,确保系统能够正常启动。

4. dracut -f 生成 initramfs 流程图

为了更好地理解 dracut 生成 initramfs 的过程,下面给出一个简化的流程图:

+---------------------+                      +-------------------+
| dracut -f 命令 |----> 模块检测 -----> | 选择必要模块 |
+---------------------+ +-------------------+
|
v
+---------------------+ +--------------------+
| 加载硬件相关驱动 |----> 生成 initramfs -----> | 压缩成映像文件 |
+---------------------+ +--------------------+
|
v
+---------------------+ +-------------------+
| /boot 目录中生成 |----> 生成完成 -----> | 准备引导系统 |
+---------------------+ +-------------------+
  • 第一步dracut -f 命令发起生成 initramfs 文件。
  • 第二步dracut 检测系统当前硬件和配置,选择所需的驱动模块。
  • 第三步:加载相关模块(如 LVMRAID、磁盘驱动等)并生成 initramfs 文件。
  • 第四步:将 initramfs 压缩成映像文件并保存到 /boot 目录中。
  • 第五步:引导过程中,内核从 /boot 加载生成的 initramfs,完成系统启动。

根据以上步骤,dracut 生成的 initramfs 能够保证内核在启动时加载必要的模块和驱动,并顺利挂载根文件系统。

通过理解和正确使用 dracut 和 initramfs,您可以更好地管理和维护您的 Linux 系统,确保其顺利启动和运行。


Linux二进制 Linux编程、内核模块、网络原创文章分享,欢迎关注"Linux二进制"微信公众号
评论
  • 当前,智能汽车产业迎来重大变局,随着人工智能、5G、大数据等新一代信息技术的迅猛发展,智能网联汽车正呈现强劲发展势头。11月26日,在2024紫光展锐全球合作伙伴大会汽车电子生态论坛上,紫光展锐与上汽海外出行联合发布搭载紫光展锐A7870的上汽海外MG量产车型,并发布A7710系列UWB数字钥匙解决方案平台,可应用于数字钥匙、活体检测、脚踢雷达、自动泊车等多种智能汽车场景。 联合发布量产车型,推动汽车智能化出海紫光展锐与上汽海外出行达成战略合作,联合发布搭载紫光展锐A7870的量产车型
    紫光展锐 2024-12-03 11:38 101浏览
  •         温度传感器的精度受哪些因素影响,要先看所用的温度传感器输出哪种信号,不同信号输出的温度传感器影响精度的因素也不同。        现在常用的温度传感器输出信号有以下几种:电阻信号、电流信号、电压信号、数字信号等。以输出电阻信号的温度传感器为例,还细分为正温度系数温度传感器和负温度系数温度传感器,常用的铂电阻PT100/1000温度传感器就是正温度系数,就是说随着温度的升高,输出的电阻值会增大。对于输出
    锦正茂科技 2024-12-03 11:50 106浏览
  • 光伏逆变器是一种高效的能量转换设备,它能够将光伏太阳能板(PV)产生的不稳定的直流电压转换成与市电频率同步的交流电。这种转换后的电能不仅可以回馈至商用输电网络,还能供独立电网系统使用。光伏逆变器在商业光伏储能电站和家庭独立储能系统等应用领域中得到了广泛的应用。光耦合器,以其高速信号传输、出色的共模抑制比以及单向信号传输和光电隔离的特性,在光伏逆变器中扮演着至关重要的角色。它确保了系统的安全隔离、干扰的有效隔离以及通信信号的精准传输。光耦合器的使用不仅提高了系统的稳定性和安全性,而且由于其低功耗的
    晶台光耦 2024-12-02 10:40 120浏览
  • RDDI-DAP错误通常与调试接口相关,特别是在使用CMSIS-DAP协议进行嵌入式系统开发时。以下是一些可能的原因和解决方法: 1. 硬件连接问题:     检查调试器(如ST-Link)与目标板之间的连接是否牢固。     确保所有必要的引脚都已正确连接,没有松动或短路。 2. 电源问题:     确保目标板和调试器都有足够的电源供应。     检查电源电压是否符合目标板的规格要求。 3. 固件问题: &n
    丙丁先生 2024-12-01 17:37 100浏览
  • TOF多区传感器: ND06   ND06是一款微型多区高集成度ToF测距传感器,其支持24个区域(6 x 4)同步测距,测距范围远达5m,具有测距范围广、精度高、测距稳定等特点。适用于投影仪的无感自动对焦和梯形校正、AIoT、手势识别、智能面板和智能灯具等多种场景。                 如果用ND06进行手势识别,只需要经过三个步骤: 第一步&
    esad0 2024-12-04 11:20 50浏览
  • 11-29学习笔记11-29学习笔记习学习笔记&记录学习学习笔记&记录学习学习笔记&记录学习学习笔记&记录学习笔记&记录学习习笔记&记学习学习笔记&记录学习学习笔记&记录学习习笔记&记录学习学习笔记&记录学习学习笔记记录学习学习笔记&记录学习学习笔记&记录学习学习笔记&记录学习学习笔记&记录学习学习笔记&记录学习习笔记&记录学习学习笔记&记录学习学习笔记&记录学习学习笔记&记录学习学习笔记&记录学习学习笔记&记录学习学习笔记&记录学习学习笔记&学习学习笔记&记录学习学习笔记&记录学习学习笔记&记
    youyeye 2024-12-02 23:58 71浏览
  • 《高速PCB设计经验规则应用实践》+PCB绘制学习与验证读书首先看目录,我感兴趣的是这一节;作者在书中列举了一条经典规则,然后进行详细分析,通过公式推导图表列举说明了传统的这一规则是受到电容加工特点影响的,在使用了MLCC陶瓷电容后这一条规则已经不再实用了。图书还列举了高速PCB设计需要的专业工具和仿真软件,当然由于篇幅所限,只是介绍了一点点设计步骤;我最感兴趣的部分还是元件布局的经验规则,在这里列举如下:在这里,演示一下,我根据书本知识进行电机驱动的布局:这也算知行合一吧。对于布局书中有一句:
    wuyu2009 2024-11-30 20:30 122浏览
  • 最近几年,新能源汽车愈发受到消费者的青睐,其销量也是一路走高。据中汽协公布的数据显示,2024年10月,新能源汽车产销分别完成146.3万辆和143万辆,同比分别增长48%和49.6%。而结合各家新能源车企所公布的销量数据来看,比亚迪再度夺得了销冠宝座,其10月新能源汽车销量达到了502657辆,同比增长66.53%。众所周知,比亚迪是新能源汽车领域的重要参与者,其一举一动向来为外界所关注。日前,比亚迪汽车旗下品牌方程豹汽车推出了新车方程豹豹8,该款车型一上市就迅速吸引了消费者的目光,成为SUV
    刘旷 2024-12-02 09:32 119浏览
  • 概述 说明(三)探讨的是比较器一般带有滞回(Hysteresis)功能,为了解决输入信号转换速率不够的问题。前文还提到,即便使能滞回(Hysteresis)功能,还是无法解决SiPM读出测试系统需要解决的问题。本文在说明(三)的基础上,继续探讨为SiPM读出测试系统寻求合适的模拟脉冲检出方案。前四代SiPM使用的高速比较器指标缺陷 由于前端模拟信号属于典型的指数脉冲,所以下降沿转换速率(Slew Rate)过慢,导致比较器检出出现不必要的问题。尽管比较器可以使能滞回(Hysteresis)模块功
    coyoo 2024-12-03 12:20 108浏览
  • 遇到部分串口工具不支持1500000波特率,这时候就需要进行修改,本文以触觉智能RK3562开发板修改系统波特率为115200为例,介绍瑞芯微方案主板Linux修改系统串口波特率教程。温馨提示:瑞芯微方案主板/开发板串口波特率只支持115200或1500000。修改Loader打印波特率查看对应芯片的MINIALL.ini确定要修改的bin文件#查看对应芯片的MINIALL.ini cat rkbin/RKBOOT/RK3562MINIALL.ini修改uart baudrate参数修改以下目
    Industio_触觉智能 2024-12-03 11:28 84浏览
  • 戴上XR眼镜去“追龙”是种什么体验?2024年11月30日,由上海自然博物馆(上海科技馆分馆)与三湘印象联合出品、三湘印象旗下观印象艺术发展有限公司(下简称“观印象”)承制的《又见恐龙》XR嘉年华在上海自然博物馆重磅开幕。该体验项目将于12月1日正式对公众开放,持续至2025年3月30日。双向奔赴,恐龙IP撞上元宇宙不久前,上海市经济和信息化委员会等部门联合印发了《上海市超高清视听产业发展行动方案》,特别提到“支持博物馆、主题乐园等场所推动超高清视听技术应用,丰富线下文旅消费体验”。作为上海自然
    电子与消费 2024-11-30 22:03 98浏览
  • 作为优秀工程师的你,已身经百战、阅板无数!请先醒醒,新的项目来了,这是一个既要、又要、还要的产品需求,ARM核心板中一个处理器怎么能实现这么丰富的外围接口?踌躇之际,你偶阅此文。于是,“潘多拉”的魔盒打开了!没错,USB资源就是你打开新世界得钥匙,它能做哪些扩展呢?1.1  USB扩网口通用ARM处理器大多带两路网口,如果项目中有多路网路接口的需求,一般会选择在主板外部加交换机/路由器。当然,出于成本考虑,也可以将Switch芯片集成到ARM核心板或底板上,如KSZ9897、
    万象奥科 2024-12-03 10:24 68浏览
我要评论
0
点击右上角,分享到朋友圈 我知道啦
请使用浏览器分享功能 我知道啦