ubuntu 错误:无法插入模块HelloWorld.ko:不允许操作

2nbm6dog  于 2023-03-22  发布在  其他
关注(0)|答案(4)|浏览(245)

我正在努力学习Linux和内核开发。
我能够构建模块,但无法加载它。

HelloWorld.c

/*  
 *  hello-1.c - The simplest kernel module.
 */
#include <linux/module.h>   /* Needed by all modules */
#include <linux/kernel.h>   /* Needed for KERN_INFO */

int init_module(void)
{
    printk(KERN_INFO "Hello world 1.\n");

    /* 
     * A non 0 return means init_module failed; module can't be loaded. 
     */
    return 0;
}

void cleanup_module(void)
{
    printk(KERN_INFO "Goodbye world 1.\n");
}

下面是我的make文件:

KERNEL_SOURCE := /lib/modules/$(shell uname -r)/build
PWD := $(shell pwd)

obj-m += HelloWorld.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

在执行insmod加载模块权限时被拒绝。我甚至尝试用root和modprobe执行此操作,但没有用。
我也试过链接,但问题还是一样。
希望能得到一些帮助。我正在使用ubuntu 18.04LTS。

l7wslrjt

l7wslrjt1#

所以我遇到了同样的问题,这对我很有效:
1.您需要使用mokutil use the first answer in this link禁用安全 Boot
1.通过sudo运行insmod命令。
祝你好运。

hsgswve4

hsgswve42#

如果$ sudo insmod file_name.ko因上述错误而失败,则执行dmesg | tail -1
并且它将给予安装内核模块时究竟发生了什么错误的想法。
在我的例子中,这是因为另一个模块在相同的/sys/class位置重叠。
在完成sudo rmmod <that_module.ko>之后,我能够加载我的新内核模块。

x0fgdtte

x0fgdtte3#

如果您的内核是本地构建的,并且使用生成的签名进行了本地签名,则可以使用相同的密钥对模块进行签名。

<kernel source>/scripts/sign-file sha512 MOK.priv MOK.pem module.ko

https://www.kernel.org/doc/html/v4.15/admin-guide/module-signing.htmlhttps://github.com/jakeday/linux-surface/blob/3267e4ea1f318bb9716d6742d79162de8277dea2/SIGNING.md

w7t8yxp5

w7t8yxp54#

首先,确保在makefile中有tab:和clean:not space然后保存它并运行命令make之后,通过以下命令插入内核. $ sudo insmod file_name.ko最后,显示. $ dmesg | tail -1

相关问题