例子如下,再简单不过了:
#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/下某目录,看你模块的功能了,分门别类