Uboot的启动流程

来源:互联网 发布:风刑软件 编辑:程序博客网 时间:2024/04/30 17:40

注:针对S3C2440的uboot 具体参考天嵌的tq2440

在tq2440中有两种启动方式,分别为nor flash和 nand flash。现在就简单的讲一下他们的启动流程以及一些初学者的常见疑问。

从nor flash启动:

nor flash被映射到0x00000000地址(就是nGCS0,这里就不需要片内SRAM来辅助了,所以片内SRAM的起始地址还是原来的0x40000000). 然后cpu从0x00000000开始执行(也就是在Norfalsh中执行)。而在nor flash启动uboot时主要是完成其第一阶段,因为这个阶段是用汇编写的,不需要开辟内存,经过第一阶段后(如关闭看门狗,设置时钟,初始化SDRAM,复制第二阶段到SDRAM,设置好栈并跳转到第二阶段的入口点),程序开始执行uboot的第二阶段去了,也就跑到SDRAM 执行去了。而第二阶段要做的事是将内核,文件系统复制到SDRAM来再运行,而此时的内核和文件系统一般也放在nor flash,不过由于这样的话成本高(下有解释),所以会将内核和文件系统放在nand flash,也就是采用下面一种启动方式

从nand flash启动:

由于nand flash不能直接运行程序,必然导致板子一开机就由于无法启动程序而导致“罢工”,并且nand flash存储器也不是接到bank0的,而是接到bank1(不像nor flash接到bank0,它的起始地址就是0x00000000 ),CPU又是从0x00000000启动的,所以得靠s2c2440内部的RAM也就是SRAM辅助,流程为,板子一上电,SRAM映射到nGCS0片选的空间(即0x00000000),cpu会自动从NAND flash中读取前4KB的数据放置在片内SRAM里,cpu是从0x00000000开始执行,也就是NAND flash里的前4KB内容。所以nand flash的代码运行起来了,只不过是被复制到SRAM中运行的,而不是真的从nand flash上运行的。由于SRAM只有4K容量,所以不能让整个uboot在这4k里跑,只让第一阶段在SRAM跑,而第二阶段跟nor flash一样,复制到SDRAM上跑,当然,nor flash将第二阶段复制到SDRAM是必须的,因为第二阶段是C写的需要RAM,nor flash启动是在nor flash存储器上,而nand flash虽然是在RAM上运行,但是只有4k空间,不够,所以只能将第二阶段搬到SDRAM,

总之,uboot的第一阶段从nor flash启动就是在nor flash存储器本身上跑,从nand flash启动的话就是被复制到SRAM上跑,而第二阶段都是在SDRAM,原因上述了,那么CPU怎么知道程序要从哪种方式启动? 显然靠程序实现是不可能的,因为板子一上电程序就执行了,怎么来得及用软件选择,所以得靠硬件了,

具体采用的方式取决于OM0、OM1两个引脚

OM[1:0所决定的启动方式

OM[1:0]=00时,处理器从NAND Flash启动

OM[1:0]=01时,处理器从16位宽度的ROM启动

OM[1:0]=10时,处理器从32位宽度的ROM启动。

OM[1:0]=11时,处理器从Test Mode启动。

当引脚OM0跟OM1有一个是高电平时,这时地址0会映射到外部nGCS0片选的空间,也就是Norflash,程序就会从Norflash中启动,arm直接取Norflash中的指令运行。 当OM0跟OM1都为低电平,则0地址内部bootbuf(一段4k的SRAM)开始。系统上电,arm会自动把NANDflash中的前4K内容考到bootbuf(也就是0地址),然后从0地址运行。

为什么会有这两种启动方式,关键还是两种flash的不同特点造成,NOR FLASH容量小,速度快,稳定性好,输入地址,然后给出读写信号即可从数据口得到数据,适合做程序存储器。NAND FLASH 总容量大,但是读写都需要复杂的时序,更适合做数据存储器。或者说,NAND FLASH本身是连接到了控制器上而不是系统总线上。CPU启动后是要取指令执行的,如果是SROM、NOR FLASH 等之类的,CPU发个地址就可以取得指令并执行,NAND FLASH不行,因为NAND FLASH是管脚复用,它有自己的一套时序,这样CPU无法取得可以执行的代码,也就不能初始化系统了。例如:str r0,[r1],该命令包含了目的地址和源寄存器,按照cpu的时序将寄存器中的数据保存到内存中。如果想把数据存储到nand flash上,必须按照nand flash的读写时序进行,如先写NFCONF,然后NFCMD,NFADDR,最后读NFDATA(一上电就跑了,怎么来得及设置这些呢^-^)。这种不同就造成了NORflash可以直接连接到arm的总线并且可以运行程序,而NANDflash必须搬移到内存(SDRAM)中运行。


原创粉丝点击