【问题标题】:modprobe/insmod - ERROR: could not insert module Operation not permitted installing a kernel space module with root privilegesmodprobe/insmod - 错误:无法插入模块 操作不允许以 root 权限安装内核空间模块
【发布时间】:2020-12-06 11:50:20
【问题描述】:

所以,我试图安装一个 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 权限安装内核空间模块。也试过了

sudo su
sudo insmod ./hello.ko

也试过了

sudo modprove -v hello.ko

有类似的错误。

【问题讨论】:

    标签: c linux linux-kernel linux-device-driver insmod


    【解决方案1】:

    所以,有几件事正在发生,主要问题是您的计算机(通常是笔记本电脑)在 bios 中启用了secure boot 选项。

    这通常可以解决问题,但是在某些笔记本中,该选项不会出现(或被禁用),直到您为 bios 设置管理密码。

    如果将secure boot 选项更改为disabled 后有时还不够。在一些较新的英特尔笔记本电脑中,您还需要从 BIOS 禁用 英特尔平台信任技术。

    最后,您可以毫无问题地运行 insmod 或 modprobe。

    要检查printk(KERN_ALERT "Hello World!!\n"); 的输出,您需要做一个

    tail -f /var/log/kern.log

    应该可以的。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-06-24
      • 2013-03-28
      • 1970-01-01
      • 2015-01-15
      • 1970-01-01
      • 2016-06-27
      • 2013-10-15
      • 2016-03-26
      相关资源
      最近更新 更多