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

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 # 启动压缩内核
http://www.jsqmd.com/news/334683/

相关文章:

  • 开题报告反复被打回?虎贲等考 AI 让研究 “落地可行”,评审秒点头
  • 2026年郑州混合机厂家最新推荐:双锥、干粉、粉末、三维、预拌粉、粉体、固体饮料混合机、郑州华德福筑牢工业混合品质新基准 - 海棠依旧大
  • 2026年郑州混合生产线厂家最新推荐:粉末、双锥、干粉、预拌粉、添加剂、粉体混合生产线、聚焦企业服务品质与产品竞争力深度剖析 - 海棠依旧大
  • C++课后习题训练记录Day89
  • 多工况车速数据集训练LSTM神经网络用于车速预测,输出未来多个时间步车速,MATLAB代码
  • 联机手写签名识别技术:通过深度学习和动态行为分析,为银行信贷业务提供高安全性身份认证方案
  • 从概念到实战:达普韦伯DApp开发案例,助力企业构建可信数据空间
  • 投稿核心期刊总被拒?虎贲等考 AI:用 “学术合规 + 智能赋能” 解锁见刊密码
  • 写论文软件哪个好?100 + 跨专业实测:虎贲等考 AI 凭 “全流程合规 + 硬核支撑” 夺冠
  • <span class=“js_title_inner“>从激光雷达到“手眼协同”:速腾聚创在光谷AI峰会详解如何拥抱物理AI浪潮</span>
  • 9 款 AI 写论文哪个好?深度实测后:虎贲等考 AI 凭 “真文献 + 实数据” 封神!
  • UG NX 对象信息(查询)
  • 数学导数学习教案
  • 虎贲等考 AI:破解 “查重红 + AI 痕” 双困局,学术优化不靠 “文字魔术” 靠逻辑
  • 蓝桥杯JAVA--启蒙之路(十)class版本 模块
  • 拆开“超节点”的伪装:没有内存统一编址,仍是服务器堆叠
  • 【毕业设计】基于ssm的房屋中介公司网站的设计与实现(源码+文档+远程调试,全bao定制等)
  • Rockylinux8 利用rpmbuild把nginx-module-vts模块编译进nginx/1.22.1
  • TDSQL
  • lsblk -a磁盘上的新空间如何扩容加到磁盘上
  • Flutter for OpenHarmony 渐变色生成器:从 HSL 调色到代码一键复制的完整实践
  • 数学式子 - Xue-Zhoujun
  • Nginx源代码学习:为什么Nginx能处理百万并发?从112行源码看延迟事件队列的精妙设计
  • 谁在摧毁中国的企业软件产业?白嫖,开源,外包,招标,数科,AI...
  • 基于神经网络的复杂系统推理模型优化
  • lsblk是什么linux命令
  • 【Embedded Development】【USART】USART通信协议的时序学习过程记录 - 指南
  • 躲藏【牛客tracker 每日一题】
  • 【金融项目实战】4_金融项目 _测试流程
  • <span class=“js_title_inner“>2亿新订单、年度总额近5亿:中国仓储机器人巨头在东欧疯狂掘金!</span>