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. LeetCode Valid Parenthesis String

    原题链接在这里:https://leetcode.com/problems/valid-parenthesis-string/description/ 题目: Given a string conta ...

  2. CentOS中使用Shell脚本实现每天自动备份网站文件和数据库并上传到FTP中(转)

    http://www.jb51.net/article/58843.htm 一.安装Email发送程序 复制代码 代码如下: yum install sendmail mutt 二.安装FTP客户端程 ...

  3. textView 添加超链接(两种实现方式)

    在textView添加超链接,有两种方式,第一种通过HTML格式化你的网址,一种是设置autolink,让系统自动识别超链接,下面为大家介绍下这两种方法的实现 在textView添加超链接,有两种方式 ...

  4. 大数据竞赛平台——Kaggle 入门篇

    这篇文章适合那些刚接触Kaggle.想尽快熟悉Kaggle并且独立完成一个竞赛项目的网友,对于已经在Kaggle上参赛过的网友来说,大可不必耗费时间阅读本文.本文分为两部分介绍Kaggle,第一部分简 ...

  5. java求10!的阶乘

    package com.aaa; //求10!的阶乘 public class Cheng { public static void main(String[] args) { int s=1; fo ...

  6. Py修行路 python基础 (十五)面向对象编程 继承 组合 接口和抽象类

    一.前提回忆: 1.类是用来描述某一类的事物,类的对象就是这一类事物中的一个个体.是事物就要有属性,属性分为 1:数据属性:就是变量 2:函数属性:就是函数,在面向对象里通常称为方法 注意:类和对象均 ...

  7. get与post两种方式的优缺点

    get: get是从服务器上获取数据,post是向服务器传送数据: get传送的数据量较小,不能大于2KB.post传送的数据量较大,一般被默认为不受限制.但理论上,IIS4中最大量为80KB,IIS ...

  8. 仿照admin写一个startk组件

    settings.py INSTALLED_APPS = [ 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.conten ...

  9. Spring Cloud Eureka 5 (服务发现与消费-简单的robbin使用)

    通过上述介绍,我们已经有了服务注册中心和服务提供者 下面我们来尝试构建一个服务的消费者 它要完成两个功能,发现服务和消费服务,其中发现服务由eureka客户端完成,消费服务由ribbon完成. rib ...

  10. aop计算方法耗时

    package necs.omms.common.aop; import lombok.extern.apachecommons.CommonsLog;import org.apache.common ...