Chinaunix首页 | 论坛 | 博客
  • 博客访问: 416503
  • 博文数量: 61
  • 博客积分: 2138
  • 博客等级: 大尉
  • 技术积分: 882
  • 用 户 组: 普通用户
  • 注册时间: 2008-09-07 11:58
文章分类

全部博文(61)

文章存档

2012年(1)

2011年(8)

2010年(12)

2009年(6)

2008年(34)

我的朋友

分类: LINUX

2008-11-09 20:39:34

程序源码
#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的内核的话 ,那你在编译内核前还的先编译一个内核树
阅读(2295) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~