#include<linux/init.h>//包含有可装载模块需要的大量符号核函数的定义
#include<linux/module.h>//知道你个初始化和清除函数
MODUEL_LICENSE("Dual BSD/GPL);//指定代码所用的许可证
MODULE_AUTHOR("HELLOWORLD);//模块作者
MODULE_DESCRIPTION("hello world);//模块描述
MOUDLE_VERSION("v1.0);//模块版本
static int __init hello_init(void)//表示我们是在初始的时候用,因此用__init
{
printk("<0>" "hello world!\n");
return 0;
}
static void __exit hello_exit(void)
{
printk(KERN_ALERT "goodbye world!\n");
}
module_init(hello_init);
module_init(hello_exit);
Makefile的写法
obj-m:=hello.o
PWD:=$(shell pwd)
KERN_DIR:=/lib/module/$(shell uname -r)/build
all:
make -C $KERN_DIR SUBDIRS=$PWD modules
# make -C $KERN_DIR M=`pwd` modules
clean:
-rm -fr *.o *.ko *.mod.o
进去之后如果消息没有显示在终端,那么我们用 tail -2 /var/log/message 查看后两行
添加模块 insmod hello.ko
删除模块 rmmod hello 这里不用加.ko了
查看自己的模块 lsmod | grep hello.ko
makefile中的几个地方的解释,第一个是KERN_DIR:=/lib/module/$(shell uname -r)/build 这个表示我们找到我们的kernel 编译的makefile
uname -r 是查看内核的版本 ,SUBDIRS 是makefile中带的参数,也可以用M替换,表示我们执行完makefile之后要调到这个参数指定的地方,modules指的是上面我们的obj-m这个模块,表示我们要生成的模块的依赖是hello.o make -C表示进入某个目录里面去执行这个makefile