概述
设备驱动程序使某个特定硬件响应一个定义良好的内部编程接口,这些接口隐藏了设备的工作细节。用户的操作通过一组标准化的调用执行,而这些调用独立于特定的驱动程序。将这些调用映射到作用于实际硬件的设备特有操作上,则是设备驱动程序的任务。
设备驱动程序的作用
驱动程序作用在于提供机制,而不是策略。
大多数编程问题实际上可以分成两部分:需要提供什么功能(机制),如何使用这些功能(策略)。这两个部分由程序不同部分来处理,或者甚至由不同的程序来处理,则这个软件包更容易开发。
驱动程序应该处理如何使用硬件可用的问题,而将怎么样使用硬件的问题留给上层应用程序。从另一角度看,驱动程序使应用程序与实际设备之间的软件层。
不带策略的驱动程序包括一些典型特征:同时支持同步和异步操作,驱动程序能够被多次打开,充分利用硬件特性等。
内核功能划分
- 进程管理
负责创建销毁进程,处理它们和外部世界的连接。处理进程通信,进程调度。 - 内存管理
内核为每个进程都创建了一个虚拟地址空间,内核不同部分在和内存管理子系统交互时都是用一组函数调用,包括malloc/free。 - 文件系统
Unix中每个对象几乎都可以当做文件,内核在没有结构的硬件上构造结构化的文件系统,而文件抽象在整个系统中广泛使用。Linux支持多种文件系统,也就是在物理介质上组织数据不同的方式。 - 设备控制
几乎每一个操作系统最终都会映射到物理设备上,除了处理器,内存及其他有限几个对象,所有设备控制操作都由与被控制设备相关的代码完成,这段代码就叫驱动程序。内核必须为每件外设嵌入相应的驱动程序,包括键盘,磁带驱动器。 - 网络功能
大部分网络操作与具体进程无关,数据包的传入是异步事件。在某个进程处理这些数据包之前必须收集,标识,和分发这些数据包。系统负责在应用程序和网络接口之间传递数据包,
可装载模块
内核提供的特性可在运行时进行扩展。insmod将模块连接到正在运行的内核,也可使用rmmod移除连接。
设备和模块分类
linux系统将设备分三类,每个模块通常实现为其中一类:字符模块,块模块,网络模块。
- 字符设备:
像字节流一样被访问的设备,字符设备驱动程序至少要实现open,close,read,write系统调用。字符终端和串口就是两个字符设备。字符设备可通过文件系统节点来访问,如/devtty1和/dev/lp0。 - 块设备
块设备也是通过/dev目录下的文件系统节点访问,块设备能够容纳文件系统,进行I/O操作时块设备每次只能传输一个或多个完整的块,而每块包含512字节(2的更高次幂字节数)。因此,块设备和字符设备的区别在于内核管理数据的方式。 - 网络接口
任何网络事务都经过一个网络接口形成,即一个能够和其他主机交换数据的设备。许多网络连接是面向流的,但网络设备却围绕数据包的传输和接收设计。网络驱动程序不需要知道各个连接的相关信息,只需要处理数据包即可。
由于不是面向流的设备,因此将网络接口映射到文件系统中的节点比较难,Unix访问网络接口的方法仍然是分配一个唯一的名字(如eth0),但这个名字在文件系统中不存在对应的节点。
最后
以上就是烂漫灰狼为你收集整理的Linux驱动程序简介的全部内容,希望文章能够帮你解决Linux驱动程序简介所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复