- 什么是字符设备驱动
- 课程目标与路径
- Ubuntu+QEMU+Busybox
- 内核下载编译
- 模块概念
- Hello World模块
- Makefile编译
- insmod/rmmod
- lsmod/modinfo
- module_param
- EXPORT_SYMBOL
- 多文件模块
- 设备号
- /dev文件
- file_operations
- 交互流程
- register_chrdev_region
- cdev_init/add
- open/release
- 测试App
- 手动节点弊端
- udev/mdev
- class_create
- device_create
- read/write实现
- copy_to_user
- copy_from_user
- 注意事项
- ioctl概念
- unlocked_ioctl
- _IO/_IOR/_IOW
- 命令码定义
- 并发产生原因
- atomic_t
- 自旋锁spinlock
- 信号量semaphore
- 互斥体mutex
- 读写锁rwlock
- 锁选择
- select/poll/epoll
- poll函数实现
- POLLIN/POLLOUT
- 信号驱动IO
- fasync_struct
- fasync函数
- fcntl设置
- 中断子系统
- request_irq
- 上半部
- IRQF_SHARED
- 下半部: tasklet
- workqueue
- threaded IRQ
- 共享中断
- timer_list
- 超时回调
- 动态/静态定时器
- 定时轮询
- kthread_create/run
- 同步与停止
- 后台任务处理
- kmalloc/vmalloc/kzalloc
- GFP标志
- 内存泄漏防范
- IO内存概念
- ioremap
- ioread/iowrite
- 操作硬件寄存器
- Platform总线
- platform_device
- platform_driver
- 匹配过程
- 设备树描述
- of_match_table
- platform_get_resource
- 概念与语法
- 节点属性
- compatible
- reg与地址编码
- printk日志级别
- dynamic_debug
- ftrace跟踪
- kgdb调试
- procfs创建
- sysfs属性文件
- kobject/attribute
- 导出驱动信息
- 系统休眠唤醒
- suspend/resume
- runtime PM
- 自动休眠唤醒
- DMA概念原理
- dma_alloc_coherent
- dma_map_single
- DMA引擎
- 防抖处理
- 阻塞读+ poll
- 测试App
- 课程总结与进阶