驱动迁移实战 · 目录
📚 30 章节
从字符到杂项
1
字符设备驱动基础回顾
file_operations · 主次设备号 · cdev_init/add
➔
2
杂项设备驱动核心概念
miscdevice · misc_register/deregister
➔
3
字符设备 vs 杂项设备
注册方式 · 设备号 · 场景分析
➔
4
迁移实战准备
源码分析 · 功能清单 · 目标定义
➔
5
第一步:替换结构体
从cdev到miscdevice
➔
6
第二步:替换注册函数
cdev_init/add → misc_register
➔
7
第三步:设备号处理
alloc_chrdev_region → 自动分配
➔
8
第四步:设备类与节点
class_create/device_create → misc自动创建
➔
9
第五步:文件操作接口迁移
保持open/read/write/ioctl
➔
10
第六步:注销函数替换
cdev_del/unregister → misc_deregister
➔
11
完整迁移示例
LED控制驱动迁移到杂项设备
➔
12
迁移后验证
设备节点检查 · 功能测试 · dmesg
➔
13
常见问题1:设备节点不自动创建
misc设备的udev规则
➔
14
常见问题2:主设备号冲突
杂项设备主设备号固定为10
➔
15
常见问题3:权限问题
杂项设备默认权限设置
➔
16
常见问题4:多个设备实例
杂项设备不支持多实例解决方案
➔
17
性能对比:中断处理
字符 vs 杂项设备表现
➔
18
内存管理差异
mmap实现对比
➔
19
ioctl接口迁移
unlocked_ioctl → compat_ioctl
➔
20
poll/select支持
两种设备模型poll接口实现
➔
21
设备树兼容性
杂项设备与设备树配合
➔
22
多线程安全
迁移中锁机制调整策略
➔
23
调试技巧
printk · ftrace跟踪设备调用
➔
24
测试用例设计
单元测试 · 压力测试 · 边界测试
➔
25
内核模块打包
Makefile修改 · 模块依赖处理
➔
26
内核版本兼容性
不同版本杂项设备API变化
➔
27
项目案例1:GPIO按键驱动
字符→杂项迁移
➔
28
项目案例2:虚拟串口驱动
迁移实战
➔
29
项目案例3:简单字符设备
迁移到杂项设备
➔
30
总结与最佳实践
迁移决策树 · 陷阱 · 性能优化
➔