一、设备驱动程序简介
1.内核功能划分
进程管理,内存管理,文件系统,设备控制,网络。
设备的分类:字符设备,块设备,网络接口。
二、构造和运行模块
单个源文件编译模块:obj-m := hello.o
多个源文件编译模块:obj-m := module.o
module-objs := file1.o file2.o
make -C ~/kernel-2.6 M=‘pwd’ modules
首先进入到kernel目录执行make,(即执行内核顶层的Makefile文件)。M=选项让该Makefile在构造modules目标之前返回到模块源码目录。然后,modules目标指向obj-m变量中设定的模块。即上面的hello.o或者module.o。
三、字符设备驱动程序
1.主设备号和次设备号
对字符设备的访问是通过文件系统内的设备名称进行的。主设备号标识设备对应的驱动,但多个驱动有可能共享主设备号。次设备号确定设备文件所代表的设备。
2.设备编号的表达
设备编号用dev_t类型表示,要提取主次设备编号,应使用:
MAJOR(dev_t dev);
MINOR(dev_t dev);
主次设备号转换为dev_t,使用:MKDEV(int major, int minor);
3. 分配和释放设备编号
静态分配设备编号必须先知道系统中哪些主设备号是未被使用的,优点是可以提前创建设备节点,以供用户态访问。缺点是移植性差。
动态分配设备编号缺点是无法预先创建设备节点,