uboot之ARM位置无关代码设计

发布者:平和宁静最新更新时间:2016-06-21 来源: eefocus关键字:uboot  ARM  位置无关代码 手机看文章 扫描二维码
随时随地手机看文章
前言:

所谓位置无关代码是指:可执行镜像test.bin

我将它拷贝至内存0x30000000,然后pc = 0x30000000、它可以顺利执行;

我将它拷贝至内存0x38000000,然后pc = 0x38000000、它仍可以顺利执行。

1.程序的编译及运行流程

源码经过编译、汇编(生成相对地址符号表)和连接(提供绝对首地址、进而确定绝对地址符号表)后编程可执行镜像;

特别指出地是:在连接时,对各个目标文件进行重定位、建立符号引用规则;进而为变量和函数分配了绝对的运行地址;

程序执行时,系统必须把可执行镜像加载到连接阶段指定的地址空间,这样程序执行中才能对变量、函数等符号做正确引用,程序才能正常运行。

在有操作系统的系统中,连接阶段的重定位(即运行地址的确定)由系统自动完成;

而裸机开发中,这个地址必须由程序员在连接阶段通过参数指定。

2.位置无关代码的应用场合:

程序在运行期间动态加载至内存;

程序在不同场合与不同程序组合后加载至内存(如共享的动态链接库);

在运行期间不同地址相互之间的映射(如bootloader程序的前4KB代码;因为编译连接后决定它的运行地址是0x30000000,但刚开机时它是运行在0x00000000的)。

3.原理

  PIC对常量和函数入口地址的操作都是基于PC+偏移量的寻址方式;即使程序被移动,但PC也变化了、而偏移量是不变的。所以,程序仍然可以找到正确的入口地址和常量!

eg:

__asm{   pc = a;  //假设可以直接给pc赋值 }; int a() {   return 0; }

这个就是位置有关代码,它不能在任意处加载运行。

说明:编译连接后函数a的运行地址已经被确定,例如0x80000100。

__asm{   bl a; }; int a() {   return 0; }

这个就是位置无关代码,它可以被加载到非运行地址处运行。

说明:编译连接后函数a的运行地址已经被确定,例如0x80000100。

一、名词解释

  ARM位置无关代码设计指的是该部分代码编译后的可执行镜像,加载到任何地址处都可以正常运行。

  即:程序不在连接时指定的运行地址空间,也可以执行。

二、实现的必要条件

1.ARM汇编中对程序运行的相对跳转指令:

BL a:运行时首先获得当前PC值(也就是当前代码段的值),然后计算当前PC值和a(也是由连接器获得)间的距离;跳转地址即是pc+offset。

相对跳转指令的目标地址用基于当前PC的偏移量来表示、与连接时分配给地址标号的绝对地址值无关,因而、代码可以在任何位置进行跳转,实现位置无关性。

这样,不论编译器指定的a绝对地址是什么;程序都可以加载到任意地址处正常运行。

三、说明

连接阶段执行后,可执行镜像中的虚拟地址与内存管理无关!

关键字:uboot  ARM  位置无关代码 引用地址:uboot之ARM位置无关代码设计

上一篇:uboot中位置无关代码的程序设计
下一篇:ARM 位置无关代码PIC的分析理解

推荐阅读最新更新时间:2024-03-16 14:58

基于ARM的嵌入式Linux移植真实体验(2)――BootLoader
BootLoader指系统启动后,在操作系统内核运行之前运行的一段小程序。通过BootLoader,我们可以初始化硬件设备、建立内存空间的映射图,从而将系统的软硬件环境带到一个合适的状态,以便为最终调用操作系统内核准备好正确的环境。通常,BootLoader是严重地依赖于硬件而实现的,特别是在嵌入式世界。因此,在嵌入式世界里建立一个通用的 BootLoader 几乎是不可能的。尽管如此,我们仍然可以对BootLoader归纳出一些通用的概念来,以指导用户特定的BootLoader设计与实现。 BootLoader 的实现依赖于CPU的体系结构,因此大多数 BootLoader 都分为stage1 和stage2 两大部分。依赖于CP
[单片机]
基于<font color='red'>ARM</font>的嵌入式Linux移植真实体验(2)――BootLoader
无畏Intel苦苦追赶ARM誓言成产业主宰
无畏英特尔苦苦追赶 iPad晶片设计商ARM誓言成为产业主宰 新 iPad 搭载的超快处理器制造商 ARM (安谋) (ARMH-US) (ARM-UK) 认为,他们很快就能成为微晶片事业的主宰。 全球 95% 手机和平板电脑均使用 ARM 设计的晶片,比例之高相当惊人,包括甫推出的苹果新 iPad 也选用该公司晶片。根据 IHS iSuppli,ARM 的晶片代表整体半导体市场销售的 30%,将近 Intel (英特尔) (INTL-US) 16% 市占率的 2 倍。 然而,ARM 有更大的野心。 ARM 执行长 Warren East 上周行动通讯展 (MWC) 受访时表示:「我们想将比例翻升至 60%,我
[单片机]
国内首个ARM架构云平台发布 完善国产芯片生态产业链
中新网贵阳10月13日电 (记者 刘鹏)13日,国内首个完全基于ARM商业架构的云平台“ARM架构云平台”在贵阳发布。该平台的推出旨在吸引和集成ARM阵营在芯片、硬件、软件平台的上下游产业链,从而推动国产服务器芯片领域的应用开发,完善和融合产业生态系统。 据了解,“ARM架构云平台”的建立基于贵州华芯通半导体技术有限公司生产的ARM架构中央处理器,充分利用了该服务器CPU的高性能、低功耗和低成本的优势。同时,基于华芯通半导体的服务器参考评估设备(REP),并通过与云服务提供商——云上贵州大数据产业发展有限公司(以下简称:云上贵州)合作,实现了典型的云服务应用。 华芯通半导体由贵州省及美国高通公司共同出资成立,注册地为贵州贵安新区,
[网络通信]
分析称ARM芯片将结束微软和英特尔统治时代
  据国外媒体报道,到目前为止,微软Windows操作系统已运行在全世界90%的PC电脑上。但是,随着PC电脑时代的终结,微软已准备让新的Windows操作系统支持Arm芯片,以进军日益增长的平板电脑市场;而专为PC电脑生产芯片的英特尔也行将没落。微软和英特尔的统治时代已经宣告结束,ARM芯片将会开启一个新的时代。 Arm芯片已掌控移动设备 在美国拉斯维加斯举行的国际消费电子产品展览会(CES)上,微软总裁史蒂夫-鲍尔默(Steve Ballmer)宣称,微软的下一代Windows操作系统将支持英国公司Arm的芯片。“真是难以想象。”诺基亚前经理贺拉斯-戴德路(Horace Dedlu)说,“这样做意味着PC电脑时代已经结束
[安防电子]
基于ARM的硬件启动程序设计-初始化堆栈
ARM有7种运行状态,每一种状态的堆栈指针寄存器(SP)都是独立的。所以,对于程序中需要用的每一种 处理器模式,都要给SP定义一个堆栈地址。流程为:修改状态寄存器内的状态位,使处理器切换到需要的模式,然后给SP赋值。需要注意的是:不要切换到 User模式进行该模式下的堆栈设置,因为进入User模式后就不能再操作CPSR返回到其他模式了。 先定义各种模式对应的CPSR寄存器M 的值,该值决定了进入何种模式,可参考相关数据手册。 Mode_USR EQU 0x10 Mode_FIQ EQU 0x11 Mode_IRQ EQU 0x12 Mode_SVC EQU 0x13 Mode_ABT
[单片机]
ARM全球总裁Tudor Brown:是合作伙伴使我们把机遇转为成功
    11月29日,ARM在北京举行了2011年度技术研讨会,并与Cadence、Synopsys、恩智浦(NXP)、碳设计系统(Carbon Design System)、Marvell、QNX、ThunderSoft、芯原(VeriSilicon)、亿道电子等数十家合作伙伴进行了技术演讲,展示了各自的设计方案。 64位架构昭示ARM的“野心”   ARM总裁Tudor Brown在主题演讲中指出,2010年,ARM在37亿个手机SoC中约占90%;15亿个企业级SoC中占50%;4.5亿个数字电视/机顶盒SoC 中占35%;153亿个嵌入式SoC中占30%;但在2.3亿个客户端计算SoC中仅占10%,2015年该市场的规模
[手机便携]
ARM汇编条件码
操作码 条件码助记符 标志 含义 0000 EQ Z=1 相等 0001 NE(Not Equal) Z=0 不相等 0010 CS/HS(Carry Set/High or Same) C=1 无符号数大于或等于 0011 CC/LO(Carry Clear/LOwer) C=0 无符号数小于 0100 MI(MInus) N=1 负数 0101 PL(PLus) N=0 正数或零 0110 VS(oVerflow set) V=1 溢出 0111 VC(oVerflow clear) V=0 没有溢出 1000 HI(HIgh) C
[单片机]
基于MAX194在ARM单片机系统中的设计
火力发电厂和大型工业锅炉,通常采用向炉水中添加少量磷酸盐以防止钙、镁水垢的生成,磷酸根浓度不够,不能有效防止结垢,磷酸根离子含量过高,会导致炉水的pH值变高。因此磷酸根离子浓度是炉水检测的重要参数。ARM处理器具备高性能、低功耗、低成本等优点,将其应用于在线磷酸根离子分析仪的管理控制系统,可以提高磷酸根分析仪的处理速度和精度。 1 结构及测量原理简介 磷酸根离子分析仪整体结构包括光路系统、水路系统和管理控制系统三个部分。 光路系统主要包括:专用的单色LED冷光源、比色皿和光电传感器。 水路系统由比色皿、柱塞泵、多通道切换阀、流通池、样水/标液切换阀、流量计、排污阀、溢流管等组成。 利用化学吸光法原理,即在一定的
[单片机]
基于MAX194在<font color='red'>ARM</font>单片机系统中的设计
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
随便看看
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved