/* hello.c 2.6.18-8.e15 */ #ifndef __KERNEL__ #define __KERNEL__ #endif #ifndef MODULE #define MODULE #endif
#include <linux/kernel.h> #include <linux/init.h> #include <linux/module.h> #include <linux/version.h>
MODULE_LICENSE("GPL"); MODULE_VERSION("1.0");
static int __init hello_init(void) { printk("Hello module init\n"); return 0; }
static void __exit hello_exit(void) { printk("Hello module exit\n"); }
module_init(hello_init); module_exit(hello_exit);
|
以上是源码,以下是Makefile(大写M)
obj-name=hello obj-m:=$(obj-name).o KERNELDIR:=/lib/modules/$(shell uname -r)/build
default: make -C $(KERNELDIR) M=$(shell pwd) modules install: insmod $(obj-name).ko uninstall: rmmod $(obj-name).ko clean: make -C $(KERNELDIR) M=$(shell pwd) clean
|
以上部分要使用时,将makefile中的命令前的空格换为Tab键
使用:
编译 make
安装 make install
卸载 make uninstall
清理 make clean
安装后,可以在/proc/devices中可以看到,其对应数字为主设备号major
对文件设备模块,要创建设备文件:
mknod /dev/模块名 c 主设备号 次设备号
其中c表示字符设备;
用cat /proc/devices | grep 模块名 | awk '{print $1}' 可以得到主设备号
说明:
该模块只能将自己加入内核,并在加入时打印一句话,如果在stdout上看不到输出,可用dmesg查看
阅读(989) | 评论(0) | 转发(0) |