【基础】ARM芯片上电取第一条指令流程
转载: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芯片上电取第一条指令流程相关推荐
- ARM上电后第一条指令
网上关于ARM的bootloader(以Uboot为例)的启动顺序的资料有好多,但是对于Uboot的地址映射.体系结构级操作介绍很少,都是直接开始Start.s代码的阅读.本文拟详细分析Uboot从上 ...
- 【我所認知的BIOS】--第一条指令
[我所認知的BIOS]-->第一条指令 By LightSeed 2009-10-26 其实早就想写这样一篇文章了,今天才着手写了下.说来也惭愧关于CPU的第一条指令的问题,在一开始study的 ...
- 自己动手写CPU(1)五级流水线及CPU第一条指令ori
自己动手写CPU(1)五级流水线及CPU第一条指令ori 动机 不知为何研一的自由时间突然多起来,可能人一闲下来就容易焦虑吧,hhhhhh.正好之前看到一本<自己动手写CPU>,就按照此书 ...
- verilog实现多周期处理器之——(二)第一条指令ori的实现
本博文希望对于OpenMIPS第一条指令ori加以实现并总结.会加入一些基本的理论以及博主的学习记录. 流水与五级流水 什么是流水:拆分,并行.将多条指令的执行相互重叠起来.就构成了流水,这样充分利用 ...
- 对[我所认识的BIOS]系列 -- CPU的第一条指令 一文扩充(II):从FDF到Bios Rom image
在"对[我所认识的BIOS]系列 -- CPU的第一条指令 一文扩充(I)"一文中,我用EFITool工具加载了BIOS Rom,发现Reset Vector位于BIOS Rom ...
- Oracle中实现分组后按时间排序取第一条
一.实现效果 ①原表效果:存在重复的编号(PARTNER_ID)内容,访问时间(VISIT_DATE)不同 ②分组排序后取第一条的效果:[实现对编号去重,且取访问时间最新的一条数据] 二.sql语句 ...
- 计算机开机执行的第一条指令是什么?
第一条指令的位置在FFFF:0000,也就是物理地址FFFF0.第一条指令是跳转到F000:EO5B. 接下来准备由实模式进入保护模式.加载GDT,置PE位为1,清指令预取队列并真正进入保护模式. 那 ...
- oracle排序后第一条,Oracle排序取第一条数据
Oracle需要更新套组的大单位, 规则是取第一个学员(套组ID最小)的单位信息. Oracle需要更新套组的大单位, 规则是取第一个学员(套组ID最小)的单位信息. 采用按照SUITEID排序取第一 ...
- 对[我所认识的BIOS]系列 -- CPU的第一条指令 一文扩充(III):从源代码到 FFS 文件
我们可以在\Build\NT32IA32\DEBUG_VS2013\IA32\MdeModulePkg\Universal\BdsDxe\BdsDxe\OUTPUT\ 目录下,找到编译生成的 BdsD ...
最新文章
- rfid商品管理软件_哪个RFID固定资产管理系统比较好用?
- Spark ShuffleManager内存缓冲器SortShuffleWriter设计思路剖析-Spark商业环境实战
- 图像滤镜的一些加速和改进--笔记
- led灯条串联图_飞利浦32寸LED液晶显示器故障维修记
- 2022年美国大学生数学建模竞赛各题型常见参考代码汇总
- 仿苹果手机闹钟_原来iPhone自带的闹钟这么好用,以前没发现,现在一直在用
- ensp小实验走起来(路由下发、MSTP、VRRP、DHCP、DHCP中继、NAT、链路聚合)之配置
- winshark重要数据结构
- mac下配置openfire
- python读取word文档结构图_python根据文章标题内容自动生成摘分享的实例
- 谷歌android wear智能腕表 价格,谷歌Android Wear 2.0更新推送:仅三款智能手表可享受...
- 【Vue2.0】—解决页面闪烁的问题(八)
- POI excel 添加水印 xls,xlsx
- 计算机无法删除u盘里东西,u盘里东西删不掉,详细教您u盘文件删不了怎么办
- 初中计算机竞赛面试题目及答案,2019上半年初中信息技术教师资格面试真题及答案(第一批)...
- vue源码解析:vue生命周期方法$mount方法的实现原理
- Disentangling and Unifying Graph Convolutions for Skeleton-Based Action Recognition
- 区块链技术培训—从技术小白到年薪百万区块链工程师的进阶之路
- 苹果新贵 Swift 之前世今生
- /proc/mounts获取挂载设备mntent信息
热门文章
- win10计算机的运行在哪里打开,Win10系统教程 Win10系统运行在哪里打开?
- 【大数据】一堆大数据名词
- 1. 计算机的应用领域,1-1计算机的发展概况及应用领域
- 女生适合学酒店管理 电子商务还是计算机,读中专是学旅游服务与酒店管理好呢?还是计算机好呢?这两个专业那个更好呢?...
- vue中v-for写在template上,不能加key怎么办
- Android项目,library中根据资源id获取资源
- Cimplicity 国内知名汽车厂设备监控PMC系统
- 房价预测(基于决策树算法)
- 3年已过,你知道这些目标网站,过去是如何被爬的吗?爬虫100例复盘5
- TCP协议发送SKB时ip_summed初始值为0