mtk动态加载平台开发介绍

mtk动态加载平台开发介绍

ID:10867494

大小:1.28 MB

页数:0页

时间:2018-07-08

mtk动态加载平台开发介绍_第页
预览图正在加载中,预计需要20秒,请耐心等待
资源描述:

《mtk动态加载平台开发介绍》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、基于MTK平台的应用开发基本概念加载器应用程序不是存储在ROM空间中,而是存储在T卡上。要运行时通过菜单加载到内存中,运行结束后释放内存。平台所谓的平台就是一个基于一个加载器的APP管理环境。包括程序编译阶段的ADS编译环境,从T卡加载的程序加载器以及程序加载到内存后的运行管理,为了拓展平台的功能,应用程序的下载也会放在平台上实现。基本原理输出节区RO,RW,ZIADS链接器规定了三种节区:RO,RW和ZI。RO:代码和全局静态只读数据。RW:全局可读写数据。ZI::全局未初始化数据,加载后初始化为0基本原理内存映射程序在加载之前的内存映射(Loadview)和加载

2、到内存之后(Executionview)的映射略有不同。(保证RO开始和ZI结尾4个字节对齐)基本原理代码无关和数据无关ROPI:函数的调用不是绝对地址的跳转,而是当前pc指针加上函数地址偏移量的相对跳转.符号的访问,也是基于pc指针和符号偏移量。ROPI对寄存器的使用没有影响。RWPI:符号的访问也不是绝对地址的访问,是RW静态基址寄存器(sb)加偏移量的方式访问。R9寄存器用于静态基址寄存器。基本原理ATPCSARM-Thumb过程调用标准定义了如何通过寄存器传递参数和返回值。前四个寄存器(R0-R3)用来传前四个参数,后续的参数通过下降式满堆栈来传递的。返回值

3、放在R0当中。另外局部变量的分配是放在R4-R8上,当局部变量多于可用的寄存器时,编译器会把多余的变量存储到堆栈。R9寄存器用于位置无关数据(RWPI)的实现,用来保存静态基址(sb)。ATPCS加载器加载器的任务加载器最主要的工作就是把T卡上的应用程序加载到内存当中运行。并在程序退出后收回分配的内存空间。为了搭配我们的应用,现在需要在加载器上做更多的工作,例如task的创建数据结构,在自己创建的模块的初始化以及下载模块等。例外,应用程序的加载和下载界面也放在加载器当中实现。应用程序的加载1.根据应用程序的大小(RO+RW+ZI)分配内存空间。2.解析应用程序的头,

4、包括版本号,RO,RW,ZI的大小,并找到入口函数。3.获取RW的基地址,并保存基地址。4.导出(注)MTK函数表供应用程序使用。5.导出(注)MTK全局变量,并保存到结构体当中供应用程序使用。6.应用程序退出后释放内存。注:是从MTK端来看是导出,从T卡程序来看是导入。应用程序的开发汇编基本规则ARM和Thumb指令集通过使用PC相关指令(如BL)支持与位置无关的代码,或称可重定位的代码(位置无关)。可以编写可重定位的汇编程序代码,但是它必须不含任何地址常数。指向代码的任何文字形式地址必须是相对PC的偏移量。在访问地址之前,应使用ADD指令加上PC的值。代码和数据

5、都可以与位置无关:•要使代码能在不同的地址执行,它必须与位置无关或可重定位。但是,它在固定地址只能访问一组静态数据。•与位置无关的数据要求所有数据访问都是相对于静态基址寄存器sb的。应用程序的开发C语言基本规则编写ROPI的C和汇编程序代码时:•ROPI段中的代码对同一个ROPI段中的符号的每个引用必须是PC相对的。ATPCS不为只读段定义任何其他基址寄存器。一个ROPI段中的项的地址不能分配给其他ROPI段中的项。•ROPI段中的代码对不同ROPI段中的符号的每个引用必须是PC相对的。这两个段必须是相对固定的。•ROPI段中的任何其他引用必须是:—绝对地址—对可写

6、数据的相对于sb的引用•每当ROPI段移动时,寻址ROPI段中符号的读写字必须进行调整。应用程序和MTK的交互调用从T卡程序调用MTK程序,需要通过加载器引入MTK的函数地址,访问方式以绝对地址的方式。从MTK端调用T卡程序中的函数,必须通过加载导出T卡中的函数。导出的函数地址也是绝对地址,调用之前需要重新设置静态基址寄存器,因为MTK程序可能使用了R9寄存器并且没有恢复。

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。