Я написал следующий код для получения текущей частоты процессора в файле 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
.