用户的活动通过一套标准化的调用来进行,这些调用与特别的驱动是独立的;
设备驱动的角色就是将这些调用映射到作用于实际硬件的和设备相关的操作上
机制与策略
机制:提供什么功能,策略:如何使用这些功能。我的理解:机制应该是提供的最小的基础功能集合,策略是在机制之上的组合和扩展。
编写内核代码来存取硬件,但是不能强加特别的策略给用户。驱动只保证硬件可用,把如何使用硬件交给应用程序。
驱动是存在于应用程序和实际设备间的软件层。
对策略透明的驱动一些典型的特征:
- 支持同步和异步操作
- 可以多次打开
- 利用硬件全部能力
- 没有软件层来“简化事情”或者提供策略相关操作
内核功能划分
- 进程管理,创建、销毁、与外部的连接(进程输入输出)、进程间通信、共享CPU(调度)
- 内存管理,虚拟地址空间等等
- 文件系统,
- 设备管理,驱动程序
- 网络功能,系统负责在应用程序和网络接口之间传递数据包
设备分类
- 字符设备,大多数字符设备是一个只能顺序访问的数据通道
- 块设备,每次只能传送一个或多个完整的块
- 网络设备
安全问题
只有有授权的用户才可以加载模块
开发者应该避免把安全策略编入驱动代码中
一些安全观念:
- 从用户进程接收到的数据应该持极大的怀疑态度
- 小心对待未初始化的内存,从内核分配的内存应该清零活在使用之前初始化,否则可能发生信息泄露
- 如果设备解析发送给他的数据,确保用户不能发送任何危及系统的东西
- 考虑一下设备操作的后果,操作应该授权特定的用户