关于向内核插入模块的时候,遇到了这个错误,起初一直怀疑是insmod使用不正确,或是内核版本不支持,后来发现有两个方面的原因:
一:需要将生成的 .ko 文件拷贝到 /lib/modules/4.4.0-21-generic 下。(如果使用 modprobe)
二:不要使用名字module ,换成hello就好了
使用 dmesg 查看自开机以来的信息就可以看到printk输出的信息了;
使用rmmod 可以移除安装了的模块。
c文件:
#include <linux/module.h>
#include <linux/kernel.h>
#include <linux/init.h>
MODULE_LICENSE("Dual BSD/GPL");
static int hello_init(void)
{
printk("Hello world\n");
return 0;
}
static void hello_exit(void)
{
printk("Bye Corne\n");
}
module_init(hello_init);
module_exit(hello_exit);
makefile文件:
obj-m:=hello.o
CURRENT_PATH :=$(shell pwd)
VERSION_NUM :=$(shell uname -r)
LIUNX_PATH :=/usr/src/linux-headers-$(VERSION_NUM)
all:
make -C $(LIUNX_PATH) M=$(CURRENT_PATH) modules
clean:
make -C $(LIUNX_PATH) M=$(CURRENT_PATH) clean