设备驱动程序DeviceDrivers嵌入式系统设备驱动程序和内核接口Linux内核必须能够用标准的方式和设备驱动程序交互
每一类的设备驱动程序:字符、块和网络,都提供了通用的接口供内核在需要请求它们的服务的时候使用
这些通用的接口意味着内核可以完全相同地看待通常是非常不同的设备和它们的设备驱动程序
例如,SCSI和IDE磁盘的行为非常不同,但是Linux内核对它们使用相同的接口
Linux非常地动态,每一次Linux内核启动,它都可能遇到不同的物理设备从而需要不同的设备驱动程序
Linux允许你在建立内核时通过配置脚本,将设备驱动程序包含在内核中
在系统启动时,这些设备驱动程序初始化,此时它们可能没有发现自己可以控制的任何硬件
其它驱动程序可以在需要的时候作为内核模块加载
为了处理设备驱动程序的这种动态特性,设备驱动程序要在它们初始化时向内核登记
Linux维护已经登记的设备驱动程序列表,作为和它们接口的一部分
这些列表包括了例程指针和支持这一类设备的接口信息
字符设备字符设备,Linux中最简单的设备,可以象文件一样访问
应用程序使用标准系统调用打开、读、写和关闭字符设备,完全把它们作为普通文件一样对待
甚至正在被PPP守护进程使用,用于将一个Linux系统连接到网上的modem,也被看作一个普通文件
当字符设备初始化时,它的设备驱动程序向Linux内核登记,在chrdevs向量表增加一个device_struct数据结构条目
这个设备的主设备标识符(例如对于tty设备是4),用作这个向量表的索引
一个设备的主设备标识符是固定的
Chrdevs向量表中的每一个条目,即一个device_struct数据结构,包括两个元素:一个是指向登记的设备驱动程序名字的指针;另一个是指向一组文件操作的指针
这组文件操作本身位于这个设备的字符设备驱动程序中,每一个都处理一个特定