15.ARM处理器的启动流程

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了15.ARM处理器的启动流程相关的知识,希望对你有一定的参考价值。

15.ARM处理器的启动流程

ARM处理器启动流程涉及三方面的知识:

  1. 启动方式
  2. 地址布局
  3. 启动流程

S3c2440的ARM处理器的启动流程:

2440支持

Nor Flash启动,Nor Flash的大小2MB

????Nand Flash启动,Nand Flash的大小256MB

所以2440把uboot和kernel、FileSystem放到Nand Flash来启动的

地址布局:

Nand Flash Memory Mapping:

技术分享

技术分享

上图左边的结果是选择Nor Flash时启动时内存地址的布局,右边是选择Nand Flash启动的内存地址的布局。

开发板上电后,会在地址0处取第一条地址来执行。如果是Nor Flash,0地址就应该安排上Nor Flash,并把代码放在Nor Flash的最前端。

Nand Flash的启动:Nand Flash不想Nor Flash等可以直接访问,它的访问需要寄存器实现。所以Nand Flash不用参与ARM处理器的统一编址。既然Nand Flash不能参加统一编址,那么0地址处安排的是什么呢?从上图可以看到,安排的是BootSRAM,是处理器片内的RAM,大小4KB大小。

?

BootSRAM和Nand Flash的关系:

其实BootSRAM的别名是stepping stone,垫脚石。当选择从NandFlash启动后,处理器会把NandFlash最前端的4KB,自动的复制到stepping stone去运行,这样我们可以理解为系统一上电,回去运行NandFlash最前端的4KB里的内容。这是启动的第一个环节。第二个环节,在前面复制了4KB的代码到stepping stone里去,可是bootloader通常不止4KB,剩下的代码就复制到了开发板的内存。开发板上电后先到NandFlash去把最前端的4KB拷贝到stepping stone运行,运行了之后跳转到内存,bootloader剩下代码的存放地方,继续执行,最后加载操作系统。

?

看S3C2440.pdf手册的信息:搜索steppingstone:

技术分享

S3C2440A boot code can be executed on an external NAND flash memory. In order to support NAND flash bootloader, the S3C2440A is equipped with an internal SRAM buffer called ‘Steppingstone‘. When booting, the first 4KBytes of the NAND flash memory will be loaded into Steppingstone and the boot code loaded into Steppingstonewill be executed.

Generally, the boot code will copy NAND flash content to SDRAM. Using hardware ECC, the NAND flash datavalidity will be checked. Upon the completion of the copy, the main program will be executed on the SDRAM.

可以看到上面的内容与文档的内容一致的。

从上图Nand Flash Memory Mapping里看到,内存是SDRAM,内存的开始地址是0x30000000:

技术分享

?

?

?

?

?

?

?

6410的启动方式:

打开S3C6410X.pdf手册,搜索:得到:

技术分享

上图是6410启动的支持方式,NandFlash启动,和SD卡启动属于IROM(Internal ROM),看到6410支持的启动方式很多,可以通过OM(Operation Modern)来设置的。

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

6410地址布局:

技术分享

可以看到Stepping Stone是从0x0C000000,内存是从0x50000000开始的,这就是以后烧写裸机的常用地址。知道开发板上电后,是从0地址开始执行的。从上图知道,6410的0地址到128MB。该地址的表示Description是:Booting Device Region by XOM Setting,标识Note:Mirrored Region镜像区域。其实这个镜像区域是用来映射的,从上面的启动方式知道,6410支持从IROM启动、Nor Flash启动、OneNand启动。实现的机制是在0地址处存放的是镜像文件,然后当选择每一种启动方式的时候,比如Nor Flash启动,系统会把Nor Flash启动需要的代码映射到该镜像文件去执行。当选择IROM启动的时候,系统会把IROM启动需要的代码映射到该映象去执行。以此类推,这样就实现了多种模式启动。

?

如果选择的是Nand Flash启动,开发板的启动流程:

首先打开:S3C6410_Internal_ROM_Booting.pdf文档:

知道NandFlash是属于IROM启动的一种,选择懂IROM启动,当开发板上电之后,因为此时IROM被映射到了开发板的0地址处去执行。IROM里面存放的是芯片生产厂商,给大家固化好的软件,我们称之为BL0,0阶段的Bootloader,这些代码除了完成硬件的初始化以外,它还会把我们放在NandFlash里面的BL1,最前面的8KB拷贝到Stepping Stone运行。Stepping Stone运行完后,处理器会接着把uboot剩下的代码BL2拷贝到SDRAM内存里去运行。这就是6410和2440不同的地方之一。

查看:S3C6410_Internal_ROM_Booting.pdf

技术分享

技术分享

技术分享

技术分享

iROM(BL0) boot-up diagram

技术分享

技术分享

?

Memory Map:

技术分享

全局变量:

技术分享

技术分享

设备复制功能:

技术分享

技术分享

NandFlash的复制功能:

技术分享

技术分享

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

210处理器:

210启动方式:

技术分享

技术分享

技术分享

技术分享

210除了6410的启动方式外,还支持串口启动,USB启动。

接下来看210的IROM、内存、垫脚石位于哪些位置。

在芯片手册里找到:

技术分享

上表就是210的地址映射表。IROM起始地址:0xD0000000,垫脚石IRAM地址:0xD0020000零地址处是跟6410一样的采用映射的方式。内存在0x20000000处开始。

?

查看S5PV210_iROM_ApplicationNote_Preliminary_20091126.pdf文档,

查看210的启动流程:

技术分享

技术分享

技术分享

在上图中,同理IROM(BL0)同样是芯片厂商固话好的软件,做硬件的初始化。固件同时会把Bootloader第一个阶段的代码BL1拷贝到Stepping Stone去执行。210的Stepping Stone是96KB(6410是8KB)。由于垫脚石的增大,所以系统拷贝完BL1代码后,考虑把BL2的代码也拷贝到垫脚石去运行。如果垫脚石容不下了,就会拷贝到内存去执行。从表下的说明知道BL1最大容量是16KB,BL2是80KB。

iROM(BL0) boot-up sequence

技术分享

V210 boot-up diagram

?

技术分享

技术分享

技术分享

?

?

?

?

?

?

iROM 2nd boot-up sequence when 1st boot fail

技术分享

技术分享

Memory Map

技术分享

技术分享

技术分享

?

?

?

?

?

全局变量:

技术分享

设备复制功能:

技术分享

技术分享

技术分享

NandFlash:

技术分享

技术分享

以上是关于15.ARM处理器的启动流程的主要内容,如果未能解决你的问题,请参考以下文章

ARM处理器启动流程

Zynq启动流程

STM32的中断处理流程是怎样的?与ARM7 ARM9相同吗?

Linux启动流程

Linux启动流程

Linux启动流程