x210开发板的三种启动方式(三星推荐的,分散加载,uboot采用的)

1、三星推荐的启动方式

(1)将bl1放在在SRAM中运行,将bl2也在SRAM中运行,就像datasheet中描述那样。

(2)bootloader必须小于96KB并大于16KB,假定bootloader为80KB。

(3)启动过程

  • 先开机上电后BL0运行,BL0会加载外部启动设备中的bootloader的前16KB(BL1)到SRAM中去运行;
  • BL1运行时会加载BL2(bootloader中80-16=64KB)到SRAM中(从SRAM的16KB处开始用)去运行;
  • BL2运行时会初始化DDR并且将OS搬运到DDR去执行OS,启动完成。

x210开发板的三种启动方式(三星推荐的,分散加载,uboot采用的)_第1张图片

x210开发板的三种启动方式(三星推荐的,分散加载,uboot采用的)_第2张图片


2、分散加载(两个链接地址)

文件太大,将整体分割成两个独立的部分bl1和bl2。

(1)分别烧录到sd卡的不同扇区(其中bl1肯定位于第一扇区开始的地方;bl2放在适当的位置,可以由烧录脚本知道bl2放在哪里);

(2)其中bl1在SRAM中运行,把DDR初始化后,将bl2加载到DDR中。

(3)BL1和BL2其实是2个独立的程序,链接时也是独立分开链接的,因此不能使用ldr pc, =main这种方式来通过链接地址实现远跳转到BL2。

  • 使用地址进行强制跳转。因为知道BL2在内存地址0x23E00000处,所以直接去执行这个地址即可。
  • 实现例子见http://blog.csdn.net/oqqhutu12345678/article/details/78942667中第8点。


3、uboot的实现方式

(1)uboot大小随意,假定为200KB。

(2)启动过程

  • 先开机上电后BL0运行,BL0会加载外部启动设备中的uboot的前16KB(BL1)到SRAM中去运行;
  • BL1运行时会初始化DDR,然后将整个uboot搬运到DDR中,然后用一句长跳转(从SRAM跳转到DDR)指令从SRAM中直接跳转到DDR中继续执行uboot直到uboot完全启动。
  • uboot启动后在uboot命令行中去启动OS。

(3)和分散加载的异同

  • 程序代码仍然包括BL1和BL2两部分,但是uboot组织形式上不分为2部分而是作为一个整体来组织。
  • 它的实现方式是:iROM启动然后从SD卡的扇区1开始读取16KB的BL1然后去执行BL1,BL1负责初始化DDR,然后从SD卡中读取整个程序(BL1+BL2)到DDR中,然后从DDR中执行(利用ldr pc, =main这种方式以远跳转从SRAM中运行的BL1跳转到DDR中运行的BL2)。

你可能感兴趣的:(ARM裸机)