驱动映射地址问题
在TE2440开发板中写一个简单的驱动,在Init函数中将物理地址起始地址为0x1000_0000的32个地址映射为虚拟地址。将驱动编译完成后生NK.BIN文件,将NK.bin文件烧到开发板中。系统崩溃,断电重启后bootloader也不能启动。请问是什么原因。程序代码为#define FPGA_BASE_REG (0x10000000)
static volatile FPGA_MEM_REG *v_pIOPregs;
typedef struct {
UINT32 ulAddr; // Port A - offset 0
} FPGA_MEM_REG, *PFPGA_MEM_REG;
DWORD FPG_Init(DWORD dwContext)
{
v_pIOPregs = (volatile FPGA_MEM_REG *)VirtualAlloc(0, sizeof(FPGA_MEM_REG), MEM_RESERVE, PAGE_NOACCESS);
if (v_pIOPregs == NULL)
{
DEBUGMSG (1,(TEXT("v_pIOPRegs is not allocated\n\r")));
isSuccess = 0;
//return TRUE;
}
else
{
if (!VirtualCopy((PVOID)v_pIOPregs, (PVOID)(FPGA_BASE_REG>>8), sizeof(FPGA_MEM_REG), PAGE_PHYSICAL|PAGE_READWRITE|PAGE_NOCACHE))
{
isSuccess=0;
DEBUGMSG (1,(TEXT("v_pIOPRegs is not mapped\n\r")));
}
//return TRUE;
}
if(!isSuccess)
{
if(v_pIOPregs)
{
VirtualFree((PVOID)v_pIOPregs,0,MEM_RELEASE);
}
v_pIOPregs=NULL;
}
RETAILMSG(1, (TEXT("::: FPG_InitS.\r\n")));
return isSuccess;
}
将映射部分注释掉后重新编译生成的NK.bin文件烧写后不影响bootloader。 不都是将虚拟地址映射为物理地吗? 我用的是nGCS2片选,在驱动里面访问nGCS2的地址(0x10000000)怎么实现? 这部分程序有错误吗?谢谢! 怎么没有理了呀。谢谢!
页:
[1]