读书人

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

发布时间: 2013-03-19 17:22:05 作者: rapoo

《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为类型

读书人网 >UNIXLINUX

热点推荐