真实面经题目 · 原创解析
一个 I2C 传感器在新板子上如何从设备树到驱动到用户态 bring up?
这题考新板传感器 bring-up 的全链路能力,回答要覆盖硬件确认、设备树描述、驱动匹配、寄存器验证和用户态接口。
真实面经题目 · 原创解析
这题考新板传感器 bring-up 的全链路能力,回答要覆盖硬件确认、设备树描述、驱动匹配、寄存器验证和用户态接口。
我会按从硬件到用户态的顺序做。第一步确认原理图和板级条件:供电、复位、时钟、地址脚、上拉、电平、总线编号和中断脚是否正确,用示波器或逻辑分析仪确认总线有波形。第二步写设备树:打开对应控制器节点,配置 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 不能直接写驱动。先核对电源时序、复位脚、地址脚、上拉阻值、总线电压和中断连接。若物理层不通,软件读写只会得到 NACK 或超时。
控制器节点负责总线状态、引脚复用和时钟;子设备节点描述从设备地址、兼容字符串、供电、复位、中断和安装方向等资源。驱动不应该硬编码板级 GPIO 和地址。
匹配后 probe 申请资源、打开电源、释放复位、读取芯片 ID,再写初始化寄存器。读取 ID 是重要分界线:它证明总线地址、电源和基本协议至少可用。
传感器通常接 IIO 或 input 等标准框架,让用户态通过统一设备节点、sysfs 或事件接口访问。只有特殊设备才用私有字符设备,避免把内核已有框架绕开。
总线波形证明物理层,dmesg 证明驱动绑定,寄存器读写证明设备响应,中断计数证明事件路径,用户态读数证明完整链路可用。
它能同时验证设备地址、供电、复位、总线时序和基本寄存器访问,是区分硬件不通和后续初始化错误的关键证据。
不能。它只说明地址层面可能有响应,不能证明寄存器协议、初始化、中断和用户态上报都正确。
我会先看 dmesg 和返回码,再查 /sys 下设备、驱动和资源状态,必要时加 trace/ftrace 或最小日志,先证明问题出在设备生成、匹配、资源获取、回调路径还是用户态交互。