我正在尝试为ubuntu 12.04 LTS OS编写内核模块。 内核版本是3.4.0-030400-generic-pae 我能够编译它&将其加载到内核。 对于加载我使用
sudo insmod nmod_main.ko
现在,如果我尝试使用
删除它它给了我吼声错误。 错误:删除'nmod_main':设备或资源繁忙sudo rmmod nmod_main.ko
lsmod给出了以下信息:
使用的模块大小
nmod_main 12394 0 [永久]
为什么此模块显示永久性?
Bellow是此模块的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:警告:“MODULE”重新定义[默认启用]
:0:0:注意:这是前一个定义的位置
构建模块,第2阶段。
使用KERNELRELEASE构建= 3.4.0-030400-generic-pae
请允许任何人帮助我。
我正在使用bellow 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