mini2440及其他类型的开发板一般都有从
nand flash和
nor flash启动两种方式,那么这两种启动方式有什么区别呢,初学者一般都会一头雾水。下面就讲讲这两种启动方式的区别。
mini2440的nand flash128M,而nor flash只有2M,系统的bootloader一般很小,只有200多KB,而作为一个完整的系统,需要bootloader(200KB),kernel(2M),rootfs(100M),这些加起来就有100多M了,这三个部分需要一直存在系统中,掉电非易失,当然就不能放在内存(SDRAM)中了,需要放在非易失存储器nandflash中,norflash因为很小(2M)只可以容纳的下bootloader,所以mini2440的nandflash中存放bootloader(200KB),kernel(2M),rootfs(100M),norflash存放bootloader。因此mini2440既可以从nandflash启动也可以从norflash启动,但是运行操作系统的话只能从nandflash启动,从nand flash启动的时候整个操作系统也并不是在nand flash中运行,而是映射到内存SDRAM中运行。值得注意的是,在norflash启动模式下进入bootloader菜单项,可以通过DNW下载程序或文件到nandflash中,也可以把nandflash中的东西上传到PC机,而并不是只能在norflash和PC机之间传送文件和程序等。
S3C2440的启动时读取的第一条指令是在0x00上,分成nandflash和norflash上启动。
norflash有自己的地址线和数据线,可以采用类似于memory的随机访问方式,在norflash上可以直接运行程序,所以norflash可以直接用来做boot,采用norflash启动的时候会把地址映射到0x00上。mini2440就是直接把vivi直接烧录在norflash上。
nandflash是IO设备,数据、地址、控制线都是共用的,需要软件区控制读取时序,所以不能像norflash、内存一样随机访问,不能EIP(片上运行),因此不能直接作为boot。
S3C2440把bootloader烧到nandflash上启动,因为在S3C2440里有一个内置的SRAM,叫做steppingstone(垫脚石,很形象…),系统启动加电后,会把nandflash上的起始4KB的内容拷贝到SRAM里执行,这样就实现了从nandflash启动。如果bootloader小于4KB的话(像vboot),在SRAM里就能boot,大于4KB的话(u-boot,vivi),在SRAM里做一些基本初始化后,再把bootloader的剩余部分拷贝到SDRAM里(>0x30000000)。
//=================================================================//注:bootloader是在操作系统内核运行之前运行的一段小程序。通过这段小程序,我们可以初始化硬件设备、建立内存空间的映射图,从而将系统的软硬件环境带到一个合适的状态,以便为最终调用操作系统内核准备好正确的环境。通常,bootloader是严重地依赖于硬件而实现的,特别是在嵌入式世界。因此,在嵌入式世界里建立一个通用的bootloader几乎是不可能的。尽管如此,我们仍然可以对BootLoader归纳出一些通用的概念来,以指导用户特定的bootloader设计与实现。
//=================================================================//
我们使用S3C2440的时候,经常通过norflash启动,进入vivi的菜单(S3C2440的norflash已经烧录好了vivi),之后通过vivi的USB下载功能,把其他的bootloader下载到nandflash里,下载完成后,再通过nandflash启动,测试我们的bootloader。
norflash适合做代码存储并EIP的,nandflash适合用来作大量数据存储的。
Nandflash启动:nandflash存储器的前4K将被自动加载到Steppingstone(内部SRAM缓冲器),然后系统自动执行这些载入的启动代码,这4K的启动代码需要将nandflash中的内容复制到SDRAM中执行。nandflash的前4K空间放启动代码,SDRAM速度较快,用来执行主程序的代码。
//================================================================//
注:SDRAM(SynchronousDynamicRandomAccessMemory),同步动态随机存储器,同步是指Memory工作需要同步时钟,内部的命令的发送与数据的传输都以它为基准;动态是指存储阵列需要不断的刷新来保证数据不丢失;随机是指数据不是线性依次存储,而是自由指定地址进行数据读写。
//=================================================================//