cpufreq_get在linux内核模块中返回0

cpufreq_get在linux内核模块中返回0,c,linux,cpu,kernel-module,sysfs,C,Linux,Cpu,Kernel Module,Sysfs,我已经编写了以下代码来获取内核模块C文件中的当前CPU频率: #include <linux/cpufreq.h> void func() { printk(KERN_ALERT "CPU Freq in KHz: %d\n", cpufreq_get(3)); } 为什么它不能在Linux内核模块中访问 用户空间实用程序cpufreq info也提供有关当前CPU频率的输出。 我在Ubuntu 16.04 X86_64上运行 编辑: 以下代码还以KHz为单位输出CPU频率:

我已经编写了以下代码来获取内核模块C文件中的当前CPU频率:

#include <linux/cpufreq.h>

void func() {
  printk(KERN_ALERT "CPU Freq in KHz: %d\n", cpufreq_get(3));
}
为什么它不能在Linux内核模块中访问

用户空间实用程序
cpufreq info
也提供有关当前CPU频率的输出。 我在Ubuntu 16.04 X86_64上运行

编辑: 以下代码还以KHz为单位输出CPU频率:0:

void func() {
#ifdef CONFIG_CPU_FREQ
    printk(KERN_ALERT "CPU Freq in KHz: %d\n", cpufreq_get(3));
#endif
}

因此,
CONFIG\u CPU\u FREQ
肯定是定义好的。我已经检查了#pragma,它有
1
值。

您可能需要在当前配置(kconfig.h)中包含内核头,以便在包含cpufreq.h之前获得定义的CONFIG_CPU_FREQ。在内核空间中,如果没有定义,cpufreq.h将用始终返回0的内联静态定义替换cpufreq_get()调用。请参阅我的编辑。我已经检查并定义了
CONFIG\u CPU\u FREQ
。cpufreq\u get()在我编写的测试模块(Fedora 23,内核4.8.13)上工作。当cpufreq驱动程序未激活时,内核中的scaling_cur_freq代码使用arch_freq_get_on_cpu()。请参阅此测试模块:,两个打印值中的一个应该是当前频率(我的机器上的f[0]为0,f[1]为1400000)。我认为Fedora可能有不同的cpufreq驱动程序。我的驱动程序是
intel\pstate
。我查过了<在我的例子中,甚至没有定义cpu上的代码>arch\u freq\u get\u
cpufreq\u get
cpufreq\u generic\u get
都不工作。
void func() {
#ifdef CONFIG_CPU_FREQ
    printk(KERN_ALERT "CPU Freq in KHz: %d\n", cpufreq_get(3));
#endif
}