🚀 驱动加载·启动
30章
🎒 风格
1
启动流程概述:从CPU复位到操作系统内核启动的完整链路,理解BootROM、Bootloader、内核启动三个阶段。
2
BootROM原理:芯片上电后第一段代码的执行环境,硬件初始化与启动介质选择。
3
一级Bootloader(SPL):SPL的作用、代码规模限制、DDR初始化与跳转逻辑。
4
二级Bootloader(U-Boot):U-Boot的启动流程、命令行交互、环境变量与启动参数传递。
5
设备树(Device Tree)基础:设备树的起源、语法结构、dts/dtb/dtsi文件关系。
6
设备树绑定与匹配:compatible属性、驱动与设备的匹配过程、of_match_table。
7
内核启动之setup_arch:架构相关初始化,内存布局、CPU类型检测、设备树解析。
8
内核启动之start_kernel:内核启动的C语言入口,调度器、内存管理、中断系统初始化。
9
驱动模型基础:Linux设备驱动模型(kobject、kset、bus、device、driver)的关系。
10
总线注册与设备枚举:platform总线、I2C总线、SPI总线的注册流程与设备扫描。
11
驱动注册与probe调用:driver_register流程,probe函数的触发时机与执行顺序。
12
设备初始化顺序:early_initcall、core_initcall、postcore_initcall等优先级机制。
13
中断控制器初始化:GIC/APIC的初始化流程,中断描述符的分配与映射。
14
时钟与定时器初始化:clk框架、timer驱动注册、jiffies与高精度定时器。
15
GPIO子系统初始化:gpiolib的初始化、gpio_chip注册、gpio号分配。
16
DMA引擎初始化:dmaengine框架、dma_device注册、通道分配与传输请求。
17
块设备驱动初始化:块设备层(block layer)初始化、gendisk创建、请求队列处理。
18
网络设备驱动初始化:net_device结构体、NAPI机制、MAC/PHY驱动绑定。
19
显示与帧缓冲初始化:fbmem、drm框架初始化、显存映射与显示模式设置。
20
输入子系统初始化:input核心初始化、input_handler注册、事件分发机制。
21
USB子系统初始化:USB核心初始化、HCD注册、设备枚举与驱动绑定。
22
PCI子系统初始化:PCI总线扫描、配置空间读取、BAR分配与驱动匹配。
23
MMC/SD存储初始化:MMC子系统初始化、host注册、卡检测与分区扫描。
24
RTC与电源管理初始化:RTC框架、alarm设置、suspend/resume流程。
25
设备驱动热插拔机制:uevent、udev/mdev、设备添加与移除通知。
26
固件加载机制:request_firmware、固件缓存、直接内存加载(DMA)。
27
设备电源管理:runtime PM、系统睡眠流程、设备挂起与恢复顺序。
28
调试与日志:printk、dev_dbg、动态调试、initcall_debug参数。
29
常见启动失败分析:内核panic、驱动probe失败、设备树错误、时序问题。
30
实战:从零编写一个简单的platform驱动并验证其初始化流程。