|
做应用的需要一片固定的内存,我在Config.bib中划好,在驱动里增加了MmIOMapSpace和MmIOUnMapSpace以及对应的IOCTL,在驱动内部测试,这片内存可以正常访问,map以及unmap。
我用IOCTL为应用返回这片内存的物理及虚拟地址,为什么在应用中使用该虚拟地址操作这片内存就会Data Abort??
- // Request Application Memory
- if ( !DeviceIoControl(hCamDrv, IOCTL_VDC_REQUEST_APPLICATION_MEMORY, &ApplicationMemoryArgs, sizeof(VDC_APPLICATION_MEMORY_ARGS), NULL, 0, &dwBytes, NULL) )
- {
- RETAILMSG(CAMTEST_ERR,(L"[CAMTEST:ERROR] IOCTL_VDC_REQUEST_APPLICATION_MEMORY Failed\n"));
- goto CleanUp;
- }
- else
- {
- printf("[CAMTEST:INFO] APPLICATION MEMORY: Phisical Address = 0x%08x \r\n", ApplicationMemoryArgs.dwPhysicalAddress);
- printf("[CAMTEST:INFO] APPLICATION MEMORY: Virtual Address = 0x%08x \r\n", ApplicationMemoryArgs.pVirtualAddress);
- printf("[CAMTEST:INFO] APPLICATION MEMORY: Capacity = %d \r\n", ApplicationMemoryArgs.dwCapacity);
- printf(" Test Access to Application Buffer:\r\n");
- tmp = ApplicationMemoryArgs.pVirtualAddress;
- printf(" Before Access: %d \r\n", *tmp);
- *tmp = 3;
- //memset(ApplicationMemoryArgs.pVirtualAddress, 3, ApplicationMemoryArgs.dwCapacity);
- printf(" After Access: %d \r\n", *tmp);
- }
复制代码
Physical Address 和 Virtual Address 以及 Capacity 都可以正常打印出来。
|
|