我编写了一个简单的Linux内核模块来发布hlt
指令
#include <linux/kernel.h>
#include <linux/module.h>
MODULE_LICENSE("GPL");
static int __init test_hello_init(void)
{
asm("hlt");
return 0;
}
static void __exit test_hello_exit(void)
{
}
module_init(test_hello_init);
module_exit(test_hello_exit);
在虚拟机上加载此模块后,我看不到虚拟机已停止。
我想念什么吗?
最佳答案
HLT
不会停止您的计算机,仅使该内核进休眠眠状态(在C1中处于空闲状态),直到下一个中断为止。
您可以尝试在cli
之前添加hlt
指令,以便只有NMI才能唤醒该CPU并使函数返回。
static int __init test_hello_init(void) {
asm("cli");
asm("hlt");
return 0;
}