【发布时间】:2012-02-28 10:42:01
【问题描述】:
我正在尝试更新 Android 的内核驱动程序,我添加了一些 printk 来调试它,调用了 _init 函数,但没有调用 probe 函数。 我错过了什么?何时/如何调用探测函数?
代码在:https://github.com/lamegopinto/kernel-2.6.32.27-M722HC/blob/master/drivers/power/rk2918_battery.c
【问题讨论】:
我正在尝试更新 Android 的内核驱动程序,我添加了一些 printk 来调试它,调用了 _init 函数,但没有调用 probe 函数。 我错过了什么?何时/如何调用探测函数?
代码在:https://github.com/lamegopinto/kernel-2.6.32.27-M722HC/blob/master/drivers/power/rk2918_battery.c
【问题讨论】:
只要看到设备,就会调用probe 函数。这可能在设备启动时发生,也可能在设备连接时发生。查看this article for more info.
【讨论】:
经过一番研究找到了答案,对于“平台”设备,当平台设备注册并且其设备名称与设备驱动程序上指定的名称匹配时,将调用探测函数。
更多细节在这里: http://comments.gmane.org/gmane.linux.kernel.kernelnewbies/37050
现在我只需要弄清楚为什么设备没有被注册:\
【讨论】:
当调用 module_init(动态加载时为 insmod)时,驱动程序注册完成,并且存在与驱动程序相关的各种回调探测、恢复、挂起。
现在主要要了解的是探测函数中发生的一切。如果您注意到,那么在探测中,大多数与设备相关的初始化都已完成(例如,与 DEVICE 相关的设置),所以显然这应该在设备存在时执行。
当设备和驱动程序名称/ID 匹配时调用探测器,即验证这些将被耦合/链接。所以现在我们确定说 Driver ABC 将与 Device ABC 相关联; Driver ABC探针中Device ABC的初始化设置也是如此。
【讨论】: