1、启动方式

s3c2440:可以从Nor flash启动,Nor flash一般是2MB;也可以从Nandflash启动,它一般是256MB,我们习惯上把我们的uboot,内核以及文件系统都放到Nandflash里面去,选择开发板从nandflash启动。

当2440从nandflash启动的时候,其地址布局是怎样的呢?

打开芯片手册

当处理器上电之后,它会从哪儿去取它的第一条指令呢,会从0地址处去取它的第一条指令。如果说是从nor flash来启动,0地址处应该安排我们的nor flash,然后编写的代码应该放在nor flash的最前端,否则cpu去取指令会取不到。如果说从nandflash启动的话,上图右面看不到nandflash,由于我们的nandflash是不能直接访问的,它必须通过相应寄存器才能访问到,所以它不能直接 参与arm处理器的统一编址,那么nandflash没有参与统一编址,那么0地址处又是安排的什么呢,是bootsram,它是片内的sram,其大小为4kb,那么到底bootsram和nandflash是什么样的关系呢,实际上bootsram还有一个名称称为steppingstone;实际上我们选择从nandflash启动后,一上电我们的处理器会首先自动从nandflash中把最前端的4kB复制到steppingstone里面去,换句话说,就是处理器就间接取到了nandflash里面的内容。由于我们的bootloader一般不止4KB,那么nandflash后面的字节该怎么办呢,那么剩下的就要复制到内存里面去了,那么谁来做复制这个工作呢,就是前面的4KB里面的代码会做这个工作,那么到底是不是这样子操作的呢,到芯片手册里去搜索steppingstone关键词

s3c6410:打开芯片手册S3C6410X,搜寻一个关键词booting,

首先,它支持SROM启动(也就是NOR flash启动),在我们的6410当中没有必要采用NOR flash启动,并不是说它不支持nor flash启动;然后,支持onenand方式启动,它是一种特殊的nandflash,它既具有nor flash的特性,也具有nandflash的特性;然后是支持从MODEM启动;最后是支持IROM启动,实际上SD卡启动和nandflash启动都是划归在IROM下面的;IROM是我们处理器内部的部件或者说存储器,IROM并不是2440里面的垫脚石,

到底从什么地方启动,我们可以设置前面的引脚来决定到底从哪儿启动,

s5pv210:首先打开一个文档,S5PV210_UM,找到523页

从上图可以清晰地看到210的启动模式,支持IROM启动(其中包括SD卡启动,NAND FLASH启动)、支持USB、串口等启动方式。

2、地址布局

s3c2440:那么它从nandflash启动,那么我们芯片的地址布局是怎样的呢,打开芯片手册S3C2440这个文档,搜寻一个关键词MAPPING,找到如下:

上面有两个表,左边表示我们选择从Nor flash启动时,地址的布局,右边表示我们从Nandflash启动时,地址的布局。那么当处理器上电后,它会从哪儿去取它的第一条指令呢,它会从0地址处去取第一条指令;如果我们是从nor flash启动,那么0地址处应该安排我们的nor flash,那么我们的代码应该放在nor flash的最前端,否则,cpu去取指令,发现没有指令或者错误指令,那么cpu 也没有办法继续运行了。如果我们从nandflash启动,从右边表中没有看到nandflash,而且nandflash它不能直接访问,也就是说不能像内存一样直接去访问它,它必须通过一些寄存器才能访问到,所以说它不能直接参与arm处理器的统一编址,也就在上面右边看不到了,那么nandflash没有参与统一编址,那么0地址处安排的是什么呢?0地址处排布的是BootSRAM,它实际上是处理器片内的一个RAM,它有4kb的大小,它还有一个名字叫做stepping stone,“垫脚石”。那么它是没有统一编址的nandflash是什么关系呢?实际上,我们一旦上电之后,且选择从nandflash启动之后,我们的处理器首先会自动地把nandflash最前端的4kb数据复制到stepping stone里面去,那么我们的处理器就间接地取到了nandflash里面的内容,然后cpu再去运行stepping stone里面的代码,实际上cpu就是运行的nandflash里面最前端的4kb的内容,那么硬件自动复制了nandflash前面的4kb过来,通过我们的bootloader不只有4kb,那剩下的bootloader怎么办呢?那么剩下的部分就要复制到内存里面来了,因为stepping stone已经存不下了,那么谁来做复制这个工作呢?当然就是前面的4kb的bootloader,它除了做一些硬件上的初始化,它还必须把剩下的代码复制到内存,且运行完stepping stone里面的4kb程序之后,然后跳转到内存里面去执行下面的代码。

那么我们还得关心我们的内存,那么内存在什么地方呢?

这个内存起始地址是处理器要求这么安排的!

s3c6410:

在地址布局当中我们首先还是关心的以下几个部件:

1、IROM在那个位置?

2、stepping stone?

3、内存是DRAM,在0x5000 0000地址开始的位置。

还要注意,因为我们的ARM处理器一上电,它是从我们的0地址处开始执行代码,那么我们就很关心,在我们6410的0地址处究竟放的是什么东西呢, 该地址处是Booting Device Region by XOM Setting,这是一个启动区域,靠XOM来设置,它是一个Mirrored region,镜像区域。它的性质是不放任何设备,是用来映射的。如果我们选择从IROM启动,那么会把IROM映射到我们的镜像区域里面来,可以把IROM理解为0地址,那么一旦上电就可以从IROM里面取内容来运行。如果选择其他方式启动,也是同样映射到镜像区域里面来;

s5pv210:

IROM大小为64KB,地址在0XD000 0000开始;有没有垫脚石呢?其实在地址0xD002 0000开始的位置96KB的IRAM就是我们的垫脚石;

对于0地址处,是启动区域,也是采用的映射方式,与6410一样。

内存:在0x2000 0000开始的地址处,

3、启动流程

s3c6410:如果选择从nandflash来启动,那么它的启动流程是怎样子的呢?

打开另外一个文档S3CJ6410_Internel_ROM_Booting,

我们已经知道nandflash启动是属于IROM启动当中的一种,我们上电之后,我们选择从IROM启动,我们IROM映射到0地址处,所以我们的处理器首先是从IROM当中去取第一条指令,IROM里面存放的是什么东西呢?其实IROM里面存放的是芯片厂商给我们固化好了的一些程序,这个程序通常称为BL0,即bootloader的第0阶段。这段代码除了做一些硬件的初始化外,它还会做一些工作,把我们nandflash里面的bootloader1,BL1,是nandflash最前面的8KB,拷贝到我们的stepping stone里面来运行,那么我们的BL1就到我们的stepping stone里面来运行了,在运行的过程当中,我们的bootloader不止8KB还有一段程序留在nandflash里面,那么我们的BL1就会把nandflash剩余的bootloader,即BL2拷贝到SDRAM里面来运行,

s5pv210:打开文档S5PV210_iROM_ApplicationNote_Preliminary_20091126,

我们主要考虑它从nandflash来启动,又由于nandflash是IROM的一个分支,所以他是从IROM方式来启动的,处理器上电后,因为IROM被映射到了0地址处,所以说我们的处理器会从IROM当中去取到第一条指令,IROM当中的代码是芯片厂商已经固化好了的程序,其作用在于初始化一些硬件,然后拷贝nandflash里面的bootloader1即,BL1,的内容到芯片内部的IRAM(SRAM,也就是垫脚石),它的大小为96kb,由于垫脚石比较大,所以我们把nandflash里面的BL2拷贝到垫脚石里面来,如果说nandflash里面还有bootloader,那么就把它拷贝到内存SDRAM里面去,注意对于BL1的大小为16KB,那么BL2最大为80KB,即如果BL2的内容超过了80kb,就要往内存里面复制了。最后我们的bootloader要么在IRAM中运行,要么在内存中运行。

Part4_lesson2---ARM处理器这个硬件启动流程分析的更多相关文章

  1. Uboot启动流程分析(转载)

    最近一段时间一直在做uboot移植相关的工作,需要将uboot-2016-7移植到单位设计的ARMv7的处理器上.正好元旦放假三天闲来无事,有段完整的时间来整理下最近的工作成果.之前在学习uboot时 ...

  2. Uboot启动流程分析(二)

    1.前言 在前面的文章Uboot启动流程分析(一)中,链接如下: https://www.cnblogs.com/Cqlismy/p/12000889.html 已经简单地分析了low_level_i ...

  3. 【UEFI】---史上最全的X86平台启动流程分析(软硬结合)

    最近研究了下X86处理器的启动流程分析,相比于常见的ARM来说,X86平台启动流程真的复杂了很多,本次基于项目实际的两个问题入手,研究了包括以下几个部分的内容: 1. 从硬件角度看启动流程 2. 从软 ...

  4. u-boot启动流程分析(1)_平台相关部分

    转自:http://www.wowotech.net/u-boot/boot_flow_1.html 1. 前言 本文将结合u-boot的“board—>machine—>arch—> ...

  5. imx6 uboot启动流程分析

    参考http://blog.csdn.net/skyflying2012/article/details/25804209 这里以imx6平台为例,分析uboot启动流程对于任何程序,入口函数是在链接 ...

  6. Uboot启动流程分析(一)

    1.前言 Linux系统的启动需要一个bootloader程序,该bootloader程序会先初始化DDR等外设,然后将Linux内核从flash中拷贝到DDR中,最后启动Linux内核,uboot的 ...

  7. u-boot启动流程分析(2)_板级(board)部分

    转自:http://www.wowotech.net/u-boot/boot_flow_2.html 目录: 1. 前言 2. Generic Board 3. _main 4. global dat ...

  8. Netty 拆包粘包和服务启动流程分析

    Netty 拆包粘包和服务启动流程分析 通过本章学习,笔者希望你能掌握EventLoopGroup的工作流程,ServerBootstrap的启动流程,ChannelPipeline是如何操作管理Ch ...

  9. 【转】Netty 拆包粘包和服务启动流程分析

    原文:https://www.cnblogs.com/itdragon/archive/2018/01/29/8365694.html Netty 拆包粘包和服务启动流程分析 通过本章学习,笔者希望你 ...

随机推荐

  1. sublime text3 中设置默认浏览器,并且设置快捷键

    1.打开packageControl   对应快捷键  command + shift + p 2.输入install package 3.安装插件 SideBarEnhancements 4.安装了 ...

  2. WPF 自定义DateControl DateTime控件(转)

    自定义日期控件,月份选择.如下是日期的一些效果图. 具体的样式.颜色可以根据下面的代码,自己调节即可    1.日期控件的界面 <UserControl x:Class="WpfApp ...

  3. mysql数据库备份与还原(转)

    MySQL备份和还原,都是利用mysqldump.mysql和source命令来完成的. 1.Linux下MySQL的备份与还原 1.1 备份 [root@localhost ~]# cd /var/ ...

  4. EM64T和64位是不是一个概念啊?他们有什么区别啊,怎么区分啊?

    首先我们要解决什么是64位这个问题.究竟什么是64位处理器呢?64 bit是相对于32 Bit而言的,这个位数指的是CPU GPRs(General-Purpose Registers,通用寄存器)数 ...

  5. AngularJS:表格

    ylbtech-AngularJS:表格 1.返回顶部 1. AngularJS 表格 ng-repeat 指令可以完美的显示表格. 在表格中显示数据 使用 angular 显示表格是非常简单的: A ...

  6. windows 安装 mysql 5.7.12

    看着官网文档搞了半天,也不知所已,最后还是搜索了一下,还是中文好懂 1 下载解压部分略... 2 添加环境变量 在path后加上xx盘:/xx目录/mysql-5.7.12-winx64/bin 3 ...

  7. PL/SQL 训练01--基础介绍

    --开始介绍变量之前,我们先看下怎么在PLSQL写程序,如下我们写了一个块 declare --声明部分,声明变量 v_name ) :='hello world'; begin --执行区域 dbm ...

  8. FusionCharts simple demo for (html+js、APS.NET Webform、MVC)

    做GIS或其他内部数据统计项目的应该对FusionCharts也不会太陌生,简单易用已无需多说什么了,只是有时候框架不同,实现起来也稍有差异 引用dll调用FusionCharts类的静态方法Rend ...

  9. Oracle数据库Where条件执行顺序

    由于SQL优化起来比较复杂,并且还会受环境限制,在开发过程中,写SQL必须必须要遵循以下几点的原则: 1.ORACLE采用自下而上的顺序解析WHERE子句,根据这个原理,表之间的连接必须写在其他WHE ...

  10. Deep Learning 学习笔记(6):神经网络( Neural Network )

    神经元: 在神经网络的模型中,神经元可以表示如下 神经元的左边是其输入,包括变量x1.x2.x3与常数项1, 右边是神经元的输出 神经元的输出函数被称为激活函数(activation function ...