硬件采用nandflash,nandflash为8位数据宽度,没有dataflash和norflash。
Nandflash空间分配为 bootstrap + u-boot + env + linux 。
|
| bootstrap | | u-boot | env | | linux |
|______________________________________________________________________________
0x0 0x1000 0x20000 0x60000 0x80000 0x200000
0 4K 128K 384K 512K 2M
uboot的启动参数中定义linux内核镜像在Nandflash中的位置。
uboot的CFG_NAND_BASE定义Nand起始地址。(起始地址为0x40000000,结束地址0x4FFFFFFF,共256M)
uboot的CFG_NAND_DBW_8定义数据宽度。
内存空间分配(起始地址0x2000 0000,结束地址0x2400 0000,共64M)
|
| | env | | linux | | u-boot |
|
0x2000 0000 0x100 0x2040 0000 0x23F0 0000
0 63M
uboot中CFG_LOAD_ADDR定义RAM中linux的load address。
CFG_ENV_OFFSET定义env在NandFlash的起始地址,CFG_ENV_OFFSET_REDUND定义env在NandFlash的结束地址,CFG_ENV_SIZE定义env在Nandflash中的空间大小。
board/atmel/at91sam9260ek/config.mk定义TEXT_BASE,其为u-boot在内存中的起始地址。
待解决:env在内存中位置????
(board/atmel/at91sam9260ek/at91sam9260ek.c--àboot_params)
答:env在内存中的空间是由malloc分配的(env_common.c中的env_relocate()),因此其在内存中的位置是一直变化的。每次系统启动时,env在内存中位置可能都不一样。
K9F2G08U0B大小为256MB,2048块(0-2047),每块大小为128KB。
起始地址:0。
启动区:mtd0 占4块
参数区1:mtd1 占1块
内核区:mtd2 占64块
固件备份区:mtd5 实际应用8M即可,占用64块
需确保NandFlash空间无坏块:0~69 165~230(两块区间)