01
PX4驱动框架概述
了解PX4操作系统的驱动模型,理解uORB消息总线在驱动中的作用,掌握设备注册与文件节点创建的基本流程。
uORB设备树
02
硬件接口基础
GPIO、I2C、SPI、UART等外设接口在PX4中的抽象层,以及如何通过shell命令进行硬件探测。
GPIOI2CSPI
03
编写第一个字符设备驱动
从零开始创建一个简单的虚拟传感器驱动,实现open、read、ioctl等基本操作,并注册到PX4设备树。
字符设备ioctl
04
uORB消息发布与订阅
深入理解uORB的工作机制,学习如何在驱动中发布传感器数据,以及如何被其他模块(如EKF)订阅。
uORBEKF
05
I2C传感器驱动实战
以BMP280气压计为例,讲解I2C时序、寄存器读写、驱动初始化流程,以及如何将数据发布到uORB。
BMP280I2C
06
SPI传感器驱动实战
以ICM-20602 IMU为例,讲解SPI片选、时钟极性、DMA传输,以及如何实现高频数据采集。
ICM-20602DMA
07
UART外设驱动实战
以GPS模块为例,讲解串口配置、NMEA协议解析、DMA接收环形缓冲区设计。
GPSNMEA
08
GPIO中断与PWM输出
讲解PX4中GPIO中断的注册与处理,以及如何用PWM驱动舵机或电调。
中断PWM
09
ADC驱动与电池监测
实现一个基于ADC的电压监测驱动,将电池电量信息发布到uORB。
ADC电池
10
DMA与高性能数据采集
讲解DMA在PX4驱动中的应用,如何通过DMA实现无CPU干预的传感器数据搬运。
DMA高性能
11
设备树与板级支持包
理解PX4的board目录结构,学习如何为新硬件编写设备树文件,配置引脚复用。
设备树BSP
12
驱动中的同步与互斥
信号量、互斥锁、等待队列在驱动中的应用,避免竞态条件。
互斥信号量
13
驱动中的内存管理
kmalloc、dma_alloc_coherent的使用,以及如何避免内存泄漏。
kmallocDMA
14
驱动调试技巧
使用printk、dev_dbg、ftrace、示波器、逻辑分析仪进行驱动调试。
调试ftrace
15
PX4启动脚本与驱动自动加载
理解rcS启动脚本,学习如何让驱动在系统启动时自动加载。
rcS自动加载
16
参数系统与驱动配置
使用param_get/param_set在驱动中读取和写入用户参数。
参数param
17
驱动中的定时器与高精度延时
使用hrtimer实现微秒级精度的定时任务。
hrtimer延时
18
多传感器融合驱动设计
设计一个虚拟的“融合传感器”,同时读取IMU和气压计数据,进行时间戳对齐后发布。
融合时间戳
19
驱动中的错误处理与恢复机制
实现看门狗、超时重试、故障上报等功能。
看门狗容错
20
PX4的work_queue机制
理解work_queue与任务队列,学习如何将耗时操作放到work_queue中执行。
work_queue异步
21
驱动与Flight Stack的数据流
从传感器驱动 -> uORB -> 姿态估计 -> 位置估计 -> 控制器的完整数据链路分析。
Flight StackEKF
22
自定义uORB消息
定义一个新的uORB消息类型,用于传输自定义传感器数据。
uORB自定义
23
驱动中的电源管理
实现suspend/resume回调,降低待机功耗。
电源管理低功耗
24
驱动热插拔与动态设备管理
实现USB设备的动态识别与驱动绑定。
热插拔USB
25
PX4的shell命令扩展
为驱动添加自定义shell命令,方便调试和配置。
shell调试
26
驱动单元测试框架
使用cmake + ctest为驱动编写单元测试,模拟硬件寄存器。
单元测试ctest
27
驱动性能优化
减少中断频率、批量数据传输、缓存一致性维护。
性能缓存
28
驱动安全与健壮性
输入校验、指针安全检查、异常捕获。
安全健壮性
29
实战项目:激光测距仪驱动
完整走一遍硬件接口、驱动编写、uORB发布、参数配置、调试的流程。
激光测距实战
30
课程总结与进阶路线
回顾PX4驱动开发的核心知识点,推荐进阶学习资源(如RTOS、Linux驱动、FPGA)。
总结进阶