linux - Linux DevFreq 驱动程序未被调用的探针

标签 linux linux-kernel

我正在尝试为 Linux 上的外围设备设置 devfreq 驱动程序。我的驱动程序初始化方法如下所示:

  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);

但是,我的驱动程序中的探测函数(zynq_csortfreq_probe)似乎从未被调用。我读过,为了使探测调用正常工作,驱动程序的 .name 值必须与设备的名称匹配 - 在哪里可以找到设备的名称?

最佳答案

为了调用probe函数,您必须从machine文件或通过设备添加设备树。。这通常是通过机器文件中的 platform_device_register()platform_add_devices() 来完成的。或者,of_platform_populate() 用于设备树模型,但代码不直接使用它。 platform device documentation包含您的 Linux 内核版本的信息。看来您的 Linux 使用 device tree modelcpufree devicetree 中的文档将提供一些关于使用设备树激活此板的驱动程序的有用信息。

dtsi 文件需要类似的内容,

 soc {
     zyncfreq@addr {
          compatible="xxxx"
          /* Other platform data */

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

如果您可以查看this closed question ,如果 Linux 设备模型文档不完全清楚,我的回答可能会有所帮助。但是,我认为对于您的情况,Linux 文档就足够了。

关于linux - Linux DevFreq 驱动程序未被调用的探针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16259580/

相关文章:

linux - 如何将字符串拆分为单个字符

linux - 捕获其他程序stderr和stdout的程序

c - kvm:模块验证失败:缺少签名和/或所需的 key - 污染内核

linux - 对添加到内核的系统调用的 undefined reference

java - 无法使用 docsplit 转换 openoffice 文档导致 java.lang.NoClassDefFoundError

php - Linux/Laravel - 如何共享来自不同项目(同一服务器)的上传内容并在 1 个子域上显示它们?

python - 运行应用程序时服务器上显示 unicode 错误 (django)

linux-kernel - NS3 bash : ./waf:没有这样的文件或目录错误

从内核代码调用系统调用

linux - 仅在 Linux 上通过命令行将 xlsx 转换为文本 CSV