一、Linux 系统移植到 i.MX6ULL 平台的核心组成

1. 四大核心组件

  1. u-boot作用:为加载内核做准备的引导程序核心功能:

    • 初始化硬件
    • 读取内核到 DDR 中
    • 加载内核
  2. zImage作用:Linux 系统内核镜像(压缩格式)核心功能:

    • 内存管理
    • 多任务管理
    • 进程任务通信
    • 网络协议栈
    • 文件系统管理
  3. dtb(设备树二进制文件)作用:硬件平台的资源信息核心功能:描述板级硬件资源(GPIO、时钟、外设等),实现内核与硬件解耦

  4. rootfs(根文件系统)作用:Linux 系统的根文件系统核心功能:存放系统命令、库文件、配置文件、应用程序等,是系统运行的基础

二、Linux 系统完整启动流程(4 大阶段)

阶段 1:BootROM 阶段(芯片上电后执行,芯片固化代码)

  1. 设置为 SD 卡启动模式
  2. 芯片上电
  3. 执行 0x0 地址的代码
  4. 使用 i.MX6ULL 芯片内部的 96K BootRAM(也会使用芯片内部 128K SRAM 空间)
  5. 确认启动方式为 SD 卡启动
  6. 从 SD 卡中查找 uboot.imx 文件(由 uboot.bin + DCD 数据头组成)
  7. 从 DCD 数据头中获取时钟配置、DDR 配置信息,完成 DDR 初始化
  8. 将 uboot.bin 拷贝到 DDR 中
  9. 跳转执行 uboot.bin,进入 u-boot 阶段

阶段 2:u-boot 阶段

  1. 重定位异常向量表
  2. 切换工作模式
  3. 关闭 MMU、DCache、看门狗
  4. 初始化串口、网口及相关外设
  5. 将 u-boot 代码搬运到 DDR 高地址(重定位)
  6. 进入用户交互阶段
  7. 倒计时等待用户输入 Enter 键
  8. 如果用户不输入 Enter,执行 bootcmd 启动命令
  9. 查找内核和设备树(网络启动示例:tftp 80800000 zImage; tftp 83000000 dtb; 执行 bootz 命令)
  10. 将 bootargs 写入到设备树 chosen 节点中
  11. 向内核传参:R0(固定值)、R1(machine ID)、R2(设备树的地址)

阶段 3:内核阶段

  1. 解析设备树文件
  2. 启动内核,完成核心子系统初始化:
    • 内存管理
    • 多任务管理
    • 进程间通信
    • 网络通信
    • 文件系统管理
  3. 根据设备树中的 chosen 节点挂载文件系统
  4. 支持通过 nfs 协议网络挂载根文件系统

阶段 4:文件系统阶段

  1. 内核执行 init/initrc(或 /sbin/init)
  2. 加载 /etc/inittab 文件,设置开机执行脚本、关机执行脚本等
  3. 执行 /etc/init.d/rcS,设置环境变量、挂载文件系统
  4. 执行 /etc/fstab,挂载 sys、proc 等虚拟文件系统
  5. 通过 fork+exec 启动终端
  6. 终端启动 fork+exec 启动 shell
  7. shell 执行用户输入,通过 fork+exec 运行用户程序
Logo

openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构

更多推荐