[发明专利]一种生成嵌入式程序运行符号表的方法和装置有效
申请号: | 201310741877.1 | 申请日: | 2013-12-27 |
公开(公告)号: | CN103677851A | 公开(公告)日: | 2014-03-26 |
发明(设计)人: | 黄锡元 | 申请(专利权)人: | 瑞斯康达科技发展股份有限公司 |
主分类号: | G06F9/44 | 分类号: | G06F9/44 |
代理公司: | 北京安信方达知识产权代理有限公司 11262 | 代理人: | 王丹;栗若木 |
地址: | 100085 北京*** | 国省代码: | 北京;11 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 一种 生成 嵌入式 程序 运行 符号 方法 装置 | ||
技术领域
本发明涉及嵌入式软件领域,尤其涉及一种生成嵌入式程序运行符号表的方法。
背景技术
随着网络系统复杂度的增加,设备的现场可调试能力越显重要,而其中,符号表则是现场调试的最重要的技术之一。通过符号表信息,工程师可以通过名称进行函数调用操作,查看全局变量的信息,打印进程的调用栈等信息。这对于获取设备的运行状态有很大的帮助,能让工程师更快的定位问题原因。
在嵌入式系统中,由于存储空间和芯片速度的原因,符号表的设计应该尽可能少的占用存储空间,具备尽可能快的查找效率。当前业界主要采用“二次链接一次安装”的方法来生成符号表:
如图1所示,“二次链接一次安装”的方法流程如下:
A、第一次链接。首先将所有的目标文件和库文件进行一次链接,生成一个临时的目标文件。
B、第二次链接。接着从该临时目标文件里面提取符号信息生成包含原始符号信息的源文件,编译该源文件生成符号表目标文件。然后将该符号表目标文件与步骤A生产的临时目标文件再次链接,生成最终的bin文件。
C、一次安装。在设备启动的时候对符号进行安装初始化,比如安装为哈希表、AVL树等。
安装了符号表之后,设备在运行过程中可以通过函数名查找到对应的符号信息,例如函数地址等,从而能够方便的进行函数调用相关的调试。
但是该方法存在如下缺陷:
1、二次链接增加了编译的时间。当前的嵌入式系统越来越庞大,最后的链接时间占总的编译链接时间很大比例,增加一次链接增加的时间比较大。
2、目前很多系统提供商(比如风河)提供了完整的编译和脚本的集成环境,而使用二次链接的方式需要修改这些环境和脚本,比较麻烦。
3、有一个安装的过程,一来会增加设备的启动时间;二来由于增加了一个索引空间,会额外增加不少内存消耗。对于嵌入式系统来说,无论是非易失性存储空间还是内存空间,都是比较宝贵的资源。
4、由于安装的符号表是以符号名称为索引的,因此从符号名称可以快捷的找到符号信息,但是从符号地址查找符号信息则比较耗时。在获取进程的调用栈时,这是个经常性操作。
5、由于存在很多同名的静态变量,为了防止从符号名称查找符号信息时产生歧义,当前的符号表只提取全局符号,缺少静态符号,因此静态符号是无法通过符号地址查找符号信息的。而在进程的调用栈中,有不少是静态函数,如果无法获取函数名,在打印调用栈信息的时候只能打印一个地址信息,这会给调试带来不少困扰。
6、符号表不具备动态加载特性,要么有要么无。这个对于FLASH或者内存比较小的设备而言比较不利,由于空间限制,无法添加符号表,而一旦出了问题想用符号表则比较麻烦。
发明内容
本发明所要解决的技术问题是减少编译链接时间,快捷的找到符号信息,并且使得符号表可动态加载,提出一种生成嵌入式程序运行符号表的方法和装置。
为了解决上述技术问题,本发明提供的技术方案如下:
一种生成嵌入式程序运行符号表的方法,包括:
从生成的目标文件中提取所有的符号信息或者从生成的目标文件中根据设定需求提取符号信息;
从提取的符号信息中筛选出全局符号信息,对所述全局符号信息的符号名称进行排序,生成第一有序符号数组;
从提取的符号信息中筛选出静态符号信息,生成第二符号数组;
对提取的符号信息的符号地址进行排序,生成地址排序符号索引数组;
对第一有序符号数组、第二符号数组和地址排序符号索引数组进行合并,生成符号表。
进一步地,所述目标文件为通过对源文件进行编译和链接生成的文件,所述符号表为二进制文件。
进一步地,所述方法还包括
将所述符号表和目标文件加载到闪存FLASH中;对符号名称排序为按照符号名称的ASCII码大小排序。
进一步地,在将所述符号表和目标文件加载到闪存FLASH中之前还包括判断闪存FLASH的空间是否满足所述符号表和目标文件的加载要求,如果满足,将所述符号表和目标文件加载到闪存FLASH中,如果不满足,则将所述符号表和目标文件加载到内存中。
进一步地,对第一有序符号数组、第二符号数组和地址排序符号索引数组进行合并包括:
建立一个符号表管理文件,所述符号表管理文件维护符号表的版本号、全局符号的个数、静态符号的个数和符号地址索引的个数;
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于瑞斯康达科技发展股份有限公司,未经瑞斯康达科技发展股份有限公司许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/201310741877.1/2.html,转载请声明来源钻瓜专利网。