随锐旗下互动传媒:

从Windows向Linux 迁移设备控制应用程序

http://www.weaseek.com  2008-08-07 10:32:18  来源:搜讯社区

通过认识 Microsoft Windows® 和 Linux® 操作系统设备控制的工作原理,本文将简化从 Microsoft Windows® 向 Linux® 迁移设备控制应用程序。作者分析二者的差别,并给出 C/C++ 示例。

通过认识 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 设备控制架构

Windows 的 I/O 子系统将用户应用程序和设备驱动程序联系起来,并定义基础结构支持设备驱动程序。设备驱动程序为具体设备提供 I/O 接口(参见图 1)。

图 1:Windows 设备控制架构

Windows 设备控制架构

在设备控制过程中,I/O 操作封装为 IRP(I/O 请求数据包)。I/O 管理器创建 IRP,并将它发送到堆栈顶部。然后,设备驱动程序获取 IRP 的堆栈地址。IRP 包含着 I/O 请求的参数。根据 IRP 包含的请求(比如 创建、 读取、写入、设备 I/O 控制、清除 或 关闭),各驱动程序通过硬件接口工作。

Linux 设备控制架构

Linux 的设备控制架构有所不同。主要区别是,Linux 的普通文件、目录、设备和 socket 都是文件 —Linux 的所有东西都是文件。为了访问设备,Linux 内核将设备操作调用通过文件系统映射到设备驱动程序。Linux 没有 I/O 管理器。所有 I/O 请求从开始就进入文件系统(参见图 2)。

图 2. Linux 设备控制架构

Linux 设备控制架构

比较设备文件名和路径名

从开发的角度来看,获取设备句柄是设备控制的先决条件。但是,由于设备控制架构的差异,获取设备句柄会根据所用平台不同(Windows 还是 Linux)而有不同的过程。

一般而言,设备句柄由具体设备驱动程序的名称决定。

Windows 设备驱动程序的文件名不同于普通文件,通常称为设备路径名。它具有固定格式,形如 \.DeviceName。在 C/C++ 编程中,这个字符串应当是 \\.\DeviceName。在代码中表示为 \\\\.\\DeviceName。DeviceName 应当与相应设备驱动程序定义的设备名称相同。

[责任编辑:梧桐]热门关键词: Windows Linux 设备控制