news 2026/4/8 3:09:37

Linux内核驱动--U-Boot、内核加载与 rootfs 挂载

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Linux内核驱动--U-Boot、内核加载与 rootfs 挂载

一、Linux 系统的完整启动过程

  • U-Boot(bootloader)如何初始化硬件
  • 内核镜像如何被加载并启动
  • 根文件系统(rootfs)如何挂载
  • 实际调试中常见的 can't mount root fs 错误分析

二、Linux 启动流程概览

  1. bootloader(如 U-Boot)
  2. Linux 内核(kernel)
  3. 根文件系统(rootfs)

三、存储设备与内存布局详解

设备类型特点
ROM只读存储存放初始引导代码(bootcode),断电不丢失
RAM随机存储临时存储,访问快,断电丢失
Flash/EMMC非易失用于存放操作系统镜像和数据,可擦写

四、Linux 启动三步曲

1. bootloader(U-Boot)——系统的“引路人”

  • 初始化 CPU 和外设(UART、网卡、内存控制器等)
  • 加载内核镜像(zImage)到指定内存地址
  • 设置启动参数(如 kernel command line)
  • 跳转执行内核入口点

2. Linux 内核(kernel)——核心控制中枢

  • 内核是操作系统的核心,负责:
  • 管理进程、内存、设备、网络
  • 提供系统调用接口
  • 初始化驱动模块
  • 挂载根文件系统

3. 根文件系统(rootfs)——应用的“家”

  • 根文件系统是 Linux 运行的基础,包含:
  • /bin, /sbin: 基本命令
  • /etc: 配置文件
  • /lib: 库文件
  • /proc, /sys: 虚拟文件系统
  • /home, /tmp: 用户目录

四、Linux在SD卡与Ubuntu上启动

Linux 启动流程:
SD卡启动
  1. 系统上电后,先执行 imx6 内部 ROM 中的启动程序(根据 boot mode 选择对应的外设)
  2. 拷贝 SD 卡中的 bootloader 前半部分程序到 imx6 内部的 RAM 中-- bootloader 必须在自己的前半部分初始化好内存,并将自己后半部分搬移到内存执行
  3. 内核及根文件系统都在 SD 卡
  4. bootloader 后半部分搬移 SD 卡中的内核(zImage)到内存的 0x80800000 地址处,PC 指向 0x80800000 地址处启动内核
  5. 内核启动完成后挂载 SD 卡上的根文件系统
内核及根文件系统都在 ubuntu 上
  1. 系统上电后,先执行 imx6 内部 ROM 中的启动程序(根据 boot mode 选择对应的外设)
  2. 拷贝 SD 卡中的 bootloader 前半部分程序到 imx6 内部的 RAM 中-- bootloader 必须在自己的前半部分初始化好内存,并将自己后半部分搬移到内存执行
  3. bootloader 通过 tftp 下载 ubuntu 中的 zImage 到内存的 0x80800000 地址处并引导内核启动
  4. 内核启动完成后通过 nfs 挂载 ubuntu 中的 rootfs

五、uboot命令

uboot命令:

  • help/? 查看uboot支持的命令
  • reset uboot阶段重启命令
  • ping 测试网络
  • printenv (print) 打印环境变量
  • setenv name value 设置环境变量(所有环境变量均为字符串类型)
  • setenv name 删除环境变量(将环境变量的值设置为空)
  • saveenv 保存环境变量(一般保存在MMC中)

六、相关环境变量配置

1.TFTP 相关环境变量(用于网络下载镜像)

变量名含义示例值说明
ipaddr开发板的 IP 地址192.168.1.100本机 IP,必须与主机在同一网段
ethaddrMAC 地址00:1A:2B:3C:4D:5E网卡硬件地址,用于网络通信
serveripTFTP 服务器 IP 地址192.168.1.3Ubuntu 主机的 IP,提供文件下载服务
1.setenv ipaddr 192.168.1.100 2.setenv serverip 192.168.1.3 3.setenv ethaddr 00:1A:2B:3C:4D:5E

2.下载 zImage 内核镜像

将服务器上的 zImage 文件下载到内存地址 0x80800000

tftp 0x80800000 zImage

3.下载设备树(Device Tree Blob)

  • 设备树描述了硬件平台信息(如 CPU、内存、外设)
  • 内核依赖它来正确识别硬件
  • 必须与内核版本匹配
tftp 0x83000000 imx6.dtb

4.启动内核时的关键参数(bootargs)

参数含义示例值说明
consol=控制台输出端口ttySAC0,115200指定串口和波特率,便于调试
root=根文件系统类型root=/dev/nfs表示使用 NFS 作为根文件系统
nfsroot=NFS 根目录路径192.168.1.3:/home/linux/nfs/rootfs,nfsvers=3服务器 IP + 共享目录 + 协议版本
ip=开发板 IP 地址192.168.1.100配置开发板静态 IP
init=指定初始化进程init=/linuxrc启动第一个用户程序(通常是/linuxrc
setenv bootargs console=ttySAC0,115200 root=/dev/nfs nfsroot=192.168.1.3:/home/linux/nfs/rootfs, nfsvers=3 ip=192.168.1.100 init=/linuxrc

5.启动内核

bootz 0x80800000 - 0x83000000

七、总结

类别变量功能
网络ipaddr,serverip,ethaddr配置网络连接
TFTPtftp 0x... zImage下载内核镜像
启动参数bootargs传给内核的启动选项
根文件系统root=/dev/nfs,nfsroot=...指定 NFS 根目录
初始化init=/linuxrc指定第一个用户进程

七、附录:U-Boot 常用命令速查

help # 查看支持命令 printenv # 查看环境变量 setenv name value # 设置环境变量 saveenv # 保存环境变量到 Flash tftp addr filename # 通过 TFTP 下载文件 bootz addr ramdisk_size size # 启动压缩内核
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/5 4:54:30

冷库监控系统-大数据深度学习算法毕设毕业设计项目Flask

博主介绍:👉全网个人号和企业号粉丝40W,每年辅导几千名大学生较好的完成毕业设计,专注计算机软件领域的项目研发,不断的进行新技术的项目实战👈 ⭐️热门专栏推荐订阅⭐️ 订阅收藏起来,防止下次找不到 &am…

作者头像 李华
网站建设 2026/4/5 19:16:11

9:同任务多模型 × 参数 × Prompt 综合对比实验

作者: HOS(安全风信子) 日期: 2026-02-02 主要来源平台: ModelScope 摘要: 本文通过系统对比实验,验证了在信息抽取、长文本总结、代码生成、中文创作等典型任务中,不同Qwen模型(Qwen2.5-7B vs …

作者头像 李华
网站建设 2026/4/5 9:16:12

个人微信API接口二次开发

在私域运营竞争日益白热化的当下,许多企业正陷入“时间消耗战”:运营团队被添加好友、社群维护、重复答疑等基础操作束缚,大量精力耗费于流程性事务,致使战略规划与创意工作不断被压缩,企业增长潜力亦因此受到侵蚀。 …

作者头像 李华
网站建设 2026/4/5 14:07:14

基于深度学习的胰腺肿瘤分段模型在公共内镜超声数据集上的表现

背景:胰腺癌是最具侵袭性的癌症之一,生存率极低。超声内镜(EUS)是关键的诊断手段,但其效果受操作者主观性制约。本研究评估了一种基于Vision Transformer的深度学习分割模型在胰腺肿瘤识别中的应用。方法:使…

作者头像 李华
网站建设 2026/4/7 11:20:20

(新卷,100分)- 计算礼品发放的最小分组数目(Java JS Python)

(新卷,100分)- 计算礼品发放的最小分组数目(Java & JS & Python) 题目描述 又到了一年的末尾,项目组让小明负责新年晚会的小礼品发放工作。 为使得参加晚会的同事所获得的小礼品价值相对平衡,需要把小礼品根据价格进行…

作者头像 李华