60 秒回答模板

我会按从硬件到用户态的顺序做。第一步确认原理图和板级条件:供电、复位、时钟、地址脚、上拉、电平、总线编号和中断脚是否正确,用示波器或逻辑分析仪确认总线有波形。第二步写设备树:打开对应控制器节点,配置 pinctrl、clock-frequency,在子节点里写 compatible、reg 地址、interrupt、reset-gpios、vin-supply 等资源。第三步驱动匹配:在 i2c_driver 的 of_match_table 里匹配 compatible,probe 里申请 regulator/gpio/irq,复位设备,读取 chip id,初始化寄存器,必要时用 regmap 封装访问。第四步接入合适子系统,比如光照传感器常接 IIO,也可能暴露 misc/字符设备或 sysfs。最后用户态用标准节点读取,并配合 dmesg、i2cdetect、寄存器 dump 和中断计数验证。

考点 从板到应用
难度 真实面经题
回答目标 证明自己能独立完成传感器从板级资源到用户态可用的 bring-up。

深入解析

01

硬件先闭环

新板 bring-up 不能直接写驱动。先核对电源时序、复位脚、地址脚、上拉阻值、总线电压和中断连接。若物理层不通,软件读写只会得到 NACK 或超时。

02

设备树描述板级事实

控制器节点负责总线状态、引脚复用和时钟;子设备节点描述从设备地址、兼容字符串、供电、复位、中断和安装方向等资源。驱动不应该硬编码板级 GPIO 和地址。

03

probe 做最小可信初始化

匹配后 probe 申请资源、打开电源、释放复位、读取芯片 ID,再写初始化寄存器。读取 ID 是重要分界线:它证明总线地址、电源和基本协议至少可用。

04

接入用户态要选子系统

传感器通常接 IIO 或 input 等标准框架,让用户态通过统一设备节点、sysfs 或事件接口访问。只有特殊设备才用私有字符设备,避免把内核已有框架绕开。

05

验证要有分层证据

总线波形证明物理层,dmesg 证明驱动绑定,寄存器读写证明设备响应,中断计数证明事件路径,用户态读数证明完整链路可用。

易错点

  • 跳过原理图和波形确认,直接怀疑驱动逻辑。
  • 在驱动里硬编码地址和 GPIO,不通过硬件描述传资源。
  • 只说注册 i2c_driver,不说明 chip id、供电、复位和中断验证。
  • 用户态接口随便做私有节点,忽略已有传感器子系统。

面试官追问

为什么 probe 里要读 chip id?

它能同时验证设备地址、供电、复位、总线时序和基本寄存器访问,是区分硬件不通和后续初始化错误的关键证据。

i2cdetect 能扫到设备就说明驱动没问题吗?

不能。它只说明地址层面可能有响应,不能证明寄存器协议、初始化、中断和用户态上报都正确。

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

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