15.ARM处理器的启动流程

摘要:
启动方法地址布局S3c2440 ARM处理器的启动过程:NandFlash的大小为256MB,因此2440在NandFlash中放置uboot、内核和FileSystem以启动地址布局:上图左侧的结果是启动NorFlash时的内存地址布局,右侧是启动NandFlash时的存储器地址布局。开发板通电后,转到NandFlash将前端4KB复制到Steppingstone以运行。

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:

15.ARM处理器的启动流程第1张

15.ARM处理器的启动流程第2张

上图左边的结果是选择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:

15.ARM处理器的启动流程第3张

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:

15.ARM处理器的启动流程第4张

6410的启动方式:

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

15.ARM处理器的启动流程第5张

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

6410地址布局:

15.ARM处理器的启动流程第6张

可以看到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

15.ARM处理器的启动流程第7张

15.ARM处理器的启动流程第8张

15.ARM处理器的启动流程第9张

15.ARM处理器的启动流程第10张

iROM(BL0) boot-up diagram

15.ARM处理器的启动流程第11张

15.ARM处理器的启动流程第12张

Memory Map:

15.ARM处理器的启动流程第13张

全局变量:

15.ARM处理器的启动流程第14张

15.ARM处理器的启动流程第15张

设备复制功能:

15.ARM处理器的启动流程第16张

15.ARM处理器的启动流程第17张

NandFlash的复制功能:

15.ARM处理器的启动流程第18张

15.ARM处理器的启动流程第19张

210处理器:

210启动方式:

15.ARM处理器的启动流程第20张

15.ARM处理器的启动流程第21张

15.ARM处理器的启动流程第22张

15.ARM处理器的启动流程第23张

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

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

在芯片手册里找到:

15.ARM处理器的启动流程第24张

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

查看S5PV210_iROM_ApplicationNote_Preliminary_20091126.pdf文档,

查看210的启动流程:

15.ARM处理器的启动流程第25张

15.ARM处理器的启动流程第26张

15.ARM处理器的启动流程第27张

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

iROM(BL0) boot-up sequence

15.ARM处理器的启动流程第28张

V210 boot-up diagram

15.ARM处理器的启动流程第29张

15.ARM处理器的启动流程第30张

15.ARM处理器的启动流程第31张

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

15.ARM处理器的启动流程第32张

15.ARM处理器的启动流程第33张

Memory Map

15.ARM处理器的启动流程第34张

15.ARM处理器的启动流程第35张

15.ARM处理器的启动流程第36张

全局变量:

15.ARM处理器的启动流程第37张

设备复制功能:

15.ARM处理器的启动流程第38张

15.ARM处理器的启动流程第39张

15.ARM处理器的启动流程第40张

NandFlash:

15.ARM处理器的启动流程第41张

15.ARM处理器的启动流程第42张

免责声明:文章转载自《15.ARM处理器的启动流程》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇搜索插件——autocompletemysql 修改大表字段,报错ERROR 1878 (HY000): Temporary file write failure. 用pt-online-schema-change下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

rocketmq 修改broker和namesrv默认设置的堆内存大小

broker的堆内存的启动脚本在     C:UsersAdministratorDesktop ocketmq-all-4.7.1-source-releasedistributionin文件夹下面  可以看到 其堆内存为8g 可以根据实际情况对其进行调整 JAVA_OPT="${JAVA_OPT} -server -Xms1g -Xmx1g -Xmn...

Spring Boot 使用 XXL-JOB

一、配置部署调度中心 1.1 下载源码 https://github.com/xuxueli/xxl-job 1.2 数据库初始化 执行 /xxl-job/doc/db/tables_xxl_job.sql 1.3 修改配置 /xxl-job/xxl-job-admin/src/main/resources/application.properties...

linux添加开机自启动脚本示例详解

linux下(以RedHat为范本)添加开机自启动脚本有两种方法,先来简单的;一、在/etc/rc.local中添加如果不想将脚本粘来粘去,或创建链接什么的,则:step1. 先修改好脚本,使其所有模块都能在任意目录启动时正常执行;step2. 再在/etc/rc.local的末尾添加一行以绝对路径启动脚本的行;如:$ vim /etc/rc.local#...

linux网络编程-socket(1)

 上面是对应的IpV4的地址结构: sin_len整个结构的大小 sin_family协议族,对应Tcp固定为AF_INET,除了tcp协议外还支持unix域协议等 sin_port socket通信的端口 sin_addr是一个无符号的32位的网络字节地址 上面的结构体仅仅支持IPv4地址协议,如果支持其他协议咱办了,后面引入了通用协议的地址协议 在...

linux的自启动服务脚本的(/etc/rc.d/init.d或者其链接/etc/init.d)

转载地址:http://www.cnblogs.com/diyunpeng/archive/2009/11/11/1600886.html Linux有自己一套完整的启动体系,抓住了linux启动的脉络,linux的启动过程将不再神秘。 本文中假设inittab中设置的init tree为: /etc/rc.d/rc0.d/etc/rc.d/rc1.d/e...

Mac pycharm更换版本后打不开

1.第一步:先输入:   cd /Applications/PyCharm.app/Contents/MacOS 2.第二步:查看无法打开pycharm的原因,需要输入:c./pycharm 3.第三步:下面就是展示的分析日志:其中许多小伙伴都找不到 网上说的这个地址“cd /Users/用户名/Library/Preferences/PyCharm201...