转载:ARM上电启动及Uboot代码分析

网上关于ARM的bootloader(以Uboot为例)的启动顺序的资料有好多,但是对于Uboot的地址映射、体系结构级操作介绍很少,都是直接开始Start.s代码的阅读。本文拟详细分析Uboot从上电,到第一条指令的执行,同时分析代码对于cache、TLB等部件的操作过程。

以下内容以u-boot-2012.04.01源码为例,从网上很容易下载该版本。

1 ARM上电取第一条指令流程
1.1 上电后的第一条指令在哪里?
首先明确:对于ARM芯片,启动时pc值由CPU设计者规定,不同的ARM CPU有不同的值,例如S3C2440芯片上电后PC值被硬件设计者规定为0x0;其他ARM芯片不一定是0x0。

第一章讲述的上电取第一条指令过程以S3C2440为例,该芯片是ARMv4T架构,其他芯片在原理上类似。

S3C2440的启动时读取的第一条指令是在内存0x00地址处,不管是从nand flash还是nor flash启动。

但是上电后内存中是没有数据的,那么0x00地址处的指令是如何放进去的?针对不同的flash(nandflash、norflash),操作方式是不同的,下面讲述从nandflash和norflash启动的不同流程。

1.1.1  norflash和nandflash的异同
nandflash:价格低,容量大,适合大容量数据存储,地址线和数据线共用I/O线,所有信息都通过一条线传送,类比于PC的硬盘,

norflash:价格贵,容量小,适合小容量的程序或数据存储,类似硬盘,但是能在其中运行程序;有独立地址线、数据线

sdram:主要用于程序执行时的程序存储、执行或计算,类比于PC的内存;

综上:norflash比较适合频繁随即读写的场合,通常用于存储代码并直接在其中运行。nandflash用于存储资料。

只要知道以上大概区别就行。以下说明ARM从两种flash启动方式的异同。

1.1.1.1  ARM从nandFlash启动
若从nandflash启动,上电后nandflash控制器自动把nandflash存储器中的0——4K内容加载到芯片内的起步石(Steppingstone,起步石这个机制是处理器中集成的功能,对程序员透明),即内部SRAM缓冲器中,同时把内部SRAM的起始地址设置为0x0(不同的CPU上电后的PC值不尽相同,对不同的CPU该值也不尽相同),然后把这段片内SRAM映射到nGCS0片选的空间,进而CPU开始从内部SRAM的0x0处开始取得第一条指令,该过程全部是硬件自动完成,不需要程序代码控制。

或许你有个疑问,为什么不能直接把nandflash映射到0x0地址处?非要经过内部SRAM缓冲?

答案是,nandflash根本没有地址线,没法直接映射,必须使用SRAM做一个载体,通过SRAM把剩余的nandflash代码(即剩余的uboot启动代码)复制到SDRAM中运行。

若想从nandflash启动,那么uboot最核心的代码必须放在前4k完成。这4k代码要完成ARM CPU的核心配置以及将剩余的代码拷贝到SDRAM中(若从norflash启动则没有4k这个大小的限制,但是还会在完成最主要的设置后进入SDRAM中运行)。

1.1.1.2 ARM从norflash启动
若从norflash启动,则norflash直接被映射到内存的0x0地址处(就是nGCS0,这里就不需要片内SRAM来辅助了,所以片内SRAM的起始地址不变,还是0x40000000),然后cpu从0x00000000开始执行(也就是在Norfalsh中执行)。

需要说明的是,uboot代码段(.text段)起始位置必须是与上电后PC值一致,即编译uboot时,TEXT_BASE宏必须设置成0x0 ,反汇编uboot文件后,文本段第一条指令的地址也是0.

总结:

1、从norflash还是从nandflash启动,是由ARM的OM1和OM0引脚组合决定

2、不管从norflash还是nandflash启动,S3C2440上电后的pc值为0x0

3、如果某芯片上电后PC值不是0x0,假如是0x38ff0000,那么从norflash启动时,硬件就要自动将其映射到0x38ff0000地址处;如果从nandflash启动,那么硬件就要自动将nandflash中的前4K内容加载到0x38ff0000地址处。

【基础】ARM芯片上电取第一条指令流程相关推荐

  1. ARM上电后第一条指令

    网上关于ARM的bootloader(以Uboot为例)的启动顺序的资料有好多,但是对于Uboot的地址映射.体系结构级操作介绍很少,都是直接开始Start.s代码的阅读.本文拟详细分析Uboot从上 ...

  2. 【我所認知的BIOS】--第一条指令

    [我所認知的BIOS]-->第一条指令 By LightSeed 2009-10-26 其实早就想写这样一篇文章了,今天才着手写了下.说来也惭愧关于CPU的第一条指令的问题,在一开始study的 ...

  3. 自己动手写CPU(1)五级流水线及CPU第一条指令ori

    自己动手写CPU(1)五级流水线及CPU第一条指令ori 动机 不知为何研一的自由时间突然多起来,可能人一闲下来就容易焦虑吧,hhhhhh.正好之前看到一本<自己动手写CPU>,就按照此书 ...

  4. verilog实现多周期处理器之——(二)第一条指令ori的实现

    本博文希望对于OpenMIPS第一条指令ori加以实现并总结.会加入一些基本的理论以及博主的学习记录. 流水与五级流水 什么是流水:拆分,并行.将多条指令的执行相互重叠起来.就构成了流水,这样充分利用 ...

  5. 对[我所认识的BIOS]系列 -- CPU的第一条指令 一文扩充(II):从FDF到Bios Rom image

    在"对[我所认识的BIOS]系列 -- CPU的第一条指令 一文扩充(I)"一文中,我用EFITool工具加载了BIOS Rom,发现Reset Vector位于BIOS Rom ...

  6. Oracle中实现分组后按时间排序取第一条

    一.实现效果 ①原表效果:存在重复的编号(PARTNER_ID)内容,访问时间(VISIT_DATE)不同 ②分组排序后取第一条的效果:[实现对编号去重,且取访问时间最新的一条数据] 二.sql语句 ...

  7. 计算机开机执行的第一条指令是什么?

    第一条指令的位置在FFFF:0000,也就是物理地址FFFF0.第一条指令是跳转到F000:EO5B. 接下来准备由实模式进入保护模式.加载GDT,置PE位为1,清指令预取队列并真正进入保护模式. 那 ...

  8. oracle排序后第一条,Oracle排序取第一条数据

    Oracle需要更新套组的大单位, 规则是取第一个学员(套组ID最小)的单位信息. Oracle需要更新套组的大单位, 规则是取第一个学员(套组ID最小)的单位信息. 采用按照SUITEID排序取第一 ...

  9. 对[我所认识的BIOS]系列 -- CPU的第一条指令 一文扩充(III):从源代码到 FFS 文件

    我们可以在\Build\NT32IA32\DEBUG_VS2013\IA32\MdeModulePkg\Universal\BdsDxe\BdsDxe\OUTPUT\ 目录下,找到编译生成的 BdsD ...

最新文章

  1. rfid商品管理软件_哪个RFID固定资产管理系统比较好用?
  2. Spark ShuffleManager内存缓冲器SortShuffleWriter设计思路剖析-Spark商业环境实战
  3. 图像滤镜的一些加速和改进--笔记
  4. led灯条串联图_飞利浦32寸LED液晶显示器故障维修记
  5. 2022年美国大学生数学建模竞赛各题型常见参考代码汇总
  6. 仿苹果手机闹钟_原来iPhone自带的闹钟这么好用,以前没发现,现在一直在用
  7. ensp小实验走起来(路由下发、MSTP、VRRP、DHCP、DHCP中继、NAT、链路聚合)之配置
  8. winshark重要数据结构
  9. mac下配置openfire
  10. python读取word文档结构图_python根据文章标题内容自动生成摘分享的实例
  11. 谷歌android wear智能腕表 价格,谷歌Android Wear 2.0更新推送:仅三款智能手表可享受...
  12. 【Vue2.0】—解决页面闪烁的问题(八)
  13. POI excel 添加水印 xls,xlsx
  14. 计算机无法删除u盘里东西,u盘里东西删不掉,详细教您u盘文件删不了怎么办
  15. 初中计算机竞赛面试题目及答案,2019上半年初中信息技术教师资格面试真题及答案(第一批)...
  16. vue源码解析:vue生命周期方法$mount方法的实现原理
  17. Disentangling and Unifying Graph Convolutions for Skeleton-Based Action Recognition
  18. 区块链技术培训—从技术小白到年薪百万区块链工程师的进阶之路
  19. 苹果新贵 Swift 之前世今生
  20. /proc/mounts获取挂载设备mntent信息

热门文章

  1. win10计算机的运行在哪里打开,Win10系统教程 Win10系统运行在哪里打开?
  2. 【大数据】一堆大数据名词
  3. 1. 计算机的应用领域,1-1计算机的发展概况及应用领域
  4. 女生适合学酒店管理 电子商务还是计算机,读中专是学旅游服务与酒店管理好呢?还是计算机好呢?这两个专业那个更好呢?...
  5. vue中v-for写在template上,不能加key怎么办
  6. Android项目,library中根据资源id获取资源
  7. Cimplicity 国内知名汽车厂设备监控PMC系统
  8. 房价预测(基于决策树算法)
  9. 3年已过,你知道这些目标网站,过去是如何被爬的吗?爬虫100例复盘5
  10. TCP协议发送SKB时ip_summed初始值为0