60 秒回答模板

probe 成功只能说明驱动和设备匹配上了,并且 probe 里返回了 0;它不等于硬件所有功能都正常。设备仍异常时要按层次排查:先看设备树和板级资源是否正确,比如 reg 地址、中断号、pinctrl、clock、regulator、reset-gpio、DMA、bus 频率;再看 probe 里是否真的读过 chip id、初始化寄存器是否按手册顺序、复位和延时是否满足;然后看运行期路径,包括中断是否触发、状态寄存器、数据寄存器、错误码、并发锁和 power management。还要用示波器、逻辑分析仪、dmesg、寄存器 dump、sysfs/debugfs 分层取证。面试里关键一句是:probe 成功是枚举和初始化入口成功,不是功能验收成功,排查要从硬件资源、总线通信、初始化序列和运行期事件逐层缩小。

考点 probe 不等于验收
难度 真实面经题
回答目标 证明自己能把驱动成功绑定和设备功能正确区分开,并建立可执行排障路径。

深入解析

01

先定义 probe 成功的含义

probe 返回 0 代表驱动绑定设备,并且当前代码认为初始化完成。若 probe 本身没有充分验证硬件,例如没读 ID 或没检查寄存器返回值,成功就更不能说明设备可用。

02

板级资源最容易错

设备树地址、中断触发类型、引脚复用、电源、时钟、复位脚、总线速率和片选都可能让 probe 过了但功能异常。比如 ID 可读但中断脚配错,运行期就没有事件。

03

初始化序列要对手册

很多器件需要固定上电延时、复位时序、模式配置、校准或清状态位。probe 成功但漏写关键寄存器,设备可能能响应却输出错误数据。

04

运行期还要看状态机

异常可能来自中断处理、DMA、缓冲区、并发锁、runtime suspend、错误恢复或用户态配置。要通过状态寄存器、日志、计数器和波形把问题定位到具体层。

易错点

  • 把 probe 成功当成硬件正常,停止继续分层验证。
  • 只查驱动 C 代码,不核对设备树和实际板级连线。
  • 没有读 chip id 或检查寄存器返回值,probe 只是形式成功。
  • 排查运行期异常时不看中断计数、状态寄存器和波形证据。

面试官追问

probe 里应该做多深的硬件验证?

至少验证关键资源申请、供电复位、基本通信和芯片 ID;复杂功能可以延后,但错误要有清晰日志和返回码。

如果 probe 成功但中断不来,优先查什么?

先查设备树中断号和触发类型、pinctrl、硬件连线、设备是否已使能中断位,再看 /proc/interrupts 计数和示波器波形。

如果面试官让你现场排查,你会先看哪些证据?

我会先看 dmesg 和返回码,再查 /sys 下设备、驱动和资源状态,必要时加 trace/ftrace 或最小日志,先证明问题出在设备生成、匹配、资源获取、回调路径还是用户态交互。