韦东山 Linux 设备树视频课程:驱动开发核心技能详解
在嵌入式 Linux 开发中,设备树(Device Tree)是连接硬件描述与软件驱动的关键技术。然而,许多开发者仅停留在“会写、会用”的浅层阶段,面对内核源码解析、DTB 格式转换或移植报错时往往无从下手。韦东山老师的这套体系课,旨在帮助学习者打破这一瓶颈,从应用实践深入到底层机制,构建完整的知识闭环。
课程定位与学习门槛
本课程适合具备基础 C 语言编程能力、熟悉 Linux 字符设备驱动基本流程(如 open/read/write/ioctl)的学习者。如果您已经接触过 Linux 驱动开发,但对设备树的来历、编译过程及内核解析机制感到模糊,这门课将是您进阶的必经之路。课程无需深厚的内核底层功底,但建议对 Linux 整体架构有初步认知,以便更好地理解后续的内核源码分析。
核心内容与技术深度
课程采用对比教学法,逻辑清晰且层层递进。
首先,课程从字符设备驱动的传统写法入手,详细讲解了平台设备驱动(platform device)的注册方式、总线设备驱动模型以及传统的资源定义方法。通过横向对比,学员能直观感受到传统方式中硬件信息硬编码在 C 语言中的繁琐与弊端,从而理解设备树引入的必要性与优势。
其次,课程深入设备树规范层面,系统讲解 DTS(Device Tree Source)的语法结构,包括节点层级、属性定义、兼容字符串(compatible)的作用等。同时,重点剖析了 DTS 编译生成 DTB(Device Tree Blob)二进制文件的过程,解析 DTB 的数据布局,让学员明白那些简洁的文本是如何转化为内核可直接读取的二进制数据的。
更为难得的是,课程并未止步于应用层,而是深入内核源码,从启动初期的 head.S 汇编代码开始,追踪内核如何初始化并处理设备树内存映射;接着分析内核如何根据 machine_desc 选择并解析设备树信息,直至最终填充 platform_device 数据结构。这种从汇编到 C、从硬件抽象到内核逻辑的逐层剖析,极大地加深了学员对 Linux 启动过程及设备树处理机制的理解。
学习路径与产出价值
建议学习者按照课程目录顺序依次学习:先通过 1-1 至 1-6 节掌握设备树驱动的编写与测试,建立直观认识;再通过 2-1 至 2-2 节夯实 DTS/DTB 规范基础;最后通过 3-1 及后续章节深入内核机制。学完本课程后,您将能够独立完成基于设备树的字符设备驱动开发,理解设备树的底层工作原理,具备排查设备树相关驱动问题的能力,并为后续学习更复杂的驱动程序(如中断、DMA、电源管理)奠定坚实基础。本课程是 Linux 驱动工程师从入门走向精通的重要里程碑,值得系统学习与反复研读。
课程目录
1-1 [设备树的引入与体验] 字符设备驱动程序的三种写法 (32:24) 1-2 [设备树的引入与体验] 字符设备驱动程序的传统写法 (27:59) 1-3 [设备树的引入与体验] 字符设备驱动的编译测试 (17:47) 1-4 [设备树的引入与体验] 总线设备驱动模型 (29:13) 1-5 [设备树的引入与体验] 使用设备树时对应的驱动编程 (35:26) 1-6 [设备树的引入与体验] 只想使用不想深入研究怎么办? (07:42) 2-1 [设备树的规范(dts和dtb)] DTS格式 (29:23) 2-2 [设备树的规范(dts和dtb)] DTB规范 (33:13) 3-1 [内核对设备树的处理] 从源头分析_内核head.S对dtb的简单处理 (13:08) 3-2 [内核对设备树的处理] 对设备树中平台信息的处理(选择machine_desc) (18:31) 3-3 [内核对设备树的处理] 对设备树中运行时配置信息的处理 (07:57) 3-4 [内核对设备树的处理] dtb转换为device_node(unflatten) (17:55) 3-5 [内核对设备树的处理] device_node转换为platform_device (24:40) 3-6 [内核对设备树的处理] 平台设备和平台驱动的匹配 (10:15) 3-7 [内核对设备树的处理] 内核中设备树的操作函数 (12:46) 3-8 [内核对设备树的处理] 在根文件系统中查看设备树 (10:04) 4-1 [u-boot对设备树的支持] 传递dtb给内核 (11:49) 4-2 [u-boot对设备树的支持] dtb的修改原理 (17:17) 4-3 [u-boot对设备树的支持] dtb的修改命令fdt移植 (34:56) 5-1 [中断系统中的设备树] 中断概念的引入与处理流程 (31:53) 5-2 [中断系统中的设备树] Linux对中断处理的框架及代码流程简述 (31:01) 5-3 [中断系统中的设备树] 中断号的演变与irq_domain (31:49) 5-4 [中断系统中的设备树] 示例_在S3C2440上使用设备树描述中断体验 (19:07) 5-5 [中断系统中的设备树] 示例_使用设备树描述按键中断 (25:11) 5-6 [中断系统中的设备树] 内核对设备树中断信息的处理过程 (27:40) 6-1 [实践操作] 使用设备树给DM9000网卡_触摸屏指定中断 (18:20) 6-2 [实践操作] 在设备树中时钟的简单使用 (14:35) 6-3 [实践操作] 在设备树中pinctrl的简单使用 (17:11) 6-4 [实践操作] 使用设备树给LCD指定各种参数 (18:46)





