arm core:为执行汇编程序的核心部件
rom:厂家固化的代码,用于在arm上电后执行,将nand flash中大小如sram的前面代码(bootloader代码)拷贝到sram中,并cpu跳到sram的0x0位置
sram(片内,4k):在执行nand flash中前小段代码(4kb左右),初始化sdram/ddr,并将nand flash中剩余的bootloader代码拷贝到sdram中,最后跳入sdram中继续执行
sdram:mini2440的内存,当从sram中进入sdram后,开始执行bootloader的其余代码,加载内核到内存(内核存在于内存),加载完后进入内核继续正常运行
Nor flash:带有通用的sram的接口,可以直接访问内存,启动时候零地址指向norflash,适合做代码存储并EIP的
nand flash:常用于存放较大的数据
mini2440启动时,从0x00开始执行,其分为nand flash和nor flash上启动。
arm启动的时候内部结构大致如下:
1.Nor flash的有自己的地址线和数据线,可以采用类似于存储器的随机访问方式,在nor flash上可以直接运行程序,所以nor flash可以直接用来做boot,采用nor flash启动的时候会把地址映射到0x00上。mini2440就是直接把vivi直接烧录在nor flash上。
2.Nand flash是IO设备,数据、地址、控制线都是共用的,需要软件区控制读取时序,所以不能像nor flash、内存一样随机访问,不能EIP(片上运行),因此不能直接作为boot。
Mini2440把Bootloader烧到nand flash上启动,因为在mini2440里有一个内置的SRAM,叫做stepping stone(垫脚石),系统启动加电后,会把nand flash上的起始4KB的内容拷贝到SRAM里执行,这样就实现了从nand flash启动。如果bootloader小于4KB的话(像vboot),在SRAM里就能boot,大于4KB的话(u-boot,vivi),在SRAM里做一些基本初始化后,再把bootloader的剩余部分拷贝到SDRAM里(>0x30000000)。
我们使用mini2440的时候,经常通过nor flash启动,进入vivi的菜单(mini2440的Nor flash已经烧录好了vivi),之后通过vivi的usb下载功能,把其他的bootloader下在到nand flash里,下载完成后,再通过nand flash启动,测试我们的bootloader。