Chinaunix首页 | 论坛 | 博客
  • 博客访问: 12363
  • 博文数量: 1
  • 博客积分: 55
  • 博客等级: 民兵
  • 技术积分: 22
  • 用 户 组: 普通用户
  • 注册时间: 2010-03-06 19:49
文章分类
文章存档

2013年(1)

我的朋友
最近访客

分类: LINUX

2013-03-27 15:46:32

开发环境  ubuntu 10.04
     从新接触Linux驱动开发,可能是做了2年单片机开发的关系,对于以前Linux很多不明白的东西,现在逐渐清晰了。驱动开发也一样,虽然不能一下子掌握内核提供给驱动的一些函数的应用,不过慢慢的会掌握的。
首先说说 hello world 的 感想: 
      hello word 代码:hello.c

点击(此处)折叠或打开

  1. #include "linux/init.h"
  2. #include "linux/module.h"

  3. MODULE_LICENSE("Dual BSD/GPL");

  4. static int hello_init(void)
  5. {
  6.     printk(KERN_ALERT"Hello,world\r\n");
  7.     return 0;
  8. }
  9. static void hello_exit(void)
  10. {
  11.     printk(KERN_ALERT"Goodbye,cruel world\r\n");
  12. }

  13. module_init(hello_init);
  14. module_exit(hello_exit);
      代码很简单,也很容易看懂,不过,还是要敲一下,加深一下记忆吧。这段代码主要的知识点有:
     1   包含的头文件不再是应用程序路径的文件了比如/usr/include,而是内核目录下的include /usr/src/kernel/include 下的文件。具体那个函数,宏在哪个头文件里面暂时很不知道,日后慢慢就会熟悉了。
     2  hello_init 和 hello_exti 都定义成 static 类型的函数,其实这个不一定要这样定义,不过,为了不让本文件的一些符号影响到系统的其他符号,或者为了不要让以后定义的符号和本文件的符号有冲突,最好就是加上static 。
     3  module_init,module_exit,具体的实现我还没有看,这里猜测应该是linux 定义的宏或者函数,用于把钩子函数 hello_init,和 hello_exit 挂接到Linux提供的驱动接口上。当用命令 insmod hello.ko的时候,就会进行挂接,挂接的同时调用hello_init,当调用rmmod hello.ko 时就会删除挂接,同时调用hello_exit函数。

  makefile 如下:

点击(此处)折叠或打开

  1. obj-m := hello.o
  2. KERNELDIR := /lib/modules/2.6.32-45-generic/build/
  3. PWD := $(shell pwd)

  4. modules:
  5.     $(MAKE) -C $(KERNELDIR) M=$(PWD) modules
  6. modules_install:
  7.     $(MAKE) -C $(KERNELDIR) M=$(PWD) modules_install
可以理解这段代码,也可以按照这段代码修改成其他文件所用的,当时要我自己写出来就不行了。这是网上copy下来的。


阅读(912) | 评论(0) | 转发(0) |
0

上一篇:没有了

下一篇:没有了

给主人留下些什么吧!~~