【问题标题】:When does the probe function for a Linux kernel driver gets called?Linux 内核驱动程序的探测函数何时被调用?
【发布时间】: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 kernel driver


    【解决方案1】:

    只要看到设备,就会调用probe 函数。这可能在设备启动时发生,也可能在设备连接时发生。查看this article for more info.

    【讨论】:

      【解决方案2】:

      经过一番研究找到了答案,对于“平台”设备,当平台设备注册并且其设备名称与设备驱动程序上指定的名称匹配时,将调用探测函数。

      更多细节在这里: http://comments.gmane.org/gmane.linux.kernel.kernelnewbies/37050

      现在我只需要弄清楚为什么设备没有被注册:\

      【讨论】:

      • 驱动注册是初始任务,只有注册探测后才能调用。
      • 嗯,期待一个更具描述性的答案,但 +1 链接。
      【解决方案3】:

      当调用 module_init(动态加载时为 insmod)时,驱动程序注册完成,并且存在与驱动程序相关的各种回调探测、恢复、挂起。

      现在主要要了解的是探测函数中发生的一切。如果您注意到,那么在探测中,大多数与设备相关的初始化都已完成(例如,与 DEVICE 相关的设置),所以显然这应该在设备存在时执行。

      当设备和驱动程序名称/ID 匹配时调用探测器,即验证这些将被耦合/链接。所以现在我们确定说 Driver ABC 将与 Device ABC 相关联; Driver ABC探针中Device ABC的初始化设置也是如此。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-01-23
        • 2015-11-14
        • 1970-01-01
        • 2015-12-31
        • 1970-01-01
        • 2011-11-04
        • 1970-01-01
        • 2018-03-19
        相关资源
        最近更新 更多