1) 源码 hello.c
$ sudo gedit hello.c
#include <linux/init.h>
#include <linux/module.h>
static int hello_init(void)
{
printk(KERN_INFO " Hello World enter\n");
return 0;
}
static void hello_exit(void)
{
printk(KERN_INFO " Hello World exit\n ");
}
module_init(hello_init); //向系统注册模块加载函数
module_exit(hello_exit); //向系统注册模块卸载函数
MODULE_AUTHOR("Jason <abc@gmail.com>"); //模块作者等信息声明,可选
MODULE_LICENSE("Dual BSD/GPL"); //模块许可证声明
MODULE_DESCRIPTION("A simple Hello World Module"); //模块描述声明,可选
MODULE_ALIAS("a simplest module"); //模块别名的声明,可选
2) Makefile 源码 (以下源码 make -C 前用 Tab 一次, 不然编译时会出现错误)
KVERS := $(shell uname -r)
PWD := $(shell pwd)
obj-m += hello.o
default:
make -C /lib/modules/$(KVERS)/build M=$(PWD) modules
3) 编译 (编译后, 除了 hello.c 和 Makefile, 会多出另外 6 个文件)
$ make
4) 加载模块
$ sudo insmod ./hello.ko
$ cat /var/log/syslog | grep "Hello World"
Oct 26 14:00:00 ubuntu kernel: [15724.222701] Hello World enter
5) 卸载模块
$ sudo rmmod ./hello.ko
$ cat /var/log/syslog | grep "Hello World"
Oct 26 15:00:00 ubuntu kernel: [15724.222701] Hello World exit
没有评论:
发表评论