linux设备驱动–设备驱动程序简介
内核功能划分
根据内核完成任务的不同,可将内核功能分成如下几部分:
- 进程管理
进程管理功能负责创建和销毁进程,并处理它们和外部世界之间的连接(输人输出)。不同进程之间的通信(通过信号、管道或进程间通信原语)是整个系统的基本功能,因此也由内核处理。除此之外,控制进程如何共享CPU的调度器也是进 程管理的一部分。概括来说,内核进程管理活动就是在单个或多个CPU上实现了 多个进程的抽象。 - 内存管理
内存是计算机的主要资源之一,用来管理内存的策略是决定系统性能的一个关键因素。内核在有限的可用资源之上为每个进程都创建了一个虚拟地址空间。内核的不 同部分在和内存管理子系统交互时使用一组函数调用、包括简单的malloc/free函数对以及其他一些复杂的函数。 - 文件系统
Unix在很大程度上依赖于文件系统的概念,Unix中的每个对象几乎都可以当作文 件来看待。内核在没有结构的硬件上构造结构化的文件系统,而文件抽象在整个系 统中广泛使用。另外,Linux支持多种文件系统类型,也就是在物理介质上组织数据的不同方式。例如,磁盘可以格式化为符合Linux标准的ext3文件系统,也可格式化为常用的FAT文件系统或者其他种类。 - 设备控制
几乎每一个系统操作最终都会映射到物理设备上。除了处理器、内存以及其他很有
限的几个对象外,所有设备控制操作都由与被控制设备相关的代码来完成,这段代
码就叫做驱动程序。内核必须为系统中的每件外设嵌人相应的驱动程序,这包括硬盘驱动器、键盘和磁带驱动器等。这方面的内核功能将是本书讨论的主题. - 网络功能
网络功能也必须由操作系统来管理,因为大部分网络操作和具体进程无关:数据包 的传人是异步事件.在某个进程处理这些数据包之前必须收集、标识和分发这些数据包。系统负责在应用程序和网络接口之间传递数据包,并根据网络活动控制程序 的执行。另外,所有的路由和地址解析问题都由内核处理。
结构图如下:
可装载模块
Linux有一个很好的特性:内核提供的特性可在运行时进行扩展.可在运行时添加到内核中的代码被称为“模块"。
设备和模块的分类
- 字符设备
字符(char)设备是个能够像字节流(类似文件)一样被访问的设备、 由字符设备 驱动程序来实现这种特性。 字符设备驱动程序通常至少要实现open、close、read和write系统调用。
字符终端(/del/console) 和串口(/dev/ttys0以及类似设备)就是两个字符设备,它们能够很好地说明 “流” 这种抽象概念。字符设备可以通过文件系统节点来访问,比如/dev/ttyl和/dev/lp0等。 - 块设备
和字符设备类似 , 块设备也是通过/dev目录下的文件系统节点来访间。块设备( 例如磁盘)上能够容纳文件系统。 在大多数Unix系统中, 进行1/0操作时块设备每 次只能传输一个或多个完整的块, 而每块包含512字节(或2的更高次幕字节的数据)。Linux可以让应用程序像字符设备一样地读写块设备,允许一次传递任意多字节的数据。因而,块设备和字符设备的区别仅仅在干内核内部管理数据的方式,也 就是内核及驱动程序之间的软件接口, 而这些不同对用户来讲是透明的。 - 网络接口
任何网络事务都经过一个网络接口形成,即一个能够和其他主机交换数据的设备。通常,接口是个硬件设备,但也可能是个纯软件设备,比如回环(loopback)接口。网络接口由内核中的网络子系统驱动,负责发送和接收数据包,但它不需要了解每 项事务如何映射到实际传送的数据包。 许多网络连接(尤其是使用TCP协议的连 接)是面向流的,但网络设备却围绕数据包的传输和接收 而设计,网络驱动程序不需要知道各个连接的相关信息, 它只要处理数据包即可。由于不是面向流的设备, 因此将网络接口映射到文件系统中的节点(比如Idevi ttyl)比较困难。Unix访问网络接口的方法仍然是给它们分配一个唯一的名字(比如eth0),但这个名字在文件系统中不存在对应的节点.
许可证条款
Linux遵循GNU通用公共许可证(GeneralPublic License, GPL)