本文共 1795 字,大约阅读时间需要 5 分钟。
i.MX53 NAND Flash
最近在做i.mx53,对于将所有的映像烧进NAND Flash,有N多不理解。通过上网查资料和自己的总结,写了一下,如下:
因为bootloader,kernel parameter,kernel,rootfs都需要存储在NAND Flash上,故NAND Flash就得统一规划。将一整个大的空间分成N个分区,哪一个分区放什么,不能乱放。Uboot将内核参数放在指定的地址上,然后将控制权交给内核,内核也是去指定的地址读取传递给它的参数。所以NAND Flash的分区,uboot和内核要统一!
Uboot中对NAND Flash的划分
定义在uboot/include/configs/board.h
/*phy3250’s NAND Flash,32MB 16K size(Block,Sector)*/
#define CFG_ENV_SIZE 0x4000 /*1 block ,16k*/
#define CFG_ENV_OFFSET 0x168000 /*90 blocks in total*/
这里uboot将32MB的NAND分成一个扇区为16K(即0x4000),则总共有32MB/16K=90个扇区。
Uboot以扇区为单位对NAND进行操作。
另例:
/*SmartARM NAND Flash,K9F2G08,256MB,128K size(Block,Sector)*/
#define CFG_ENV_SIZE 0x40000 /*2 block,256K*/
#define CFG_ENV_OFFSET 0x180000 /*6 blocks in total*/
这里uboot以每2个扇区为单位进行操作,即128K*2=256K,0x40000B/1024=256KB
而这块NAND Flash总共会被划分出256MB/0x40000=6个扇区。
Kernel中对Nand Flash的划分
分区用途 地址划分 扇区范围 大小
Bootloader 0x0000_0000~0x0018_0000 0~11 block 总共12个扇区,1.5MB
Kernel parameter 0x0018_0000~0x001C_0000 12~13 block 总共2个扇区uboot传给内核的参数
reserved 0x001C_0000~0x0020_0000 14~15 block 保留2个扇区
kernel 0x0020_0000~0x0060_0000 16~47 block 总共32个扇区,4MB
rootfs 0x0060_0000~0x1000_0000 48~2047 block 总共2000个扇区,250MB
从内核arch/arm/mach-mx5/mx53_ard.c中找到了NAND的分区信息:
/*MX53 ROM require the boot FCB/DBBTsupport which need more space to store such info on NAND boot partition.16Mshould cover all kind of NAND boot support on MX53*/
/*NAND Flash Partitions*/
Static struct mtd_partitionnand_flash_partitions[]={
{
.name=”bootloader”,
.offset=0,
.size=16*1024*1024},
{
.name=”nand.kernel”,
.offset=MTDPART_OFS_APPEND,
.size=5*1024*1024},
{
{
.name=”nand.rootfs”,
.offset=MTDPART_OFS_APPEND,
.size=256*1024*1024},
{
.name=”nand.userfs1”,
.offset=MTDPART_OFS_APPEND,
.size=256*1024*1024},
{
.name=”nand.userfs2”,
.offset=MTDPART_OFS_APPEND,
.size=MTDPART_SIZ_FULL},
};
转载地址:http://kjzji.baihongyu.com/