在 Unix like 系统中,正是有了驱动程序才使得用户可以完全透明的使用计算机系统。设备驱动隐藏了硬件设备的具体的细节和功能,对于不同的硬件设备都提供了一致的接口。比如在 Linux 系统中,为了便于用户的使用,系统把计算机系统的各种设备映射成一系列的特殊的设备文件,叫设备文件节点。用户可以任意的使用它来协助自己完成任何工作。在 Linux 系统中,所有的设备都可归为三类之列,一是字符设备,如键盘等;二是块设备,如磁盘等;第三种就是用于网络的网络设备,这类设备主要是用于网络通讯中,在其他的地方没有什么特别使用。
一、 设备驱动程序的三个主要组成部分
1、 自动配置和初始化子程序;
2、 为 I/O 提供服务的子程序;
3、 中断子程序;
二、 设备驱动入口点分析
此处以字符设备为例列举设备驱动程序的入口点
1、 open 入口点:设备 I/O 操作之前进行的操作,打开了设备后准备 I/O 操作;
2、 close 入口点:对设备操作完成之后对设备的关闭操作;
3、 read 入口点:完成对设备的 open 操作之后就可以以此入口点在设备上读取数据;
4、 write 入口点:完成对设备的 open 操作之后就可以以此入口点在设备上写入数据;
5、 ioctl 入口点:在设备上执行 I/O 控制操作;
6、 select 入口点:在数据写入或读取之前对设备的检测操作。
三、 Linux 系统下的设备驱动程序
以下借用 Linux 系统内核的代码来分析字符设备驱动程序
1 、以下是入口点的结构体定义:
#/usr/include/linux/fs.h
struct file_operations {
struct module *owner;
loff_t (*llseek) (struct file *, loff_t, int);
ssize_t (*read) (struct file *, char *, size_t, loff_t *);
ssize_t (*write) (struct file *, const char *, size_t, loff_t *);
int (*readdir) (struct file *, void *, filldir_t);
<