关于内核模块编程中的c:insmod错误

insmod error in kernel module programming

我刚刚开始使用模块化编程。

以上是我的两个文件:

你好.c

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include <linux/init.h>
#include <linux/module.h>

static int hello_init(void)
{
    printk(KERN_ALERT"TEST: Hello world\
"
);
    return 0;
}

static void hello_exit(void)
{
    printk(KERN_ALERT"TEST: Good Bye");
}

module_init(hello_init);
module_exit(hello_exit);

制作文件

1
2
3
4
5
6
7
8
9
obj-m += hello.o

KDIR = /usr/src/linux-headers-3.13.0-46-generic

all:
    $(MAKE) -C $(KDIR) SUBDIRS=$(PWD) modules

clean:
    rm -rf *.o *.ko *.mod.* *.symvers *.order

这是我的终端输出在 insmod 命令中显示错误,请帮助。

1
2
3
4
5
6
7
8
anubhav@anubhav-Inspiron-3421:~/Desktop/os$ make
make -C /usr/src/linux-headers-3.13.0-46-generic  SUBDIRS=/home/anubhav/Desktop/os modules
make[1]: Entering directory `/usr/src/linux-headers-3.13.0-46-generic'
Building modules, stage 2.
MODPOST 1 modules
make[1]: Leaving directory `/usr/src/linux-headers-3.13.0-46-generic'

anubhav@anubhav-Inspiron-3421:~/Desktop/os$ insmod hello.ko
insmod: ERROR: could not insert module hello.ko: Operation not permitted


如果您启用了安全启动,较新的内核将不允许插入任意内核模块。因此,您可以在 BIOS 中禁用安全启动,或者您需要对要安装的内核模块进行签名。

安全签署内核模块的步骤:

  • 创建可在固件中导入的 X509 证书
  • 注册刚刚创建的公钥
  • 对要安装的模块进行签名
  • 安装模块
  • 您需要成为 root 才能执行第 2 步


    正如isowen所说,只有root可以加载或卸载模块。

    执行 insmod hello 时会在 hello_init() 中看到打印,执行 rmmod hello 时会看到 hello_exit() 中的打印。


    n