insmod:错误:无法加载模块:权限被拒绝

时间:2017-06-06 11:47:48

标签: linux centos linux-device-driver

我正在尝试构建和加载一个简单的内核模块。我能够构建模块,但无法加载它。

skm.c

#include <linux/module.h>
#include <linux/version.h>
#include <linux/kernel.h>

static int __init skm_init(void)
{
    printk(KERN_INFO "Hello");
    return 0;
}

static void __exit skm_exit(void)
{
    printk(KERN_INFO "Good Bye");
}

module_init(skm_init);
module_exit(skm_exit);

生成文件

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

obj-m += skm.o

all:
    make -C $(KERNEL_SOURCE) M=$(PWD) modules

clean:
    make -C $(KERNEL_SOURCE) M=$(PWD) clean

insmod命令失败并显示“Permission Denied”错误。

[user1@localhost LinuxKernelModules]$ make clean
make -C /lib/modules/3.10.0-514.21.1.el7.x86_64/build M=/home/user1/projects/LinuxKernelModules clean
make[1]: Entering directory `/usr/src/kernels/3.10.0-514.21.1.el7.x86_64'
  CLEAN   /home/user1/projects/LinuxKernelModules/.tmp_versions
  CLEAN   /home/user1/projects/LinuxKernelModules/Module.symvers
make[1]: Leaving directory `/usr/src/kernels/3.10.0-514.21.1.el7.x86_64'
[user1@localhost LinuxKernelModules]$ make
make -C /lib/modules/3.10.0-514.21.1.el7.x86_64/build M=/home/user1/projects/LinuxKernelModules modules
make[1]: Entering directory `/usr/src/kernels/3.10.0-514.21.1.el7.x86_64'
  CC [M]  /home/user1/projects/LinuxKernelModules/skm.o
  Building modules, stage 2.
  MODPOST 1 modules
  CC      /home/user1/projects/LinuxKernelModules/skm.mod.o
  LD [M]  /home/user1/projects/LinuxKernelModules/skm.ko
make[1]: Leaving directory `/usr/src/kernels/3.10.0-514.21.1.el7.x86_64'
[user1@localhost LinuxKernelModules]$ sudo insmod skm.ko
[sudo] password for user1: 
insmod: ERROR: could not load module skm.ko: Permission denied

目录和目标文件具有写入和执行权限。并且user1具有与root相同的权限。

[user1@localhost LinuxKernelModules]$ ls -al
total 296
drwxr--r--.  3 user1 user1  4096 Jun  6 16:52 .
drwxrwxrwx. 11 user1 user1  4096 Jun  5 18:42 ..
-rwxr--r--.  1 user1 user1   831 Jun  2 11:58 fcdm.c
-rwxr--r--.  1 user1 user1   811 Jun  6 16:28 Makefile
-rw-rw-r--.  1 user1 user1    58 Jun  6 16:52 modules.order
-rw-rw-r--.  1 user1 user1     0 Jun  6 16:52 Module.symvers
-rwxr--r--.  1 user1 user1  2146 Jun  2 17:53 scdm.c
-rwxr--r--.  1 user1 user1   397 Jun  6 16:52 skm.c
-rwxr--r--.  1 user1 user1 94872 Jun  6 16:52 skm.ko
-rw-rw-r--.  1 user1 user1   279 Jun  6 16:52 .skm.ko.cmd
-rw-rw-r--.  1 user1 user1   736 Jun  6 16:52 skm.mod.c
-rwxr--r--.  1 user1 user1 52848 Jun  6 16:52 skm.mod.o
-rw-rw-r--.  1 user1 user1 25181 Jun  6 16:52 .skm.mod.o.cmd
-rwxr--r--.  1 user1 user1 43560 Jun  6 16:52 skm.o
-rw-rw-r--.  1 user1 user1 25121 Jun  6 16:52 .skm.o.cmd
drwxrwxr-x.  2 user1 user1  4096 Jun  6 16:52 .tmp_versions

我在安装了内核头文件的CentOS 7计算机上运行它。 我能够在运行旧内核(2.6.x)的CentOS 6计算机上构建和加载具有相同源代码和构建配置的模块。

解决方案: 该错误是因为$HOME目录驻留在计算机未获得root访问权限的NFS服务器上,如此answer中所述。从/tmp目录加载模块就可以了。

0 个答案:

没有答案