快捷搜索:   nginx

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

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

    在设备控制过程中,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 设备控制架构 

 [2] [3] [4] 下一页

顶(0)
踩(0)

您可能还会对下面的文章感兴趣:

最新评论