我正在实现一个用作频率调控器的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
可能会发生什么?