在内核模块中使用printk()时的KernelOops

时间:2018-05-07 02:39:45

标签: linux-kernel

我正在实现一个用作频率调控器的linux模块。我是linux模块开发的新手,所以我试图理解已经实现的调控器。以下代码基于性能调控器。

 SELECT CityID, COUNT(CityID) Counts
  FROM MANUFACTURER4787 
 GROUP BY CityID
HAVING COUNT(CityID) < 2;

当我在没有#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()时,我在删除模块时会得到一个KernelOops(使用printk())。

这是rmmod目录中记录的消息。在此测试中,我已将/var/crash中的2个cpu设置为自定义调控器并返回ondemand,然后删除模块:

ondemand

可能会发生什么?

0 个答案:

没有答案