设备驱动程序简介
设备驱动程序简介
参考资料:《Linux设备驱动程序》
概述
1)设备驱动程序是进入Linux内核世界的大门
2)设备驱动程序在Linux内核中扮演着一个个独立的”黑盒子“的角色,它使某个硬件响应一个定义良好的
内部编程接口,并且这些接口隐藏了设备的工作细节;同时这个编程接口使得驱动程序独立于内核的其他部分而建立。
3)用户对驱动程序的操作需要通过一组标准化的调用执行,并且这些调用独立于驱动程序
4)设备驱动程序的任务包含将调用映射到作用于实际硬件设备的特有操作上
5)从另一个角度看,驱动程序可以看做应用程序和实际设备之间的软件层
作用
因为不同的环境需要不同的方式来使用硬件,尽可能让驱动程序只提供功能,而不提供策略
编写驱动程序注意事项
1)编写驱动程序时,不要给用户强加任何特定策略,因为不同的用户有不同的需求,这样驱动程序就会比较灵活
2)驱动程序应该处理如何使硬件可用的问题
3)驱动程序应将怎样使用硬件的问题留给上层应用程序
4)特例:有时我们也需要在驱动程序中实现一些策略,比如某个 数字I/O驱动程序只提供以字节为单位访问硬件的方法,
这样可以避免编写额外的代码来处理单个数据位的麻烦
5)对于相同的设备,不同的驱动程序也可能提供不同的功能,驱动程序应该在多个要考虑的因素之间做出平衡,比如,
某个驱动程序可以同时被多个程序并发使用,此时驱动程序员有权利来决定如何处理并发问题:a.可以在设备上实现
独立于硬件功能的内存映射;b.可以提供一个用户函数库以帮助应用程序开发者在原语基础上实现新的策略等等
6)驱动程序的编写要综合考虑三个方面:a.提供给用户尽可能多的选项;b.编写驱动程序占用的时间;c.尽量保持驱动程序简单而不至于错误丛生
7)不带策略的驱动程序(易于编写和维护)包含一些典型的特征:
a.同时支持同步和异步操作
b.驱动程序能够被多次打开、充分利用硬件特性
c.不具备用来简化任务或提供与策略相关的软件层
设备和模块的分类
Linux将设备分为3种基本类型
字符设备
能够像字节流(类似文件)一样被访问的设备,由字符设备驱动程序来实现这种特性
块设备
和字符设备类似,通过/dev目录下的文件系统节点来访问,可以容纳文件系统
比如,磁盘
网络接口