renzhg1011 发表于 2013-3-1 21:27:22

驱动映射地址问题

在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。

飞凌-路飞 发表于 2013-3-2 10:03:04

不都是将虚拟地址映射为物理地吗?

renzhg1011 发表于 2013-3-3 10:55:20

我用的是nGCS2片选,在驱动里面访问nGCS2的地址(0x10000000)怎么实现?

renzhg1011 发表于 2013-3-4 23:37:53

这部分程序有错误吗?谢谢!

renzhg1011 发表于 2013-3-5 22:39:57

怎么没有理了呀。谢谢!
页: [1]
查看完整版本: 驱动映射地址问题