环境:ubuntu11.04 2.6内核 gcc4.5.3
源码:hello.c
#include <linux/init.h>
#include <linux/module.h>
MODULE_LICENSE("Dual BSD/GPL");
static int hello_init(void)
{
printk(KERN_ALERT "Hello, Linux.I am coming!\n");
return 0;
}
static void hello_exit(void)
{
printk(KERN_ALERT "Goodbye, Linux. I will back later.\n");
}
module_init (hello_init);
module_exit (hello_exit);
Makefile文件(M一定大写)
KERNELDIR=/lib/modules/$(shell uname -r)/build
PWD:=$(shell pwd)
CC= gcc
obj-m := hello.o
modules:
$(MAKE) -C $(KERNELDIR) M=$(PWD) modules
clean:
rm -rf *.o *~ core .depend .*.cmd *.ko
注意事项
1、hello.c和Makefie(再次强调2.6内核M大写)在同一文件夹下
2、modules:和clean:的下一行均是tab键开头,不能是空格
步骤:
make
ls确保成功生成.ko文件
insmod hello.ko
dmesg查看消息,能看到Hello, Linux.I am coming!
lsmod查看模块,能看到hello模块
rmmod hello
dmesg查看消息,能看到Goodbye, Linux. I will back later.
还有一种加载模块的方式是随内核启动自动加载,在此不介绍。