真实面经题目 · 原创解析
驱动 probe 成功但设备仍异常,说明什么,如何排查?
这题考驱动 bring-up 排障思路,回答要说明 probe 成功只代表绑定和初始资源申请成功,不代表设备功能完全正确。
真实面经题目 · 原创解析
这题考驱动 bring-up 排障思路,回答要说明 probe 成功只代表绑定和初始资源申请成功,不代表设备功能完全正确。
probe 成功只能说明驱动和设备匹配上了,并且 probe 里返回了 0;它不等于硬件所有功能都正常。设备仍异常时要按层次排查:先看设备树和板级资源是否正确,比如 reg 地址、中断号、pinctrl、clock、regulator、reset-gpio、DMA、bus 频率;再看 probe 里是否真的读过 chip id、初始化寄存器是否按手册顺序、复位和延时是否满足;然后看运行期路径,包括中断是否触发、状态寄存器、数据寄存器、错误码、并发锁和 power management。还要用示波器、逻辑分析仪、dmesg、寄存器 dump、sysfs/debugfs 分层取证。面试里关键一句是:probe 成功是枚举和初始化入口成功,不是功能验收成功,排查要从硬件资源、总线通信、初始化序列和运行期事件逐层缩小。
probe 返回 0 代表驱动绑定设备,并且当前代码认为初始化完成。若 probe 本身没有充分验证硬件,例如没读 ID 或没检查寄存器返回值,成功就更不能说明设备可用。
设备树地址、中断触发类型、引脚复用、电源、时钟、复位脚、总线速率和片选都可能让 probe 过了但功能异常。比如 ID 可读但中断脚配错,运行期就没有事件。
很多器件需要固定上电延时、复位时序、模式配置、校准或清状态位。probe 成功但漏写关键寄存器,设备可能能响应却输出错误数据。
异常可能来自中断处理、DMA、缓冲区、并发锁、runtime suspend、错误恢复或用户态配置。要通过状态寄存器、日志、计数器和波形把问题定位到具体层。
至少验证关键资源申请、供电复位、基本通信和芯片 ID;复杂功能可以延后,但错误要有清晰日志和返回码。
先查设备树中断号和触发类型、pinctrl、硬件连线、设备是否已使能中断位,再看 /proc/interrupts 计数和示波器波形。
我会先看 dmesg 和返回码,再查 /sys 下设备、驱动和资源状态,必要时加 trace/ftrace 或最小日志,先证明问题出在设备生成、匹配、资源获取、回调路径还是用户态交互。