Chinaunix首页 | 论坛 | 博客
  • 博客访问: 336118
  • 博文数量: 92
  • 博客积分: 2500
  • 博客等级: 少校
  • 技术积分: 960
  • 用 户 组: 普通用户
  • 注册时间: 2009-08-21 19:38
文章分类

全部博文(92)

文章存档

2010年(71)

2009年(21)

我的朋友

分类: 嵌入式

2010-04-23 16:12:23

NAND FLASH 启动过程及分区配置

这里有几篇博客很值得借鉴:

http://blog.sina.com.cn/s/blog_52009a100100hjmc.htmlARM的位置无关程序设计在Bootloader中的应用)

http://blog.sina.com.cn/s/blog_52009a100100hcv1.html(关于UbootNOR boot NAND boot问题---基于TQ2440

http://blog.chinaunix.net/u1/34474/index.html(一个很强大的嵌入式博主)

 

NAND FLASH 启动过程:

 

l            2440内部有一个叫做起步石(Steppingstone  SRAM缓冲器,在0x40000000~0x40001000

l            系统启动时Nand flash存储器的前面4K字节被自动拷贝到Steppingstone

l            Steppingstone被映射到nGCS0对应的BANK0存储空间

l            CPUSteppingstone4-KB内部缓冲器中开始执行引导代码

l            引导代码执行完毕后,自动跳转到SDRAM(0x33F80000)执行

 

 

NAND FLASH的分区设置:

arch/arm/plat-s3c24xx/common-smdk.c文件,我们需要设置自己的NAND FLASH分区

这里我们要使nandflash同时支持64M256M

static struct mtd_partition smdk_default_nand_part[] = {

#if defined(CONFIG_64M_NAND)

[0] = {

.name = "boot",

.offset = 0,

.size = SZ_1M,

},

[1] = {

.name = "kernel",

.offset = SZ_1M + SZ_128K,

.size = SZ_4M,

},

[2] = {

.name = "yaffs2",

.offset = SZ_1M + SZ_128K + SZ_4M,

.size = SZ_64M - SZ_4M - SZ_1M - SZ_128K,

}

#elif defined(CONFIG_256M_NAND)

[0] = {

.name = "boot",

.offset = 0,

.size = SZ_1M,

},

[1] = {

.name = "kernel",

.offset = SZ_1M + SZ_128K,

.size = SZ_4M,

},

[2] = {

.name = "yaffs2",

.offset = SZ_1M + SZ_128K + SZ_4M,

.size = SZ_256M - SZ_4M - SZ_1M – SZ_128K,

}

#endif

};

 

这里我们设置了3个系统分区,每个分区都对应一个设备(/dev目录下)

1.       boot=1M->/dev/mtdblock0

2.       kernel=4M->/dev/mtdblock1

3.       yaffs=256M-1M-4M-128K->/dev/mtdblock2(128K是夹在bootkernel中间的系统参数)

 

系统启动后,见打印信息:

Creating  3  MTD partitions on “NAND 256MiB 3 ,3V 8-bit”:

0x000000000000-0x000000100000  :  “boot”

0x000000120000-0x000000520000  :  “kernel”

0x000000520000-0x000010000000  :  “yaffs2”

 

 

UBOOT中通过参数设置实际的NAND FLASH 物理分区:

mtdparts=mtdparts=nandflash0:1m(bios);128k(params);4m(kernel);-(root)

 

 

/board/smdk2410/config.mk

# SMDK2410 has 1 bank of 64 MB DRAM

#

# 3000'0000 to 3400'0000

#

# Linux-Kernel is expected to be at 3000'8000, entry 3000'8000

# optionally with a ramdisk at 3080'0000

#

# we load ourself to 33F8'0000

#

# download area is 3300'0000

#

 

 

TEXT_BASE = 0x33F80000

 

 

 

阅读(2760) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~