日期:2014-05-16  浏览次数:20535 次

《linux设备驱动程序III》学习---第二章

 

1,介绍最简单的hello world 驱动程序。。。。之前已经看过了,这部分过

2,模块程序与应用程序的区别

     @应用程序从头到尾按顺序执行单个任务。模块程序要先注册到内核,为的是给调用做准备

     @退出时,应用程序的资源系统会回收,模块程序要手动

     @模块程序不能像应用程序那样连接库函数,它调用的只能是内核中的头文件 include/linux ,linux/asm

     @模块运行在内核空间,应用程序运行在用户空间

3,内核中的并发----驱动也应该考虑的问题

     驱动程序也是内核程序的一部分,所以这部分介绍了内核编程的注意事项

     内核程序不同于应用程序在一段时间内按顺序执行就行了,要记住内核是并发的,同一时刻有很多事情发生

 

4,当前进程指针:current。printk(KERN_INFO " current  pid  is %d",current->pid);

5,驱动程序标准makefile

obj-m := hello.o   说明有个模块要从hello.o中构造,构造出hello.ko

hello-objs := hello1.o hello2.o   说明由两个文件1、2构成

make  -C ~/kernel-2.6 M=‘PWD’  modules    -C后是内核的代码目录  M后为构造模块前返回的目录

 

标准makefile模板:

ifneq ($(KERNELRELEASE),)

     obj-m :=hello.o

else

     KERNELDIR ?= /lib/...   你电脑内核所在位置

     PWD := $(shell pwd)    

default:

     $(MAKE)  -C $(KERNELDIR)  M=$(PWD)  modules

clean:

     rm -rf  *.o

endif

6,几个常用的宏

  EXPORT_SYMBOL(name);  将name参数导到模块外

  MODULE_LICNESE("GPL");  获得GPL许可

  MODULE_AUTHOR("ZL");  作者

 

6,驱动程序参数传递

  module_param(name,int ,0);  name 为参数名字,int为类型