在TQ2440中使用Nand Flash存储OS,执行是在SDRam中,则下载到SDRam的地址就是直接执行的,
但为什么IMAGE_TYPE_RAWBIN 和IMAGE_TYPE_RAMIMAGE的映射不同,为什么IMAGE_TYPE_RAWBIN 要FILE_CACHE_START 第2页?
---》如果目标系统的需求是要能支持把操作系统的镜像文件下载到FLASH中去,就必须调用OEMMapMemAddr函数。由于FLASH操作速度比RAM慢,在片擦除的时候甚至会使读写操作停滞,这样在每次下载操作系统镜像文件时,由于FLASH的擦写都会使下载停滞。而OEMMapMemAddr使用了RAM缓冲操作系统镜像文件的方式,使得用户在下载操作系统镜像文件时感觉不到停滞,这个函数将FLASH地址映射到RAM地址,这样向FLASH写的数据实际上先被缓冲到RAM中,然后再写到FLASH中
TQ2440开发板的FILE_CACHE_START定义如下:
#define FILE_CACHE_START (0x80200000 | CACHED_TO_UNCACHED_OFFSET)
//= 0xA020_0000 , out of range of RAM
其中#define CACHED_TO_UNCACHED_OFFSET 0x20000000
这样FILE_CACHE_START = 0xA020_0000
这个地址并不在SDRAM的地址范围,