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都会看到一些蛛丝马迹。