15.ARM处理器的启动流程

发布者:心灵律动最新更新时间:2024-10-30 来源: cnblogs关键字: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:


关键字:ARM  处理器  启动流程 引用地址:15.ARM处理器的启动流程

上一篇:16.U-boot的工作流程分析-2440
下一篇:14.Bootloader设计思路

推荐阅读最新更新时间:2026-03-19 18:05

Part4_lesson2---ARM处理器这个硬件启动流程分析
1、启动方式 s3c2440:可以从Nor flash启动,Nor flash一般是2MB;也可以从Nandflash启动,它一般是256MB,我们习惯上把我们的uboot,内核以及文件系统都放到Nandflash里面去,选择开发板从nandflash启动。 当2440从nandflash启动的时候,其地址布局是怎样的呢? 打开芯片手册 当处理器上电之后,它会从哪儿去取它的第一条指令呢,会从0地址处去取它的第一条指令。如果说是从nor flash来启动,0地址处应该安排我们的nor flash,然后编写的代码应该放在nor flash的最前端,否则cpu去取指令会取不到。如果说从nandflash启动的话,上图右面看不到na
[单片机]
Part4_lesson2---<font color='red'>ARM</font><font color='red'>处理器</font>这个硬件<font color='red'>启动</font><font color='red'>流程</font>分析
ARM-Linux移植之(三)——init进程启动流程分析
我们通常使用Busybox来构建根文件系统的必要的应用程序。Busybox通过传入的参数来决定执行何种操作。当init进程启动时,实际上调用的是Busybox的init_main()函数,下面我们来分析这个函数,看init进程究竟是怎样一个流程。我分析的Busybox源码是1.7.0版本的,其他版本会略有不同。部分代码省略我们只看关键性代码。 首先看init_main函数 int init_main(int argc, char **argv); int init_main(int argc, char **argv) { …………………………….. …………………………….. //初始化控制台 console_i
[单片机]
系统上电后 bootloader的执行流程ARM Linux的启动过程分析
1. 引 言 Linux 最初是由瑞典赫尔辛基大学的学生 Linus Torvalds在1991 年开发出来的,之后在 GNU的支持下,Linux 获得了巨大的发展。虽然 Linux 在桌面 PC 机上的普及程度远不及微软的 Windows 操作系统,但它的发展速度之快、用户数量的日益增多,也是微软所不能轻视的。而近些年来 Linux 在嵌入式领域的迅猛发展,更是给 Linux 注入了新的活力。 一个嵌入式 Linux 系统从软件角度看可以分为四个部分 :引导加载程序(bootloader), Linux 内核,文件系统,应用程序。 其中 bootloader是系统启动或复位以后执行的第一段代码,它主要用来初始
[单片机]
arm2440 启动流程详细分析
要分析arm2440的启动流程,先得了解arm2440的硬件配置,在arm2440这款cpu里面没有什么存储的芯片,除了以个4kb的SRAM(静态存储器可以运行程序,但是最重要的一点就是掉电就失掉所有的数据)注意这4kb是cpu自己的不是外设的的。好了现在讲述下启动的流程。(一下是从nand flash 启动) 1、首先机器上电,从外部的nand flash 的0x0000-0x01000也就是前4kb的内容通过硬件的办法来拷贝到我们的cpu内部的4kb的SRAM里面,并且把这个地址映射成起始地址,也就是说把cpu的sp指针指向内部的4kb的SRAM的0x0000地址,开始运行。 备注:(具体的在硬件上怎么拷贝到cpu内部的SRA
[单片机]
Android arm linux kernel启动流程
写这个总结的时候咱的心情是沉重的,因为还有好多东西没弄明白。。。感叹自己的知识还是浅薄得很,前途钱途漫漫阿~~不过基本脉络是清楚的,具体的细节只能留在以后有时间再啃了。这里的第二部分启动流程指的是解压后kernel开始执行的一部分代码,这部分代码和ARM体系结构是紧密联系在一起的,所以最好是将ARM ARCHITECTURE REFERENCE MANUL仔细读读,尤其里面关于控制寄存器啊,MMU方面的内容~ 前面说过解压以后,代码会跳到解压完成以后的vmlinux开始执行,具体从什么地方开始执行我们可以看看生成的vmlinux.lds(arch/arm/kernel/)这个文件: view plaincopy to
[单片机]
ARM开发板启动流程(从NandFlash启动
S3C2440从nandflash启动依赖片内部件SDRAM(Stepping Stone)大小4KB位于ARM空间的0地处。Nandflash不能参与统一编址,在地址空间以外。处理器上电时会自动从Nandflash最前端拷贝出4KB的内容复制到SteppingStone中,接着PC指针指向0地址即StepingStone中所保存的第一条指令。除去4KB剩下的代码从Nandflash拷贝到内存当中。 S3C6410上电后首先运行SROM里的bootloder0,bootloder0将会从Nandflash最前端拷贝出8KB的内容到SRAM当中。剩余的拷贝到内存里。
[单片机]
【IMX6ULL学习笔记】八、Linux启动流程
一、链接脚本 vmlinux.lds Linux 内核的链接脚本文件 arch/arm/kernel/vmlinux.lds 中有如下代码: ENTRY 指明了了 Linux 内核入口,入口为 stext,stext 定义在文件 arch/arm/kernel/head.S 中。 二、Linux 内核启动流程分析 1、Linux 内核入口 stext stext 是 Linux 内核的入口地址,在文件 arch/arm/kernel/head.S 中有如下所示提示内容: /* * Kernel startup entry point. * --------------------------- * * This is
[单片机]
【IMX6ULL学习笔记】八、Linux<font color='red'>启动</font><font color='red'>流程</font>
STM32F10X启动流程
总体流程 1.初始化堆栈指针 SP=_initial_sp,初始化 PC指针=Reset_Handler 2.初始化中断向量表 3.配置系统 4.调用 C库函数_main初始化用户堆栈,然后进入 main函数。 STM32三种启动流程 mode=0x 从flash 启动,正常模式 mode=10 从系统存储器启动 串口下载程序模式 mode=11 内置SRAM 启动 用于程序调试 ;******************** (C) COPYRIGHT 2011 STMicroelectronics ********************;* File Name : startup_stm32f10x
[单片机]
小广播
最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

厂商技术中心

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

 
机器人开发圈

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2026 EEWORLD.com.cn, Inc. All rights reserved