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