我编写了一个简单的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;
}

08-05 08:24