Linux DevFreq驱动程序未被调用的探测器

Joh*_*rts 4 linux linux-kernel

我正在尝试为Linux上的外设设置devfreq驱动程序.我的驱动程序的init方法如下所示:

  static struct platform_driver zynq_csortfreq_driver = {
    .probe  = zynq_csortfreq_probe,
    .driver = {
        .name   = "ZYNQ_CSORT_DEVFREQ",
        .owner  = THIS_MODULE,
    },
  };

static int __init zynq_csortfreq_init(void)
{
    return platform_driver_register(&zynq_csortfreq_driver);
}
late_initcall(zynq_csortfreq_init);
Run Code Online (Sandbox Code Playgroud)

但是,我的驱动程序中的探测功能(zynq_csortfreq_probe)似乎永远不会被调用.我已经读过为了使探测调用正常工作,驱动程序的.name值必须与设备名称匹配 - 在哪里可以找到设备的名称?

art*_*ise 6

为了使probe函数的调用,您必须添加一个设备文件或通过设备树.这通常使用platform_device_register()platform_add_devices()机器文件中完成.或者,of_platform_populate()用于设备树模型,但代码不直接使用它.该平台设备的文档具有信息为您的Linux内核版本.您的Linux似乎使用设备树模型.cpufree devicetree中的文档将提供有关使用设备树激活此板的驱动程序的一些有用信息.

dtsi文件需要类似的东西,

 soc {
     zyncfreq@addr {
          compatible="xxxx"
          /* Other platform data */
Run Code Online (Sandbox Code Playgroud)

这将为您的机器定义设备.我建议您先修改机器文件init_machine条目,然后使用它将platform_device_register()驱动程序与设备关联起来.然后,如果您愿意,您可以稍后尝试使设备树机制正常工作.

如果你可以查看这个封闭的问题,如果Linux设备模型文档不完全清楚,我的答案可能会有所帮助.但是,我认为对于您的情况,Linux文档就足够了.