[发明专利]一种基于DSP的动态加载方法有效
申请号: | 201711458538.7 | 申请日: | 2017-12-28 |
公开(公告)号: | CN108196905B | 公开(公告)日: | 2019-03-22 |
发明(设计)人: | 韩辉;蒋太金 | 申请(专利权)人: | 北京翼辉信息技术有限公司 |
主分类号: | G06F9/445 | 分类号: | G06F9/445;G06F8/41 |
代理公司: | 南京苏高专利商标事务所(普通合伙) 32204 | 代理人: | 梁耀文 |
地址: | 100095 北京市海*** | 国省代码: | 北京;11 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 预处理 动态加载 可重定位代码 编译器 读取 地址对应 符号地址 汇编文件 切换问题 三个流程 运行模块 重定位 导出 编译 解析 指令 查找 | ||
本发明公开了一种基于DSP的动态加载方法,包括ELF文件预处理、ELF文件读取与解析、符号导出、符号重定位和运行模块,其中,ELF文件预处理包括:ELF预处理、在汇编文件中查找符号地址和计算出某个地址对应指令在ELF文件中的位置三个流程。本发明基于CCS编译器实现DSP动态加载的方法解决了B14切换问题;提高可重定位代码执行效率,用于CCS编译器以及GCC编译器所编译的可重定位代码。
技术领域
本发明涉及计算机技术,特别是涉及一种基于DSP的动态加载方法。
背景技术
动态加载(英语:Dynamic Loading)是一种实现应用程序与操作系统分离的方法,它能使操作系统可以在运行时加载应用程序或动态库(或者其他二进制对象)到内存中,检索库中函数和变量的地址,执行这些函数或访问这些变量,并能将库从内存中卸载。
CCS是TI公司提供的高效的C编译器和集成开发环境。针对DSP处理器,CCS编译的程序执行效率高。GCC也可以支持DSP处理器,但程序的执行效率很低。
瑞典Enea的OSEck操作系统是目前较为流行的DSP商业实时操作系统,提供较为丰富的操作系统管理组件,并且使用CCS编译器,效率高。该系统中应用程序与操作系统绑定在一起,每次升级都要升级整个操作系统和应用。随着程序规模的扩大,会不断增加升级的时间及耦合度,不利于程序的开发调试和维护。
ucLinux操作系统使用gcc编译器,它的应用程序和操作系统分离,并支持动态加载技术,有利于开发和维护。但针对DSP处理器,ucLinux使用的GCC编译器的效率无法与CCS编译器相比。
OSEck操作系统使用CCS编译器,与DSP处理器的契合度非常好,程序运行效率高,但不支持动态加载技术;ucLinux操作系统使用gcc编译器,应用程序和操作系统分离,并支持动态加载技术,有利于开发和维护,但程序的运行效率低下。这两个系统各有特点,但都无法兼顾动态加载技术和程序的运行效率。
发明内容
发明目的:为解决现有技术的不足,提供一种在CCS编译器基础上实现程序的动态加载,同时优化程序中的函数调用跳转流程,提高代码的运行效率的基于DSP的动态加载方法。
技术方案:本发明的一种基于DSP的动态加载方法,包括以下步骤:
(1)ELF文件预处理;
(2)ELF文件读取与解析
ELE文件是可执行程序的特有文件格式,里面包含了所有文件执行所需要的相关信息,加载的第一步就是读取和解析文件,建立ELF模块结构;
(3)符号导出
一个ELF模块需要导出一些符号,给其它模块使用,加载过程需为每个ELF模块建立一个符号表;
(4)符号重定位
一个ELF模块需要用到其它ELF模块的符号,加载器为每个ELF模块建立一个导入符号表,针对每个外部符号,通过步骤(2)所属方法查找到符号地址,并填写到本模块的导入符号表;
(5)运行模块
调用ELF格式中记录的初始化函数和模块入口函数。
进一步的,所述步骤(1)包括以下步骤:
(11)反汇编ELF文件,生成汇编文件;
(12)定位到汇编文件头,;
(13)从汇编文件读取一行,判断是否文件结束,若文件结束,则处理结束;否则执行步骤(14);
(14)判断其是否为跳转指令
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于北京翼辉信息技术有限公司,未经北京翼辉信息技术有限公司许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/201711458538.7/2.html,转载请声明来源钻瓜专利网。