例子如下,再简单不过了:
#include <linux/init.h>
#include <linux/module.h>
MODULE_LICENSE("Dual BSD/GPL");
static int hello_init(void)
{
printk(KERN_ALERT "Hello, world\n");
return 0;
}
static void hello_exit(void)
{
printk(KERN_ALERT"Goodbye, cruel world\n");
}
module_init(hello_init);
module_exit(hello_exit);
makefile脚本:
# Makefile2.6
obj-m += hellomod.o # 产生hellomod 模块的目标文件
CURRENT_PATH := $(shell pwd) #模块所在的当前路径
#LINUX_KERNEL_PATH := /lib/modules/$(shell uname -r)/build
LINUX_KERNEL_PATH := /usr/src/linux-source-2.6.32 #Linux内核源代码的绝对路径
all:
make -C $(LINUX_KERNEL_PATH) M=$(CURRENT_PATH) modules #编译模块了
clean:
make -C $(LINUX_KERNEL_PATH) M=$(CURRENT_PATH) clean
需要注意的是当你插入时
insmod hellomod.o
如果出现 error inserting 'hello_printk.o': -1 Invalid module format
那你就这样插入
insmod hellomod.ko
就可以了
我在虚拟机里面跑的,可以这样查看
1.dmesg |tail
2./var/log/message
3./var/log/syslog
如何开机自动加载你的模块?
vi /etc/moudles
添加你的模块名,只需要名字就行了,不要后缀
将模块移动到/lib/modules/2.6.32-38-generic/kernel/下某目录,看你模块的功能了,分门别类