modprobe/insmod - ERROR: could not insert module Operation not permitted installing a kernel space module with root privileges
modprobe/insmod - ERROR: could not insert module Operation not permitted installing a kernel space module with root privileges
所以,我试图安装一个 hello world 内核,显示了乔纳森 Corbet 的书“Linux 设备驱动程序”。
这是文件的代码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
正在安装具有 root 权限的内核 space 模块。也试过
sudo su
sudo insmod ./hello.ko
也试过
sudo modprove -v hello.ko
有类似的错误。
所以,有几件事正在发生,主要问题是您的计算机(通常是笔记本电脑)在 bios 中启用了 secure boot
选项。
这通常可以解决问题,但是,在某些笔记本电脑中,该选项不会出现(或被禁用),直到您为 bios 设置管理密码。
如果将 secure boot
选项更改为 disabled
后有时还不够。在一些较新的英特尔笔记本电脑中,您还需要从 BIOS 中禁用 英特尔平台信任技术。
最后,您可以 运行 insmod 或 modprobe 没有问题。
要检查 printk(KERN_ALERT "Hello World!!\n");
的输出,您需要执行
tail -f /var/log/kern.log
应该可以。
所以,我试图安装一个 hello world 内核,显示了乔纳森 Corbet 的书“Linux 设备驱动程序”。
这是文件的代码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
正在安装具有 root 权限的内核 space 模块。也试过
sudo su
sudo insmod ./hello.ko
也试过
sudo modprove -v hello.ko
有类似的错误。
所以,有几件事正在发生,主要问题是您的计算机(通常是笔记本电脑)在 bios 中启用了 secure boot
选项。
这通常可以解决问题,但是,在某些笔记本电脑中,该选项不会出现(或被禁用),直到您为 bios 设置管理密码。
如果将 secure boot
选项更改为 disabled
后有时还不够。在一些较新的英特尔笔记本电脑中,您还需要从 BIOS 中禁用 英特尔平台信任技术。
最后,您可以 运行 insmod 或 modprobe 没有问题。
要检查 printk(KERN_ALERT "Hello World!!\n");
的输出,您需要执行
tail -f /var/log/kern.log
应该可以。