为什么IMAGE_TYPE_RAWBIN 要FILE_CACHE_START
问题1:
LPBYTE OEMMapMemAddr(DWORD dwImageStart, DWORD dwAddr)
{
if (g_ImageType & IMAGE_TYPE_STEPLDR)
{
dwAddr = (FILE_CACHE_START + (dwAddr - STEPLDR_RAM_IMAGE_BASE));
return (LPBYTE)dwAddr;
}
else
if (g_ImageType & IMAGE_TYPE_LOADER)
{
dwAddr = (FILE_CACHE_START + (dwAddr - EBOOT_RAM_IMAGE_BASE));
return (LPBYTE)dwAddr;
}
else
if (g_ImageType & IMAGE_TYPE_RAWBIN)
{
OALMSG(TRUE, (TEXT("OEMMapMemAddr 0x%x 0x%x\r\n"),dwAddr,(FILE_CACHE_START + dwAddr)));
dwAddr = FILE_CACHE_START + dwAddr;
return (LPBYTE)dwAddr;
}
return (LPBYTE)dwAddr;
}
在TQ2440中使用Nand Flash存储OS,执行是在SDRam中,则下载到SDRam的地址就是直接执行的,
但为什么IMAGE_TYPE_RAWBIN 和IMAGE_TYPE_RAMIMAGE的映射不同,为什么IMAGE_TYPE_RAWBIN 要FILE_CACHE_START?
问题2:
eboot.bib中的内存布局和代码中的怎么很多不一致啊?
BINFS 800B0000 00021000 RESERVED
与
#define BINFS_RAM_START (0x80100000 | CACHED_TO_UNCACHED_OFFSET) // uncached
#define BINFS_RAM_LENGTH 0x21000
FLSCACHE 80200000 01400000 RESERVED ;OS
与
#define ROM_RAMIMAGE_START 0x80000000
#define ROM_RAMIMAGE_SIZE 0x02000000
DISPLAY 80101000 000F0000 RESERVED
与
#define IMAGE_FRAMEBUFFER_UA_BASE 0xA0100000
#define IMAGE_FRAMEBUFFER_DMA_BASE 0x30100000
#define IMAGE_FRAMEBUFFER_UA_BASE_eboot 0xA0101000
#define IMAGE_FRAMEBUFFER_DMA_BASE_eboot 0x30101000
问题2:
eboot.bib中的内存布局和代码中的怎么很多不一致啊?
BINFS 800B0000 00021000 RESERVED
与
#define BINFS_RAM_START (0x80100000 | CACHED_TO_UNCACHED_OFFSET) // uncached
#define BINFS_RAM_LENGTH 0x21000
---》
那要改为#define BINFS_RAM_START (0x800B0000 | CACHED_TO_UNCACHED_OFFSET) // uncached
#define BINFS_RAM_LENGTH 0x21000
总之已boot.bib中定义的值来修改代码
FLSCACHE 80200000 01400000 RESERVED ;OS
与
#define ROM_RAMIMAGE_START 0x80000000
#define ROM_RAMIMAGE_SIZE 0x02000000
---》同上已boot.bib中的设置来修改
DISPLAY 80101000 000F0000 RESERVED
与
#define IMAGE_FRAMEBUFFER_UA_BASE 0xA0100000
#define IMAGE_FRAMEBUFFER_DMA_BASE 0x30100000
#define IMAGE_FRAMEBUFFER_UA_BASE_eboot 0xA0101000
#define IMAGE_FRAMEBUFFER_DMA_BASE_eboot 0x30101000
---》同上已boot.bib中的设置来修改
之所以出现上面的问题,应该是移植或修改过程遗留下来的问题。