编写linux模块时,要首先编写.c文件,编写属于自己的makefile文件,之后使用make命令对.c文件进行编译,生成.ko文件
.ko文件就是最后所需要的模块,操作就是对它进行插入/删除。
#include <unistd.h>: 该头文件主要是对系统调用的,不可直接使用
#include <linux/init.h>: 包括init/exit函数
#include <linux/kernel.h>
#include <linux/module.h>: 添加linux模块,支持内核模块的机制
printk:LINUX_KERNEL_PATH:=/usr/src/linux-headers-$(LINUX_KERNEL)
功能与printf类似,二者接口实际上是完全一样的。但是printk可以支持消息的打印级别。一般printk最低的一级是调试信息,最高的一级是重要的,可能是系统奔溃的信息。使用尖括号<>指定消息打印的级别。
book@100ask:~/Mooc$ cat helloworld.c
#include <linux/init.h>
#include <linux/kernel.h>
#include <linux/module.h>
//linux entry functions
static int __init lkm_init(void)
{
printk("Hello World!\n");
return 0;
}
static void __exit lkm_exit(void)
{
printk("Goodbye!\n");
}
module_init(lkm_init); //entry point
module_exit(lkm_exit); //exit point
MODULE_LICENSE("GPL");
Makefile文件的第一个字母必须大写,这样后面才能够找到进行正确的编译
obj-m:=helloworld.o