Linux下如何迁移VG及文件系统
通过认识 Microsoft Windows® 和 Linux® 操作系统设备控制的工作原理,本文将简化从 Microsoft Windows® 向 Linux® 迁移设备控制应用程序.作者分析二者的差别,并给出 C/C 示例. 如果读者开发过不同平台的设备控制应用程序,那么肯定了解 Windows 和 Linux 的设备控制方式的差别,从一个平台向另一个平台迁移应用程序相当复杂.本文分析两种操作系统的设备控制原理,探究从架构到系统调用的各个方面,重点比较二者差别.本文还给出一个迁移示例(用 C/C 编写),详细演示迁移过程. 工作条件: 比较设备控制的架构 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 设备控制架构 拥有帝国一切,皆有可能。欢迎访问phome.net 比较设备文件名和路径名 从开发的角度来看,获取设备句柄是设备控制的先决条件.但是,设备控制架构的差异,获取设备句柄会根据所用平台不同(Windows 还是 Linux)而有不同的过程.
一般而言,设备句柄由具体设备驱动程序的名称决定. Windows 设备驱动程序的文件名不同于普通文件,通常称为设备路径名.它具有固定格式,形如 .DeviceName.在 C/C 编程中,这个字符串应当是 \.DeviceName.在代码中表示为 \\.\DeviceName.DeviceName 应当与相应设备驱动程序定义的设备名称相同. 有些设备名称由 Microsoft 定义,因此不能修改(如表 1 所示). 表 1. Windows 设备名称(x = 0,1,2 等)
例如,我们在 C/C 编程中使用设备路径名,比如 \\.\PhysicalDrive1、\\.\CdRom0 和 \\.\Tape0. 关于这个列表未收录的其他设备的详细情况,请查看本文后面的 参考资料 小节. Linux 将设备描述为文件,可以在目录 ./dev 中找到所有设备文件.这个目录的设备驱动程序包括:
常见设备文件大多可以按照上述描述找到.有关其他设备文件名和设备的详细信息,请使用命令 dmesg.
拥有帝国一切,皆有可能。欢迎访问phome.net 比较主系统调用 设备控制的主系统调用包括下列操作:打开、关闭、I/O 控制、读 |
||||||||||||||
凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |