通过认识 Microsoft Windows® 和 Linux® 操作系统设备控制的工作原理,本文将简化从 Microsoft Windows® 向 Linux® 迁移设备控制应用程序。作者分析二者的差别,并给出 C/C++ 示例。
如果读者开发过不同平台的设备控制应用程序,那么肯定了解 Windows 和 Linux 的设备控制方式的差别,从一个平台向另一个平台迁移应用程序相当复杂。本文分析两种操作系统的设备控制原理,探究从架构到系统调用的各个方面,重点比较二者差别。本文还给出一个迁移示例(用 C/C++ 编写),详细演示迁移过程。
工作条件:
根据本文的写作目的,“Windows” 是指 Windows 2000 或其后续版本,且安装有 Microsoft Visual C++® 6.0 或其后续版本。Linux应当基于 2.6 版内核,且安装有 GNU GCC。
Windows 和 Linux 设备控制的方式是不同的。
Windows 的 I/O 子系统将用户应用程序和设备驱动程序联系起来,并定义基础结构支持设备驱动程序。设备驱动程序为具体设备提供 I/O 接口(参见图 1)。
图 1:Windows 设备控制架构
在设备控制过程中,I/O 操作封装为 IRP(I/O 请求数据包)。I/O 管理器创建 IRP,并将它发送到堆栈顶部。然后,设备驱动程序获取 IRP 的堆栈地址。IRP 包含着 I/O 请求的参数。根据 IRP 包含的请求(比如 创建、 读取、写入、设备 I/O 控制、清除 或 关闭),各驱动程序通过硬件接口工作。
Linux 的设备控制架构有所不同。主要区别是,Linux 的普通文件、目录、设备和 socket 都是文件 —Linux 的所有东西都是文件。为了访问设备,Linux 内核将设备操作调用通过文件系统映射到设备驱动程序。Linux 没有 I/O 管理器。所有 I/O 请求从开始就进入文件系统(参见图 2)。
本文转自IBM Developerworks中国
本文探讨了Windows和Linux操作系统中设备控制的不同实现方式,并通过具体的C/C++示例展示了如何从Windows迁移到Linux环境下的设备控制应用程序。
1478

被折叠的 条评论
为什么被折叠?



