欢迎来到天天文库
浏览记录
ID:48416395
大小:111.99 KB
页数:21页
时间:2020-01-19
《ARM的位置在Bootloader中的应用.pptx》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、ARM的位置在Bootloader中的应用引言1位置无关代码及程序设计方法1.1基本概念与实现原理1.2arm处理器的位置无关程序设计要点(1)程序设计规范(2)程序设计规范22位置无关代码在Bootloader设计中的应用使用位置无关设计Bootloader程序有如下优点:3结论arm处理器支持位置无关的程序设计,这种程序加载到存储器的任意地址空间都可以正常运行,其设计方法在嵌入式应用系统开发中具有重要的作用。本文首先介绍位置无关代码的基本概念和实现原理,然后阐述基于arm汇编位置无关的程序设计方法和实现过程,最后以嵌入式Bootloader
2、程序设计为例,介绍位置无关程序设计在Bootloader程序设计中的作用。基于位置无关代码PIC(PositionIndependentCode)的程序设计在嵌入式应用系统开发中具有重要的作用,尤其在裸机状态下开发Bootloader程序及进行内核初始化设计;利用位置无关的程序设计方法还可以在具体应用中用于构建高效率动态链接库,因而深入理解和熟练掌握位置无关的程序设计方法,有助于开发人员设计出结构简单、清晰的应用程序。本文首先介绍位置无关代码的基本概念和实现原理,然后阐述基于arm汇编位置无关的程序设计方法和实现过程,最后以Bootloade
3、r程序设计为例,介绍了位置无关程序设计在Bootloader程序设计中的作用。引言1.1基本概念与实现原理应用程序必须经过编译、汇编和链接后才变成可执行文件,在链接时,要对所有目标文件进行重定位(relocation),建立符号引用规则,同时为变量、函数等分配运行地址。当程序执行时,系统必须把代码加载到链接时所指定的地址空间,以保证程序在执行过程中对变量、函数等符号的正确引用,使程序正常运行。在具有操作系统的系统中,重定位过程由操作系统自动完成。在设计Bootloader程序时,必须在裸机环境中进行,这时Bootloader映像文件的运行地址必
4、须由程序员设定。通常情况下,将Bootloader程序下载到ROM的0x0地址进行启动,而在大多数应用系统中,为了快速启动,首先将Bootloader程序拷贝到SDRAM中再运行。一般情况下,这两者的地址并不相同,程序在SDRAM中的地址重定位过程必须由程序员完成。实际上,由于Bootloader是系统上电后要执行的第一段程序,Bootloader程序的拷贝和在这之前的所有工作都必须由其自身来完成,而这些指令都是在ROM中执行的。也就是说,这些代码即使不在链接时所指定的运行时地址空间,也可以正确执行。这就是位置无关代码,它是一段加载到任意地址空
5、间都能正常执行的特殊代码。1位置无关代码及程序设计方法◆程序在运行期间动态加载到内存;◆程序在不同场合与不同程序组合后加载到内存(如共享的动态链接库);◆在运行期间不同地址相互之间的映射(如Bootloader程序)。虽然在用GCC编译时,使用-fPIC选项可为C语言产生位置无关代码,但这并不能修正程序设计中固有的位置相关性缺陷。特别是汇编语言代码,必须由程序员遵循一定的程序设计准则,才能保证程序的位置无关性。位置无关代码常用于以下场合:arm程序的位置无关可执行文件PIE(PositionIndependentExecutable)包括位置无
6、关代码PIC和位置无关数据PID(PositionIndependentData)两部分。PID主要针对可读写数据段(.data段),其中保存已赋初值的全局变量。为实现其位置无关性,通常使用寄存器R9作为静态基址寄存器,使其指向该可读写段的首地址,并使用相对于基址寄存器的偏移量来对该段的变量进行寻址。这种方法常用于为可重入程序的多个实例产生多个独立的数据段。在程序设计中,一般不必考虑可读写段的位置无关性,这主要是因为可读写数据主要分配在SDRAM中。1.2arm处理器的位置无关程序设计要点PIC包括程序中的代码和只读数据(.text段),为保证
7、程序能在ROM和SDRAM空间都能正确运行(如裸机状态下的Bootloader程序),必须采用位置无关代码程序设计。下面重点介绍PIC的程序设计要点。PIC遵循只读段位置无关ROPI(ReadOnlyPositionIndependence)的ATPCS(armThumbProcedureCallStandard)的程序设计规范:引用同一ROPI段或相对位置固定的另一ROPI段中的符号时,必须是基于PC的符号引用,即使用相对于当前PC的偏移量来实现跳转或进行常量访问。①位置无关的程序跳转。在arm汇编程序中,使用相对跳转指令B/BL实现程序跳转
8、。指令中所跳转的目标地址用基于当前PC的偏移量来表示,与链接时分配给地址标号的绝对地址值无关,因而代码可以在任何位置进行跳转,实现位置无关性。另外,还
此文档下载收益归作者所有