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. test20181219 奇怪的函数

    题意 奇怪的函数 [问题描述] 使得x^x达到或超过n位数字的最小正整数x是多少? [文件输入] 输入一个正整数n(n<=2*10^9). [文件输出] 输出使得x^x达到n位数字的最小正整数x ...

  2. fn project 打包Function

      Option 1 (recommended): Use the fn cli tool We recommend using the fn cli tool which will handle a ...

  3. ArcGIS_Desktop安装步骤

      1.双击镜像文件 2.下一步 3.关闭 4.下一步 5.下一步 6.下一步 7.下一步 8.下一步 9.安装 10.一直到下一步安装完成

  4. dubbo-demo安装运行指南

    步骤步骤:1.安装JDK:2.安装Tomcat:3.安装Zookeeper:4.安装Dubbo: 修改Consumer配置文件

  5. eclipse怎么在项目里面批量替换单词

    先选中你要替换的东东,然后再菜单栏中找到Search→Text→Project(先创建要搜索的project),这样就会在整个项目中查找单词.然后在Search的Console中,单击项目,右键选择R ...

  6. 【Http认证方式】——Basic认证

    访问请求:http://192.168.2.113:8080/geoserver/rest/workspaces时,浏览器弹出窗口需要输入用户名和密码  ,并且,如果不输入或者输入错误,浏览器返回  ...

  7. 搭建Dynamic Web Project(动态web项目)的springmvc工程2

    本文转载自:http://blog.csdn.net/typa01_kk/article/details/45905129 此篇为“创建Dynamic Web Projec工程,”搭建Dynamic ...

  8. zufeoj 分数线划定

    分数线划定 时间限制: 1 Sec  内存限制: 128 MB提交: 13  解决: 7[提交][状态][讨论版] 题目描述 世博会志愿者的选拔工作正在 A 市如火如荼的进行.为了选拔最合适的人才,A ...

  9. oracle 12c使用问题总结

    1.无法登录 安装完毕只能使用system和sys用户,用安装时配置的密码登录:不能使用默认密码 2.远程无法访问 1)检测服务器配置 lsnrctl status 看到(DESCRIPTION=(A ...

  10. java成神之——线程操作

    线程 Future CountDownLatch Multithreading synchronized Thread Producer-Consumer 获取线程状态 线程池 ThreadLocal ...