嵌入式Linux内核启动流程全解析
📚 共计 30 章节
第01章
启动流程概览
从按下电源键到控制台登录的完整旅程。
⚡ 总览
🔍 全局
第02章
BootROM与一级引导
芯片内部固化代码如何加载SPL。
🔧 硬件
📦 固化
第03章
SPL (Secondary Program Loader)
初始化DDR、时钟、串口。
⚙️ 低级
⏱️ 时钟
第04章
U-Boot编译与配置
.config、make menuconfig、设备树编译。
🛠️ 构建
📐 配置
第05章
U-Boot启动流程
start.S、board_init_f、board_init_r。
🚀 引导
🧩 汇编
第06章
U-Boot命令行与环境变量
bootcmd、bootargs、网络启动。
💻 交互
🌐 网络
第07章
设备树 (Device Tree) 基础
dts、dtsi、dtb文件格式。
🌳 硬件
📄 描述
第08章
设备树在启动中的作用
传递给内核的硬件描述信息。
📨 传递
🧬 匹配
第09章
内核镜像格式
zImage、uImage、Image、vmlinux的区别。
📦 打包
🔍 对比
第10章
内核解压
自解压代码 (head.S) 如何将内核放到正确位置。
🗜️ 解压
🧠 汇编
第11章
内核入口点
stext/start_kernel之前的汇编准备。
🚪 入口
⚡ 初始化
第12章
start_kernel函数
内核C语言世界的起点。
🌐 C入口
🏁 核心
第13章
trap_init与中断向量表
异常处理的初始化。
⚠️ 异常
🔢 向量
第14章
mm_init与内存管理
伙伴系统、slab分配器的建立。
🧠 内存
📊 分配
第15章
sched_init与进程调度
0号进程 (idle) 与1号进程 (init)。
📋 调度
👶 进程
第16章
vfs_caches_init与虚拟文件系统
根文件系统的挂载准备。
📁 VFS
🔗 挂载
第17章
init进程的诞生
从kernel_init到用户空间的第一个进程。
👤 用户
🚀 首进程
第18章
根文件系统挂载
root=参数解析、initramfs与块设备根fs。
📂 根fs
⚙️ 参数
第19章
init程序执行
/sbin/init、/etc/inittab与systemd的启动。
🔧 初始化
⚡ systemd
第20章
控制台与getty
用户登录界面的出现。
🖥️ 终端
🔐 登录
第21章
内核模块加载
insmod、modprobe与模块依赖解析。
🧩 模块
📦 依赖
第22章
设备驱动模型
platform总线、probe顺序与设备匹配。
🔌 驱动
🔗 总线
第23章
中断子系统
从硬件中断到request_irq的完整链路。
⚡ 中断
🔁 处理
第24章
时钟与定时器
clk框架、timer_list与高精度定时器。
⏰ 时钟
⏱️ 定时
第25章
DMA与内存映射
dma_alloc_coherent、流式映射与一致性映射。
📡 DMA
🗺️ 映射
第26章
电源管理
suspend/resume流程、cpuidle与cpufreq。
🔋 电源
💤 休眠
第27章
调试内核启动
earlyprintk、initcall_debug、JTAG。
🐞 调试
🖨️ 打印
第28章
启动时间优化
测量各阶段耗时、裁剪内核、并行初始化。
⏳ 优化
⚡ 加速
第29章
安全启动 (Secure Boot)
签名验证、信任链与AB分区。
🔐 安全
🔏 签名
第30章
实战案例:从零移植Linux到ARM
基于QEMU模拟的ARM开发板完整移植。
🛠️ 实战
🧪 QEMU