硬件有电、内核也启动了,应用却打不开设备。这种题比背命令选项更能体现嵌入式Linux调试能力:要沿着“内核识别—驱动匹配—设备节点—用户访问”层层定位。
01 / 先确定故障在哪一层
先用dmesg、journalctl -k(若系统支持)查看内核日志,确认总线枚举、设备探测、资源申请是否报错。不要把“应用打不开”直接归因于权限。
对于设备树匹配型平台,核对设备树节点status、compatible、寄存器地址、中断和时钟复位资源是否与驱动一致。
确认内核配置或模块加载状态后,再看/dev下是否有设备节点,字符设备的主次设备号是否正确。

02 / 最后检查应用访问
检查节点权限、运行用户和应用调用的设备名;使用strace(若可用)追踪open/ioctl/read失败原因。
返回ENOENT往往提示路径或节点不存在;EACCES关联访问权限;ENODEV等则更倾向设备/驱动状态,具体仍须结合调用栈与内核日志。
03 / 面试答法
“我先看dmesg判断设备和驱动有没有成功匹配,再看设备树、模块状态和/dev节点,最后用strace及返回错误码定位用户态访问。每一步都对应可验证证据,不会直接chmod 777掩盖问题。”
04 / 追问:dmesg没有报错就表示驱动没问题吗?
不一定。驱动可能根本没有执行probe、日志级别不足或应用访问的不是预期节点,需要核对注册路径、/sys信息与实际设备树。
知识点:嵌入式Linux面试题、Linux驱动调试

扫码关注






























