Bootloader 设计蓝图 和 ARM 的启动流程

UBoot源代码的查看

Bootloader对于嵌入式系统就像BIOS相对于Windows操作系统一样,负责启动操作系统。如下图所示:

这里写图片描述

在对Bootloader学习中,可以参考U-Boot代码

U-Boot是用于多种嵌入式CPU( MIPS、x86、ARM等)的bootloader程序,U-Boot不仅支持嵌入式Linux系统的引导,还支持VxWorks, QNX等多种嵌入式操作系统。

可以使用Source Insight软件来查看UBoot源码。

对于UBoot源码的压缩文件,只能在Linux虚拟机中解压缩,因为其中有很多大小写相同的文件,Windows无法区分。

在解压缩之后,在资源管理器工具菜单中,创建映射网络驱动器,将路径设置为UBoot源码的路径。这样就可以在Windows运行的Source Insight软件中导入源代码。

启动Source Insight软件,在Options菜单Document Option命令对话框中可以选择字体,可以设置文本的格式,在C Source File类型下新加入 .s 和 .S 两种文件类型。如下图所示: 

project菜单下新建工程,并导入Uboot源代码,如下图所示: 
 
菜单中选择project,为工程添加文件,选择映射的网络驱动器,点击add tree, 添加文件。 
然后点击close,注意此时 .s 和 .S 文件也应导入。

在Source Insight软件工具栏中点击下面的按钮,并选择“是”,需要等几分钟。 

 
可以连接相同名字的变量和函数,可以快速查找变量的定义,便于编程和调试。

ARM处理器启动流程

Nand Flash 为独立编址,必须通过寄存器才能访问,不参与内存的统一编址。

arm上点之后,首先从内存的0地址处开始读取代码。

2440开发板的启动流程:

S3C2440芯片可以支持从Nor Flash启动和从Nand Flash启动。

S3C2440芯片可以采用外部Nand Flash存储器来存放启动代码。当启动时,Nand Flash存储器中的前4K字节的代码被自动存入芯片中的 一个名为 Steppingstone 或 BootSRAM 的SRAM 中,该部分译名为“垫脚石”,大小为4KB。这部分程序会自动运行,运行的这写代码将flash中剩余代码从flash复制到SDRAM内存中,即复制到地址为0x3000_0000开始的地方,并在内存中继续运行。

2440的地址布局如下: 
这里写图片描述 
右侧为NandFlash启动时地址布局,左侧为NorFlash启动时的地址布局,可以看出2440的SDRAM内存编址从0x3000_0000开始,下载程序也从该位置开始。

6410开发板的启动流程:

6410可以支持从nor flash启动,开发板上没有采用这种方式。6410还支持从one nand flash启动和从modem启动。最后从sd卡和nand flash 启动,这两个都化为iROM的部分。

iROM:internal ROM

可以通过设置相应的引脚可以选择启动方式。 
这里写图片描述 
6410地址布局: 
这里写图片描述 
iROM在0x08000000开始,stepping stone在0x0c000000开始,内存在0x50000000开始,arm上点之后,首先从内存的0地址处开始读取代码。

6410内存0地址处为一个“靠XOM设定的启动设备区域”,这是个镜像区域。用来映射irom或着nor flash或者one nand。例如:如果采用iROM启动,就会将iROM的内容映射到这个区域,上电之后就运行iROM中的内容。

6410上nand flash启动流程: 
这里写图片描述 
1、BL0:bootloader0,第一阶段的运行,厂商固定好的程序,硬件的初始化,把nand flash中的BL1最前面的8KB放入stepping stone 中运行。 
2、BL1把剩余的nand flash中的代码拷贝进入SDRAM内存中,继续运行。

与2440区别:2440会直接把nandflash中的前4k代码送到垫脚石中,然后运行垫脚石中的程序。6410会先运行BL0中的程序,这些程序是厂商烧好的,BL0会把BL1前8k送到垫脚石中。

210开发板的启动流程:

这里写图片描述

210除了支持iROM启动之外,还支持串口、usb等启动方式。

210的地址: 
这里写图片描述

其中,0xD0020000开始的96k的IRAM为垫脚石。0地址处放的仍然是镜像映射。从0x20000000开始的位置是内存。

210启动流程: 
这里写图片描述 
如果采用从iROM启动,则首先仍然是bl0先运行,将bl1和bl2拷入垫脚石中,然后将flash中剩下的拷入内存中。 
bl1最大尺寸是16k,bl2最大尺寸是80k,如果bl2超过80k,就需要把bl2拷入内存中。

与6410的区别,210垫脚石大大增加了,可以把bl2一起拷入垫脚石。6410只能把bl2拷入内存中。

BootLoader设计框架

这里写图片描述 
上图中红色圈为所有开发板都要做的,黄色为部分开发板需要做的。 
6410开发板需要进行外设基地址初始化,210开发板需要进行取消存储保护区,进行iram和irom初始化。

猜你喜欢

转载自blog.csdn.net/u011006622/article/details/89710624