驱动程序阅读流程

1. 找入口与匹配机制

1.1 找 module_init 或底层宏

1.2 找 of_match_table

2. 精读 probe 函数

2.1 看资源获取

寻找时钟、引脚、电源、中断线)。这部分直接对应设备树里的硬件描述。

2.2 看框架注册

寻找带有 register 字眼的函数。比如 v4l2_async_register_subdev、input_register_device、misc_register 等。
目的:弄清楚这个驱动把自己给了内核的哪个子系统。这决定了应用层以后会在 /dev/ 下看到什么节点。

3. 翻阅核心 Ops 结构体

当 probe 成功后,硬件就静静躺在那里等应用层来调用了。驱动能干什么事,全写在它的“菜单”里。

3.1 寻找类似 xxx_ops 的结构体

3.2 看里面挂载了哪些回调函数

  • Open/Release: 打开或关闭设备时做什么初始化?
  • Read/Write: 数据是怎么从内核态拷到用户态的?
  • Ioctl: 支持哪些私有的配置命令?(比如设置分辨率、设置波特率)。
  • 目的: 这是驱动工程师日常修改业务逻辑最频繁的地方。应用层调用的 open()、ioctl(),最终都会通过内核 VFS 层精准落到这里的函数上。

4. 中断处理 ISR

如果这个硬件会主动给 CPU 发信号,就必须看中断。

4.1 在 probe 函数中搜索 request_irq 或 devm_request_threaded_irq,看看它注册了哪个中断处理函数

4.2 跳到该 ISR 函数,看它发生了什么

5. 看remove / exit 函数

5.1 看看 remove 函数里是怎么倒序释放 probe 里申请的资源的。

5.2 关闭时钟、释放 GPIO、注销设备节点。

posted @ 2026-05-04 22:59  r5ett  阅读(20)  评论(0)    收藏  举报