2014-08-28 58 views
1

我有一个在Windows Embedded Compact 2013的内核中运行的驱动程序。驱动程序加载了“Drivers \ BuiltIn”注册表项。它访问一组映射到MmMapIoSpace的HW寄存器。从用户进程访问硬件

访问硬件有一些问题。这就是为什么我想开发用户模式程序中的硬件访问并调试问题。我为此创建了一个VS2013的程序。这就是我们以前使用Windows CE 5.0的方式。

驱动程序将物理地址与MmMapIoSpace映射到进程地址空间。我的程序应该做相同或类似的事情。不幸的是,这在我的程序中不起作用。 MmMapIoSpace返回NULL,LastError = 87(无效参数)。即使CreateStaticMapping也会返回NULL。

如何在无需为每次迭代构建新平台的情况下访问WEC2013中的内存映射寄存器?

回答

1

自WinCE6以来,MmMapIoSpace不再适用于应用程序。 您可能可以创建一个驱动程序,将您的hw-register映射到您的用户进程。您的用户进程将通过对此驱动程序的ioctl调用来获取此指针。 我们用这种方法将一些外部存储器映射到应用程序。 VirtualAllocCopyEx()可以创建到指定进程的映射。 希望,这有助于。问候。

0

对应timmfs答案,我在司机的XXX_IOControl功能实现了这个代码:

PHYSICAL_ADDRESS PhysAddress = { 0 }; 
PhysAddress.LowPart = phys_address; 
PVOID pRegister = MmMapIoSpace(PhysAddress, phys_size, FALSE); 

HANDLE hCallerProcess = (HANDLE)GetCallerVMProcessId(); 
HANDLE hCurrentProcess = (HANDLE)GetCurrentProcessId(); 
PVOID UserSpaceAddress = VirtualAllocCopyEx(hCurrentProcess, hCallerProcess, pRegister, shys_size, PAGE_NOCACHE); 

本文节选显示了陷阱我遇到了一些解决方案。所以我展示了如何获得所有参数。