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