首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 嵌入开发 > 驱动开发 >

虚拟设备驱动程序

2012-12-14 
求助 虚拟设备驱动程序DMA需要直接访问物理内存,如何编写一个WINDOWS虚拟设备驱动程序用于申请一段物理内

求助 虚拟设备驱动程序
DMA需要直接访问物理内存,如何编写一个WINDOWS虚拟设备驱动程序用于申请一段物理内存?
有相关开发经验的朋友请联系我,能帮忙解决者,有重谢!
[最优解释]
你还是把最终需求描述一下比较好。也许有别的解决方案。
[其他解释]
需求补充: 
要直接使用PC主板的SATA端口读写硬盘数据,DMA方式送传数据;
要避开WINDOWS XP 操作系统对硬盘的控制,我们的程序直接读取硬盘的工作状态,直接控制硬盘读写过程,这个部分我们已经有解决方案;
现在的问题是:如何得到一段连续的物理内存空间,用于读写DMA数据过程的缓冲区?这也许需要编写一个驱动程序来实现,这就是我求助的要点。
[其他解释]
你的硬盘还用着Windows XP提供的驱动程序么?设备是否还需要支持Windows文件系统?

可以考虑替换系统提供的驱动程序?
[其他解释]
如果替换系统提供的驱动程序能实现预定功能,也是可以接受的方案。  能写出替换的驱动程序吗?
[其他解释]
应该是可以写的。只不过有些设备的驱动比较难写而已。
[其他解释]
好象主板的DMA控制器是集成在南桥中,我可不敢想像自己写程序驱动南桥,老兄是不是有这经验? 
[其他解释]

引用:
好象主板的DMA控制器是集成在南桥中,我可不敢想像自己写程序驱动南桥,老兄是不是有这经验?

难点应该不是去控制南桥。南桥有自己的驱动程序。
难点是用SATA接口去控制你的硬盘芯片,实现硬盘类设备的各种接口。

至于DMA,主要是在硬盘控制芯片里面实现的,主机这边的DMA控制由系统的DMA机制来完成。
[其他解释]
硬盘接受的是具体的符合ATA标准的指令, 这个可以实现. 
主机这边, 也不要Windows系统干涉DMA传输过程,只要划出一块物理内存用就好.

[其他解释]
你的硬盘的基本功能还是需要保留么?
如果不需要,事情会比较容易一点,可以为设备安装一个自有的驱动,只有你自己的程序才能访问,不需要实现硬盘Disk类相关的接口。在驱动里面实现DMA控制,可以获取物理内存进行DMA传输。

如果需要保留硬盘的功能呢,那么得实现现有系统的Disk类的相关接口,同时你可以控制DMA,获取相关的物理内存。
[其他解释]
不需要保留WINDOWS对硬盘的任何功能, 对Windows来说,不需要知道硬盘的存在,我们的程序自动识别自由管理.
[其他解释]
可以考虑实现一个非Disk类的驱动程序来替换系统自带的Disk程序。

可以参考WDK例子:7600.16385.1\src\general\ioctl\wdm,或者IOCTL

其中DMA实现部分,可以可以参考例子:7600.16385.1\src\storage\msahci 或者:
StorAhci StorPort Miniport Driver

热点排行