【问题标题】:not able to remove loadable kernel module(LKM) using rmmod无法使用 rmmod 删除可加载内核模块(LKM)
【发布时间】:2015-11-24 18:11:38
【问题描述】:

我正在尝试为 ubuntu 12.04 LTS 操作系统编写内核模块。 内核版本是 3.4.0-030400-generic-pae 我能够编译它并将其加载到内核。 对于加载,我使用

sudo insmod nmod_main.ko

现在,如果我尝试使用

删除它

sudo rmmod nmod_main.ko

它给了我以下错误。 错误:删除“nmod_main”:设备或资源繁忙

lsmod 提供以下信息:

使用的模块大小

nmod_main 12394 0 [永久]

为什么这个模块显示permanent?

下面是这个模块的 C 代码。

/********** Start of code ************/
#define __KERNEL__
#define MODULE
#include <linux/module.h>
#include <linux/kernel.h>

int init_module(void)
{
        printk(KERN_INFO "init_module() called\n");
        return 0;
}

void cleanup_module(void)
{
        printk(KERN_INFO "cleanup_module() called\n");
}
/********** End of code ************/

我收到如下一些编译警告:

使用 KERNELRELEASE = 3.4.0-030400-generic-pae 构建

CC [M] ../src/nmod_main.o

../src/nmod_main.c:1:0: 警告:“KERNEL”重新定义[默认启用]

:0:0: 注意:这是之前定义的位置

../src/nmod_main.c:2:0: 警告:“模块”重新定义[默认启用]

:0:0: 注意:这是之前定义的位置

构建模块,第 2 阶段。

使用 KERNELRELEASE = 3.4.0-030400-generic-pae 构建

请任何人在这方面帮助我。

我正在使用下面的 makefile 来构建这个模块:

ifeq ($(KERNELRELEASE),)  

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

.PHONY: build clean  

build:
        $(MAKE) -C $(KERNELDIR) M=$(PWD) modules  

clean:
        rm -rf ../src/*.o ../src/*~ core ../src/.depend ../src/.*.cmd ../src/*.ko ../src/*.mod.c 
else  

$(info Building with KERNELRELEASE = ${KERNELRELEASE}) 
obj-m :=    ../src/nmod_main.o  

endi

【问题讨论】:

  • 请阅读编译器消息 - 不要定义 __KERNEL__MODULE
  • 同意,但是编译器如何识别这是内核代码,也不是内核的永久部分(即可加载内核模块)?
  • 我的第一个问题有什么亮点(rmmod 失败)?
  • 这是kbuild处理编译器的工作。
  • 唯一可能导致rmmod 使此类琐碎代码失败的是标志。

标签: linux-kernel


【解决方案1】:

这个问题解决了。是的,这是与工具链有关的问题。我从url下载了.deb文件来安装Linux内核。

但我不确定用于生成这些 .deb 文件的工具链。所以我终于从url 下载了 Linux 内核源代码,编译并安装在我的笔记本电脑上。然后编译我的模块。问题消失了。 感谢@avd 为我提供了宝贵的线索。

【讨论】:

    【解决方案2】:

    您需要添加模块入口点,这将允许内核加载或卸载模块。没有 module_init 和 module_exit 内核不知道如何卸载模块并且模块成为永久的。但是不知道要修复我需要解决方案如何删除这个永久模块。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-03-20
      • 2016-07-20
      • 2014-09-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多