cpufreq_get возвращает 0 в модуле ядра Linux - PullRequest
0 голосов
/ 01 мая 2018

Я написал следующий код для получения текущей частоты процессора в файле C моего модуля ядра:

#include <linux/cpufreq.h>

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

Я получаю CPU Freq in KHz: 0 Я проверил, что мое ядро ​​построено с CONFIG_CPU_FREQ=y, CONFIG_X86_INTEL_PSTATE=y со следующим кодом grep -i cpu_freq /boot/config-$(uname -r) и grep -i pstate /boot/config-$(uname -r).

Я могу легко проверить частоту в файловой системе sysfs:

cat /sys/devices/system/cpu/cpu5/cpufreq/scaling_cur_freq

Почему он не доступен в модуле ядра Linux?

Утилита пользовательского пространства cpufreq-info также выводит информацию о текущей частоте процессора. Я работаю на Ubuntu 16.04 X86_64.

EDIT: Следующий код также выводит CPU Freq in KHz: 0:

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

Следовательно, CONFIG_CPU_FREQ определенно определено. Я проверил с помощью #pragma, и оно имеет значение 1.

...