C语言 modprobe/insmod -错误:无法插入模块不允许使用root权限安装内核空间模块的操作

weylhg0b  于 2023-01-16  发布在  其他
关注(0)|答案(1)|浏览(510)

所以,我试图安装一个hello world内核显示的书"Linux设备驱动程序"由Corbet,乔纳森.
这是文件hello. c的代码

#include <linux/init.h>
#include <linux/module.h>
MODULE_LICENSE("Dual BSD/GPL");

static int hello_init(void) {
    printk(KERN_ALERT "Hello World!!\n");
    return 0;
}

static void hello_exit(void) {
    printk(KERN_ALERT "Good Bye Module!!\n");
}

module_init(hello_init);
module_exit(hello_exit);

为了构建它,我使用以下makefile:

obj-m += hello.o
all:
    make -C /lib/modules/$(shell uname -r)/build M=$(PWD) modules
clean:
    make -C /lib/modules/$(shell uname -r)/build M=$(PWD) clean

运行后

make all
sudo insmod ./hello.ko

我发现了错误

ERROR: could not insert module Operation not permitted

正在使用根权限安装内核空间模块。还尝试了

sudo su
sudo insmod ./hello.ko

也尝试过

sudo modprove -v hello.ko

同样的错误。

6l7fqoea

6l7fqoea1#

所以,有几件事正在发生,主要问题是你的电脑(通常是笔记本电脑)在BIOS中启用了secure boot选项。
这通常会起到作用,但是,在一些笔记本电脑中,直到您为BIOS设置了管理密码,该选项才会出现(或被禁用)。
如果将secure boot选项更改为disabled后有时还不够。在某些较新的英特尔笔记本电脑中,您还需要从BIOS禁用英特尔平台信任技术
最后,您可以毫无问题地运行insmod或modprobe。
要检查printk(KERN_ALERT "Hello World!!\n");的输出,您需要执行
tail -f /var/log/kern.log
应该可以

相关问题