程序源码
#include
#include
MODULE_LIENCE("Dual BAD/GPL");
static int hello_init(void)
{
printk(KERN_ALERT"Hello world");
return 0;
}
static int hello_exit(void)
{
printk(KERN_ALERT"Good bye");
}
module_init(hello_init);
module_exit(hello_exit);
Makefile 文件的如下
obj-m := file.o
KERNELDIR ?= /lib/modules/$(shell uname -r)/build
PWD ?= $(shell pwd)
defalult:
tab键make -C ${KERNELDIR} M=${PWD} modules
install:
tal键insmod file.ko
uninstall:
tal键rmmod file.ko
clear:
tal键make -C ${KERNELDIR} M=${PWD} clean
以上都是枯燥无味的 敲代码的工作了 下面就开始可以开始加载我们的驱动了
使用make编译我们的hello模块
make
使用make install 加载我们的模块
make install
使用 make uninstall 卸载我们的模块
make uninstall
这样在加载和卸载模块是你就可以使用dmesg命令 看见我们的hello world 和 good bye 了
注意::
在 写Makefile 文件时 首字母必须大写为Makefile (原因希望高人指点 按理来说 首字母大小写是无所谓的但是在写驱动是 首字母必须大写 不然make执行会出错的)
KERN_ALERT 是个优先级字符串没有什么别的特殊意义 也可以用<1>等代替 ,特别注意的是在它开 字符串之间是没有,号分隔的
以上注意的两点都是我曾经出过错的地方希望能帮助大家解决同样的错误
还有如果你使用的是2.6的内核的话 ,那你在编译内核前还的先编译一个内核树
阅读(2283) | 评论(0) | 转发(0) |