一、课程介绍:
本课程详解Linux内核编程的并发、同步、中断、定时器、内存、DMA和cache等问题,结合实例讲解Linux驱动各种设备驱动架构、I/O模型以及Linux的移植、设备树代码的编写等。
课程讲解语言通俗,讲师授课风格生动趣味性强,全程“说人话”不死板,力求以生活化地表达,带领学员将所学内容掌握并熟练应用到工作当中。
本课程将赠送树莓派ARM64电路板一套。
二、研修时间:2026年3月20 – 21日 (两天授课)
三、研修地点:北京
四、培训对象:Linux开发者;使用Linux,在Linux上从事开发工作的工程师。
五、课程形式:
为保证内容的时效性,本课程的讲解和实验基于最新的Linux 6.13内核。
课程讲授和学员动手实验并重,课程设置多个上机实验。
通过讲解和讨论来学习概念、方法和原理。为加深和促进了解,学员要单独或分组完成课堂练习。
六、课程大纲
第一章内核编程
热身,熟悉树莓派板卡
1、板卡介绍和使用
2、Bootloader、kernel、文件系统构成
第1节 内核编程主要API深入剖析
1、同步与并发(atomic, spinlock,mutex,completion深入理解)
2、等待队列
3、内核延时
4、内存申请和释放
5、用作DMA的内存
6、内存屏障与寄存器访问
第2节 定时器
1、内核定时器tick
2、tickless
3、高精度定时器hrtimer
第3节 中断
1、中断顶底半部
2、软中断
3、tasklet
4、工作队列
5、threaded_irq
6、多核中断affinity及软中断负载均衡
第4节 Linux内核模块
1、内核模块init和exit
2、输入参数
3、输出符号
4、模块的license与GPL
第5节 Linux内核的调试
1、printk
2、Oops和panic
3、initcall_debug
4、电源管理suspend/resume debug
5、earlyprintk与low level debug
6、proc和sys
7、soft和hard lockup
8、内核的源码级调试
9、内核模块的源码级调试
10、ftrace
第二章 设备驱动
第1节 Linux设备驱动模型
1、Linux设备分类
2、Sys,总线、设备、驱动和class
3、热插拔
4、电源管理
5、udev
第2节 设备驱动并发控制与I/O模型
1、Linux字符设备驱动结构
2、Linux设备驱动中的并发控制
3、Linux设备驱动中的阻塞与非阻塞I/O
4、Linux多路复用I/O
5、Signal IO与AIO
6、用户空间I/O与多线程设计原则
第3节 Linux复杂设备驱动
1、设备驱动分层框架
2、设备驱动的面向对象设计
3、platform驱动
4、基于I2C/SPI/USB等总线的驱动
5、块设备驱动与块I/O调度
6、网络设备驱动
第三章 Linux移植和BSP构建
第1节 将Linux移植到一个新的SoC或电路板
1、OS timer
2、caches
3、early_printk
4、clk tree
5、GPIO
6 pinmux
7、RQ chip
8、DMA
9、社区维护
第2节 设备树(Device Tree)
1、用一个假设的简单电路板从头到尾构建一个dts文件
2、dts编译为dtb,与dtb反编译为dts
3、machine级的匹配
4、driver和device级的匹配
5、基地址、中断、gpio、时钟、reset、pinmux等常规属性
6、dts节点自定义属性
7、启动过程中dtb的读取与展开
8、i2c, spi子节点的展开
9、dts的分级与dtsi
10、dt binding文档
第3节 ACPI
1、非device tree情况的设备枚举
七、主讲专家:
宋老师:Linux布道者,《Linux设备驱动开发详解》作者,曾为思科、阿尔卡特、朗讯、四方、意法半导体、富士施乐、代傲电子、飞利浦、南瑞、宝信、美国国家仪器、ABB、中国建设银行等知名企业提供嵌入式Linux企业培训和技术服务,受到企业广泛好评。活跃于 Linux社区,Linux内核SCHED_CLUSTER、per-numa CMA、ARM64 BATCHED_UNMAP_TLB_FLUSH、多个mTHP关键feature的作者,累计给Linux主线贡献400+个补丁。已给Linux官方内核贡献了逾3万行代码,是给Linux官方内核贡献代码最多的华人之一。