2014-08-28 68 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); 

本文節選顯示了陷阱我遇到了一些解決方案。所以我展示瞭如何獲得所有參數。