如何排查probe函数不跑的原因?

发布时间 2023-10-13 15:24:54作者: 596

1、probe函数被调用的条件

1.1 driver和device要在同一级总线下。同一级总线指的是platform bus或i2c bus。例如 platform device只会和platform driver匹配;i2c driver只会和i2c device匹配。

1.2 driver和device的compatible属性要相同

2、假如发现驱动的probe函数没有被加载,可以尝试下面的方向进行排查:

2.1 确认device和driver是否都分别注册成功。
用adb查看,目录是:/sys/bus/.../driver or devices

2.2 如果driver和device都存在,那么需要排查compatible属性是否一致

2.3 如果是driver不存在,修改DEFAULT_CONSOLE_LOGLEVEL等级,在log中搜索自己的driver名字。

2.4 如果是devices不存在(大部分是这种情况)

2.4.1 确认自己的dts修改是否生效?例如MTK平台会有很多份dts,有可能是改错文件了。怎么确认是否有相应的节点呢?
用adb shell查看以下的目录:/sys/firmware/devicetree/base/

2.4.2 如果是platform device,那么你只需要检查自己的dts节点是否是根目录的子节点,或者是“simple-bus”这类节点的子节点。

2.4.3 如果是i2c device这一类的device,那么就有两种情况,一种是总线节点就不存在,那么就是平台的总线驱动出现了问题;一种是唯独你这个device没有注册出来,这种情况下在log中搜索对应的总线,例如spi,i2c都会看到一些蛛丝马迹。