Linux内核驱动
·
一、Linux 系统移植到 i.MX6ULL 平台的核心组成
1. 四大核心组件
-
u-boot作用:为加载内核做准备的引导程序核心功能:
- 初始化硬件
- 读取内核到 DDR 中
- 加载内核
-
zImage作用:Linux 系统内核镜像(压缩格式)核心功能:
- 内存管理
- 多任务管理
- 进程任务通信
- 网络协议栈
- 文件系统管理
-
dtb(设备树二进制文件)作用:硬件平台的资源信息核心功能:描述板级硬件资源(GPIO、时钟、外设等),实现内核与硬件解耦
-
rootfs(根文件系统)作用:Linux 系统的根文件系统核心功能:存放系统命令、库文件、配置文件、应用程序等,是系统运行的基础
二、Linux 系统完整启动流程(4 大阶段)
阶段 1:BootROM 阶段(芯片上电后执行,芯片固化代码)
- 设置为 SD 卡启动模式
- 芯片上电
- 执行 0x0 地址的代码
- 使用 i.MX6ULL 芯片内部的 96K BootRAM(也会使用芯片内部 128K SRAM 空间)
- 确认启动方式为 SD 卡启动
- 从 SD 卡中查找 uboot.imx 文件(由 uboot.bin + DCD 数据头组成)
- 从 DCD 数据头中获取时钟配置、DDR 配置信息,完成 DDR 初始化
- 将 uboot.bin 拷贝到 DDR 中
- 跳转执行 uboot.bin,进入 u-boot 阶段
阶段 2:u-boot 阶段
- 重定位异常向量表
- 切换工作模式
- 关闭 MMU、DCache、看门狗
- 初始化串口、网口及相关外设
- 将 u-boot 代码搬运到 DDR 高地址(重定位)
- 进入用户交互阶段
- 倒计时等待用户输入 Enter 键
- 如果用户不输入 Enter,执行 bootcmd 启动命令
- 查找内核和设备树(网络启动示例:tftp 80800000 zImage; tftp 83000000 dtb; 执行 bootz 命令)
- 将 bootargs 写入到设备树 chosen 节点中
- 向内核传参:R0(固定值)、R1(machine ID)、R2(设备树的地址)
阶段 3:内核阶段
- 解析设备树文件
- 启动内核,完成核心子系统初始化:
- 内存管理
- 多任务管理
- 进程间通信
- 网络通信
- 文件系统管理
- 根据设备树中的 chosen 节点挂载文件系统
- 支持通过 nfs 协议网络挂载根文件系统
阶段 4:文件系统阶段
- 内核执行 init/initrc(或 /sbin/init)
- 加载 /etc/inittab 文件,设置开机执行脚本、关机执行脚本等
- 执行 /etc/init.d/rcS,设置环境变量、挂载文件系统
- 执行 /etc/fstab,挂载 sys、proc 等虚拟文件系统
- 通过 fork+exec 启动终端
- 终端启动 fork+exec 启动 shell
- shell 执行用户输入,通过 fork+exec 运行用户程序
openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构
更多推荐


所有评论(0)