当前位置: 首页 > news >正文

distro 和 ramdisk 区别

在系统启动流程中,distroramdisk是两个关键概念,它们在 U-Boot 和 Linux 内核启动过程中扮演重要角色:


1. Distro(Distribution Boot)

核心作用

Distro Boot 是 U-Boot 的标准化启动框架,用于自动发现并加载操作系统(如 Linux 发行版),无需手动配置启动命令。

▶ 工作原理
  1. 扫描存储设备
    U-Boot 自动检测硬盘/SD卡/USB中的分区和文件系统(EXT4/FAT)。
  2. 查找启动文件
    /boot目录搜索以下文件:
    vmlinuz-*# Linux 内核initrd.img-*# RAM 磁盘镜像*.dtb# 设备树文件
  3. 加载并启动
    按预设规则加载内核、initrd 和设备树,传递参数并执行。
▶ 配置示例(U-Boot 环境变量)
# 启用 distro 启动=>setenv boot_targets"mmc0 usb0 pxe"# 按顺序扫描设备=>setenv bootcmd"run distro_bootcmd"# 使用 distro 框架=>saveenv
▶ 优势
  • 多系统兼容:自动支持 Debian/Ubuntu/Fedora 等发行版
  • 免配置启动:插入包含/boot的磁盘即可启动
  • 灵活扩展:支持网络启动(PXE)、USB 启动等

2. Ramdisk(initrd/initramfs)

核心作用

Ramdisk 是内核启动时的临时根文件系统(加载到内存中),用于:

  1. 挂载真实根文件系统
    • 提供驱动加载真实根分区(如加密的/dev/sda2)。
  2. 执行早期初始化
    • 激活 RAID/LVM 等复杂存储。
    • 解密磁盘(如 LUKS)。
  3. 故障恢复
    • 提供紧急 shell 修复系统。
▶ 类型对比
类型initrdinitramfs
实现方式磁盘镜像(块设备)CPIO 归档(直接解压到内存)
加载速度较慢更快
现代性旧式(Linux 2.4)主流(Linux 2.6+)
文件路径/boot/initrd.img-5.4.0/boot/initramfs-5.4.0.img
▶ 工作流程
U-BootLinux KernelinitramfsReal RootSystemd加载内核 + initramfs执行 /init 脚本加载磁盘驱动挂载 /dev/sda2切换至真实根文件系统启动 PID=1 进程U-BootLinux KernelinitramfsReal RootSystemd
▶ 生成工具
  • mkinitramfs(Debian/Ubuntu)
    sudomkinitramfs -o /boot/initramfs-$(uname-r).img
  • dracut(RHEL/Fedora)
    sudodracut --force /boot/initramfs-$(uname-r).img

Distro + Ramdisk 协同工作示例

当 U-Boot 的 Distro Boot 启动 Linux 时:

  1. U-Boot 从磁盘加载:
    • vmlinuz(内核) → 内存地址0x80000000
    • initramfs.img(RAM 磁盘) → 内存地址0x83000000
    • rk3588.dtb(设备树) → 内存地址0x86000000
  2. 启动命令:
    =>booti 0x80000000 0x83000000:0x500000 0x86000000# booti [内核地址] [initrd地址]:[大小] [设备树地址]
  3. Linux 内核接管后:
    • 解压 initramfs 到内存根文件系统
    • 执行/init脚本挂载真实根分区
    • 切换至磁盘中的完整系统

典型问题解决

❌ 故障:卡在Loading initial ramdisk...

原因

  • initramfs 缺失 SATA/USB 驱动 → 无法挂载真实根分区
    修复
  1. 在 U-Boot 中手动加载内核:
    =>load mmc0:1 0x80000000 /boot/vmlinuz=>load mmc0:1 0x83000000 /boot/initramfs.img=>booti 0x80000000 0x83000000$filesize
  2. 进入系统后重建 initramfs:
    sudoupdate-initramfs -u -k all

💡总结

  • Distro Boot是 U-Boot 的智能启动管理器
  • Ramdisk是内核挂载真实系统的“跳板”
    二者协同实现从固件到操作系统的无缝过渡。
http://www.zskr.cn/news/117548.html

相关文章:

  • 运维远控工具盘点排名第一:为何大公司都选择选择ToDesk
  • 八)--工具和MCP调用
  • 【万字长文】Transformer原理图解:从小白到程序员,一文掌握大语言模型核心架构!
  • .NET 中各种程序目录获取方法的区别与使用场景
  • C语言指针详解:内存操作的核心利器
  • Java毕设项目:基于JAVA的北京市公交管理系统基于Java+Vue+SpringBoot的北京市公交管理系统(源码+文档,讲解、调试运行,定制等)
  • FreeSWITCH开启silk编码及转码
  • C++医学图像处理经典ITK库用法详解<三>: 图像配准模块功能
  • 实战前瞻:构建高可用、强实时的 Flutter + OpenHarmony 智慧医疗健康平台
  • 2025年12月新能源车电池续航,大巴车电池续航,磷酸铁锂电池续航公司推荐:行业测评与选择指南 - 品牌鉴赏师
  • Java毕设项目:基于Java的采购管理系统的设计与实现(源码+文档,讲解、调试运行,定制等)
  • QSharedMemory 在create前判断共享内存是否存在
  • 【JavaWeb】日程管理02——注册页及数据校验功能
  • 开源企业级邮件服务器选型指南
  • 数据上新预告 | 中国各省市官方媒体微信公众号数据
  • 现代软件测试工具全景对比与选型指南
  • 构建高效可持续的自动化测试框架:从架构设计到落地实践
  • 每日 AI 评测速递来啦(12.17)
  • C++可变参数队列与压栈顺序:从模板语法到汇编调用约定的深度解析
  • 灌区PLC阀门远程监控运维系统方案
  • 初探 Mysql Docker
  • 2025年12月灰铁,灰铁棒料,灰铁圆棒型材公司推荐:行业测评与采购选择指南 - 品牌鉴赏师
  • 什么是云桌面?一般都用哪些云桌面?
  • 【昇腾CANN训练营·核心篇】拒绝“写死”:Ascend C 算子动态 Tiling 的设计哲学
  • 学习日记day50
  • AMP页面还要做吗?2025替代方案及优化指南
  • Java_反射暴破创建对象与访问类中的成员
  • 2025年12月希腊移民,香港移民,澳洲移民中介测评指南,资质合规与服务透明优选 - 品牌鉴赏师
  • PaperReding:《LLaMA: Open and Efficient Foundation Language Models》
  • 2025年12月浦东新区口腔诊所推荐:全科室覆盖机构口碑之选盘点 - 品牌鉴赏师