真实面经题目 · 原创解析
platform driver 的 probe 没有执行,可能是什么原因?
这题考 Linux platform 驱动匹配排障,回答要先判断是否完成设备和驱动匹配,再检查设备树、模块、表项和资源依赖。
真实面经题目 · 原创解析
这题考 Linux platform 驱动匹配排障,回答要先判断是否完成设备和驱动匹配,再检查设备树、模块、表项和资源依赖。
probe 没执行要先拆成两类问题:模块还没被自动加载,和模块已经加载但设备驱动没有匹配。自动加载失败时查 MODULE_DEVICE_TABLE、modules.alias、udev/modprobe 和模块别名;手动 insmod 后仍不进 probe,则 MODULE_DEVICE_TABLE 不是主因,要优先查 platform_device 是否真的生成、设备树 status、板子实际 dtb、compatible 和 of_match_table 是否一致、platform_driver_register 是否执行,以及是否被 deferred probe 卡住。排查顺序是先看 dmesg 和 lsmod,再看 /sys/bus/platform/devices 与 drivers,反编译当前 dtb 确认节点,最后确认 match 表和 probe 返回值。
如果驱动模块根本没有自动加载,要查 MODULE_DEVICE_TABLE、modules.alias、udev/modprobe 和模块安装路径;如果已经手动 insmod 或内建进内核但 probe 不执行,重点就变成设备是否生成、驱动是否注册和 match 是否成功。
platform 绑定需要 platform_device 和 platform_driver 两边都存在。设备树节点 status 不是 okay、父节点关闭、compatible 节点路径不对,或板子实际启动的 dtb 不是你改的那个,都会导致设备没有生成。
设备树匹配依赖 compatible 与 of_match_table 完全对应,大小写、厂商前缀、逗号、下划线都可能导致失败。非设备树路径还要看 driver name 与 platform_device name。
如果缺 regulator、clock、gpio、pinctrl 等依赖资源,probe 可能已经调用但返回 -EPROBE_DEFER。此时 dmesg、deferred_probe 列表和 probe 内日志能区分“没进入 probe”和“进入后延迟”。
不一定。如果依赖资源还没准备好,probe 可能返回延迟探测;如果总线或父设备还没完成,也可能稍后再尝试。
先看 /sys/bus/platform/devices 有没有对应设备,再看驱动目录和 dmesg。如果设备都没有,优先查设备树和 dtb。
我会先看 dmesg 和返回码,再查 /sys 下设备、驱动和资源状态,必要时加 trace/ftrace 或最小日志,先证明问题出在设备生成、匹配、资源获取、回调路径还是用户态交互。