KernelOops при использовании printk () внутри модуля ядра - PullRequest
0 голосов
/ 07 мая 2018

Я реализую модуль Linux для использования в качестве регулятора частоты. Я новичок в разработке модулей Linux, поэтому я пытаюсь понять уже реализованные регуляторы. Следующий код основан на регуляторе производительности.

#include <linux/cpufreq.h>
#include <linux/init.h>
#include <linux/module.h>
#include <linux/kernel.h>

static void cpufreq_gov_performance_limits(struct cpufreq_policy *policy)
{
    printk(KERN_INFO "DEBUG: Frequency set to 1500 MHz.\n");
    __cpufreq_driver_target(policy, 1500000, CPUFREQ_RELATION_H);
}

static struct cpufreq_governor cpufreq_gov_performance = {
    .name       = "mtest",
    .owner      = THIS_MODULE,
    .limits     = cpufreq_gov_performance_limits,
};

static int __init cpufreq_gov_performance_init(void)
{
    printk(KERN_INFO "DEBUG: Governor inserted.\n");
    return cpufreq_register_governor(&cpufreq_gov_performance);
}

static void __exit cpufreq_gov_performance_exit(void)
{
    printk(KERN_INFO "DEBUG: Governor released.\n");
    cpufreq_unregister_governor(&cpufreq_gov_performance);
}

MODULE_LICENSE("GPL");

module_init(cpufreq_gov_performance_init);
module_exit(cpufreq_gov_performance_exit);

Когда я загружаю модуль без printk(), регулятор работает без ошибок. Но при использовании printk() я получаю KernelOops при удалении модуля (используя rmmod).

Это сообщение зарегистрировано в каталоге /var/crash. В этом тесте я установил 2 процессора из ondemand в свой пользовательский регулятор и вернулся в ondemand, затем удалил модуль:

ProblemType: KernelOops
Annotation: Your system might become unstable now and might need to be restarted.
Date: Sun May  6 22:54:48 2018
Failure: oops
OopsText:
 DEBUG: Governor inserted.
 DEBUG: Frequency set to 1500 MHz.
 DEBUG: Frequency set to 1500 MHz.
 DEBUG: Governor released.

Package: linux-image-4.15.0-20-generic 4.15.0-20.21
SourcePackage: linux
Tags: kernel-oops
Uname: Linux 4.15.0-20-generic x86_64

Что может происходить?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...