《LINXU设备驱动程序》 第一章 设备驱动程序简介

来源:互联网 发布:java filereader 方法 编辑:程序博客网 时间:2024/04/29 17:57

第一章主要介绍了以下几方面的内容:

  1. 设备驱动程序的作用
  2. 内核功能的划分
  3. 设备和模块的分类
  4. 安全问题
  5. 版本编号
  6. 许可证条款
其中重点:设备驱动程序的作用、内核 功能的划分、设备和内核的分类、安全问题

1.设备驱动程序的作用:设备驱动程序是位于内核和硬件设备间的软件层,将系统调用映射到作用于实际硬件的设备特有操作上,就是设备驱动程序的任务。

  • 机制而非策略:即驱动程序的编写,要提供功能,即能做什么,而不是提供如何做。
  • 考虑的3个因素:1、提供给用户尽量多的选项。2、编写驱动的时间。3、尽量保持程序简单
  • 不带策略驱动程序包典型特征:1、同时支持同步和异步操作。2、驱动程序可以被多次打开。3、充分利用硬件特性。4、不具备用来“简化任务”的或提供与策略相关的软件层
2.内核功能划分:进程管理、内存管理、文件系统、设备控制、网络功能

  • 进程管理:进程创建、销毁、输入输出、通信、共享cpu调度器。
  • 内存管理:为进程创建虚拟内存空间、内核与内存管理子系统交互时的函数调用
  • 文件系统:unix基本每个对象多可作文件看待、物理介质上数据的组织方式。
  • 设备控制:几乎每个系统操作都会映射到物理设备上。
  • 网络功能:大多数网络操作与具体进程无关:数据包传入是异步事件、收集标示分发数据包、应用程序和网络接口传递数据包、根据网络活动控制程序执行、路由和地址解析

可以用insmod和rmmod程序装卸载模块到正在运行的内核。

3.设备和模块的分类:三种基本类型:字符模块、块模块、网络模块。
  • 字符设备:1、能够像字节流一样被访问的设备,由字符设备驱动程序来实现。2、至少包括open、close、read、write系统调用。3、字符设备可通过文件系统节点访问/dev/tty1等。4、和普通文件唯一差别:普通文件的访问可以前后移动访问位置,大多数字符设备只能顺序访问数据通道(数据区特性的字符设备除外)。
  • 块设备:1、通过文件系统节点访问。2、容纳文件系统。3、进行I/O操作时块设备每次只能传输一个活多个完整块。4、linux可以用应用程序一次传递任意多个字节数据。5、块设备与字符设备的区别:内核内部管理数据的方式即内核与驱动程序间的软件接口。
  • 网络接口:1、和其他主机进行交换数据的设备(可以使硬件设备也可以是软件接口如loopback)。2、网络子系统负责发送接收数据包。3、许多网络连接面向流,网设备部是面向流。4、网络接口映射到文件系统节点困难,网络接口的名字不存在对应于文件系统的节点。5、内核和网络设备驱动程序通信完全不同于字符、块。
文件系统不是设备驱动程序,因为没有任何实际物理设备同这种信息组织方式相关联。但是,文件系统类型是个软件驱动程序,将底层数据结构映射到高层数据结构。解析文件系统信息的功能位于内核层次结构的最底层。

4.安全问题:原则性概念
  • 安全检查由内核代码进行。只有收钱用户才能装载模块
  • 驱动程序编写者尽量避免在代码中实现安全策略。
  • 避免自身原因引入的安全缺陷:比如c缓冲区
  • 其他原则性安全概念:1、用户进程得到输入需要经过内核严格验证后才能使用。2、小心对待未初始化的内存:从内核得到的内存提供给用户需要清零等初始化操作。3、如果设备要解释和分析发送给它的数据,必须确保用户不能将可能破坏系统的任何东西发送给它。4、考虑设备操作可能造成的影响

小心第三方软件。

5.版本编号:通常稳定版本为偶数,而奇数版本为咖啡过程中的一个快照。