CN107122216A - 一种嵌入式实时操作系统动态加载方法 - Google Patents
一种嵌入式实时操作系统动态加载方法 Download PDFInfo
- Publication number
- CN107122216A CN107122216A CN201710357048.1A CN201710357048A CN107122216A CN 107122216 A CN107122216 A CN 107122216A CN 201710357048 A CN201710357048 A CN 201710357048A CN 107122216 A CN107122216 A CN 107122216A
- Authority
- CN
- China
- Prior art keywords
- operating system
- look
- object module
- global variable
- external interface
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Granted
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/44—Arrangements for executing specific programs
- G06F9/445—Program loading or initiating
- G06F9/44521—Dynamic linking or loading; Link editing at or after load time, e.g. Java class loading
Abstract
本发明公开了一种嵌入式实时操作系统动态加载方法,其中,包括:操作系统通过输入命令行指令,生成操作系统的符号查找表,并作为目标模块动态加载基准符号查找表;当目标模块被载入时,目标模块会将包含的所有外部接口和全局变量列出,构成该目标模块的全局符号查找表,操作系统对全局符号查找表进行解析,确定操作系统能够识别的外部接口和全局变量,并与能够识别的外部接口与全局变量建立链接关系,并添加入操作系统的符号查找表;对目标模块中包含的所有外部接口和全局变量的地址进行重新定位,当运行到外部接口和全局变量时,通过操作系统的符号查找表重新定位到目标模块符号查找表的相应地址处。
Description
技术领域
本发明涉及嵌入式操作系统中动态加载技术的实现方法,特别涉及一种嵌入式实时操作系统动态加载方法。
背景技术
随着嵌入式操作系统地不断深入发展,以及用户需求的多样化,迫切需要一种机制能在操作系统运行状态下配置系统,即动态添加模块。这项技术的突破解决了利用中断程序进行加载的劣势,大大降低了嵌入式操作系统模块调试难度,提升系统综合性能。对保证系统的可靠性,延长系统生命周期,降低系统开发成本都具有十分重要的意义。
动态加载的实现对于嵌入式操作系统非常重要。一方面,现有采用的静态加载的方式存在一定的弊端,需要在运行前将所需的功能模块链接到系统,然后重新编译运行。在运行过程中如若发现需要新增的功能模块,就需要停止正在运行的程序,重新执行链接等全部步骤,大大浪费了空间资源,同时也降低了工作效率。另一方面,针对强实时嵌入式操作系统多任务共享内存地址空间的特性,,一般的动态加载技术并不能满足其动态加载的需求。因此,需要提供一种新型的模块动态加载方式,来实现这一功能。
发明内容
本发明的目的在于提供一种嵌入式实时操作系统动态加载方法,用于解决上述现有技术的问题。
本发明一种嵌入式实时操作系统动态加载方法,其中,包括:操作系统通过输入命令行指令,生成操作系统的符号查找表,并作为目标模块动态加载基准符号查找表;当目标模块被载入时,目标模块会将包含的所有外部接口和全局变量列出,构成该目标模块的全局符号查找表,操作系统对全局符号查找表进行解析,确定操作系统能够识别的外部接口和全局变量,并与能够识别的外部接口与全局变量建立链接关系,并添加入操作系统的符号查找表;对目标模块中包含的所有外部接口和全局变量的地址进行重新定位,当运行到外部接口和全局变量后,通过操作系统的符号查找表,重新定位到操作系统的符号查找表的相应地址处。
根据的嵌入式实时操作系统动态加载方法的一实施例,其中,操作系统根据ELF文件头所需参数,通过输入命令行指令,生成操作系统的符号查找表。
根据的嵌入式实时操作系统动态加载方法的一实施例,其中,还包括:重定位完成后,操作系统调用查找符号函数接口,实现对外部接口的解析,跳转到已解析的符号查找表中的相应地址处。
根据的嵌入式实时操作系统动态加载方法的一实施例,其中,加载目标模块前,调用打开动态库接口,向操作系统发出需要加载目标模块的指令。
根据的嵌入式实时操作系统动态加载方法,其中,未被操作系统解析的外部接口和全部变量,被系统检测到后,以错误码形式告知。
根据的嵌入式实时操作系统动态加载方法的一实施例,其中,重定位完成后,当运行到目标模块中的外部接口和全局变量时,首先在内存中找到目标模块建立的符号查找表中对应该外部接口或全局变量的地址,并调用操作系统中查找符号接口,在新构成的系统全局符号查找表中找到相关联的外部接口或全局变量的相应地址,实现跳转。
本发明嵌入式实时操作系统动态加载方法,针对强实时嵌入式操作系统多任务共享内存地址空间的情况,即针对单进程多线程的嵌入式实时操作系统特性,实现对所需模块的在程序运行过程中的动态加载方法。支持基于一个内核镜像的多模块并行开发和调试,以模块的方式加载组件,使系统更容易对模块进行认证,添加外部模块的支持时无需重新编译操作系统内核。有效地规避了嵌入式操作系统静态加载效率低的弊端,提高了嵌入式操作系统的运行效率。
附图说明
图1所示为本发明嵌入式实时操作系统动态加载方法的流程图;
图2所示为生成新的操作系统符号查找表的示意图。
具体实施方式
为使本发明的目的、内容、和优点更加清楚,下面结合附图和实施例,对本发明的具体实施方式作进一步详细描述。
图1所示为本发明嵌入式实时操作系统动态加载方法的流程图,本发明嵌入式实时操作系统动态加载方法主要包括:生成系统符号查找表、目标模块加载、重定位链接和跳转运行四个部分。
本发明嵌入式实时操作系统动态加载方法具体包括:
生成系统符号查找表,包括:
操作系统根据ELF文件头所需参数,通过输入命令行指令,生成操作系统的符号查找表,并作为目标模块动态加载基准符号查找表,便于在后续步骤中添加目标模块解析后的外部接口和全局变量。
进行目标模块加载,包括:
当目标模块被载入时,目标模块会将包含的所有外部接口和全局变量列出,构成该目标模块的全局符号查找表,全局符号查找表包括外部接口和全局变量,并通过申请内存空间的方式存储到操作系统所分配的一段内存中。然后操作系统会对该目标模块的全局符号查找表进行解析,确定哪些外部接口和全局变量是操作系统能够识别的,并与能够识别的外部接口与全局变量建立链接关系,在基准符号查找表中添加能够识别的外部接口地址指针与全局变量地址指针。即增加到操作系统的符号查找表中,构成新的操作系统符号查找表。
重定位链接包括:
在装载地址确定之后,对目标模块中包含的所有外部接口和全局变量的地址进行重新定位,当运行到外部接口后,通过新的操作系统符号查找表,重新定位到目标模块的全局符号查找表的相应地址处。即在运行过程中加载诸如插件、驱动等功能模块时,调用模块中外部接口时,操作系统会直接从新生成的全局符号查找表中找到函数的相应地址。
跳转运行包括:
重定位完成后,操作系统会调用动态链接器提供的查找符号(objsym)函数接口,实现对外部接口的解析,即跳转到已解析的符号查找表中的相应地址处,最终实现对模块的动态加载。
如图1所示,本发明嵌入式实时操作系统动态加载方法的另一实施例包括:
1、生成系统符号查找表
在加载新模块之前,首先要生成操作系统的符号查找表,将其作为实现动态加载的基本要素。依托操作系统的内核源码,利用命令行指令生成目标可执行文件以及系统符号表。并获取系统符号表的内存地址,便于后期地址查找、跳转运行等操作的进行。
2、目标模块的加载
图2所示为生成新的操作系统符号查找表的示意图,如图2所示,首先需要调用打开动态库(objopen)接口,向操作系统发出需要加载目标模块的指令。所要加载的目标模块通常是ELF文件格式,在ELF的文件头中包含了该文件的大小、数据等相关信息,通过对ELF头文件进行解析,可获取目标文件中所包含的全部外部接口和全局变量。解析完成后,需要在系统中申请一段新的内存,存储从目标模块中解析出来的全部外部接口和全局变量,并构成目标模块的全局符号查找表。同时,与操作系统符号查找表相关联,将已解析的外部接口与全局变量添加到系统的符号查找表中,生成新的操作系统符号查找表,如图2所示。
目标模块的全局符号查找表中存放着目标模块所包含外部接口的实际地址。用户如需调用目标模块所包含外部接口,需要通过新构成的操作系统查找表找到目标模块外部接口的相应地址处。(目标模块的全局符号查找表存入内存中仍要使用。因为目标模块的全局符号查找表中存放着目标模块所包含外部接口在内存中存放的实际地址,最终的调用都要通过目标模块的全局符号查找表执行。)
3、重定位链接
实现对目标模块的加载,即需要系统运行时实现对目标模块外部接口的识别、链接。在这个过程中,已被解析的外部接口会直接被重定位到操作系统的符号查找表中,等待系统调用;未被解析的外部接口会被系统检测到,以错误码形式被告知。
4、跳转运行
当运行到模块中的外部接口和全局变量时,首先调用操作系统中查找符号(objsym)接口,在新构成的系统全局符号查找表中找到相关联的外部接口或全局变量的相应地址,最后在内存中找到目标模块建立的符号查找表中对应该外部接口或全局变量的地址,实现跳转,从而完成对目标模块的动态加载的全过程。
为了便于后续对目标模块的重复加载,即在需要时或对模块修改后进行再次加载,需要在本次加载运行完成后调用关闭动态库(objclose),实现对模块目标的关闭、卸载,使操作系统中相应的计数置0,以保证下次加载成功。
进一步的,在操作系统中对目标模块需要实现几个相关接口的功能,其中包括:打开动态库(objopen)、查找符号(objsym)、错误处理(objerror)和关闭动态库(objclose)。具体功能描述如下:
打开动态库(objopen)函数,打开一个动态链接库,并将其加载到进程的地址空间,完成初始化过程。以指定模式打开指定的动态链接库文件,并返回句柄给objsym()的调用进程,使用objclose()来卸载打开的库。
查找符号(objsym)函数,是运行时装载的核心部分,根据动态链接库操作句柄与符号,返回符号对应的地址,从而找到所需要的符号。
错误处理(objerror)函数,在每次调用objopen()、objsym()、objclose()以后,都可以调用objerror()来判断上一次调用是否成功。objerror()的返回值类型是char*,如果返回NULL,则表示上一次调用成功;如果不是,则返回相应的错误消息。
关闭动态库(objclose)函数,用于关闭指定句柄的动态链接库,作用跟dlopen()相反。只有当此动态链接库的使用计数为0时,才会真正被系统卸载。
本发明嵌入式实时操作系统动态加载方法,解决了在没有多进程管理机制的情况下,通过操作系统提供的API接口完成打开动态库(objopen)、查找符号(objsym)、错误处理(objerror)和关闭动态库(objclose)的操作,实现将已解析的外部接口和全局变量添加到原操作系统的符号查找表中,并对外部接口进行重定位,最终在运行过程中跳转到解析后的地址处,完成对新模块的动态加载。
本发明嵌入式实时操作系统动态加载方法,,摒弃了嵌入式操作系统静态加载工作重复度高,效率慢的缺点,仅通过操作系统提供的API接口完成打开动态库(objopen)、查找符号(objsym)、错误处理(objerror)和关闭动态库(objclose)的操作,实现对新加载模块的动态加载,大大提高了嵌入式操作系统的运行性能。
以上所述仅是本发明的优选实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明技术原理的前提下,还可以做出若干改进和变形,这些改进和变形也应视为本发明的保护范围。
Claims (6)
1.一种嵌入式实时操作系统动态加载方法,其特征在于,包括:
操作系统通过输入命令行指令,生成操作系统的符号查找表,并作为目标模块动态加载基准符号查找表;
当目标模块被载入时,目标模块会将包含的所有外部接口和全局变量列出,构成该目标模块的全局符号查找表,操作系统对全局符号查找表进行解析,确定操作系统能够识别的外部接口和全局变量,并与能够识别的外部接口与全局变量建立链接关系,并添加入操作系统的符号查找表;
对目标模块中包含的所有外部接口和全局变量的地址进行重新定位,当运行到外部接口和全局变量时,通过操作系统的符号查找表重新定位到目标模块符号查找表的相应地址处。
2.如权利要求1所述的嵌入式实时操作系统动态加载方法,其特征在于,操作系统根据ELF文件头所需参数,通过输入命令行指令,生成操作系统的符号查找表。
3.如权利要求1所述的嵌入式实时操作系统动态加载方法,其特征在于,还包括:重定位完成后,操作系统调用查找符号函数接口,实现对外部接口的解析,跳转到已解析的符号查找表中的相应地址处。
4.如权利要求1所述的嵌入式实时操作系统动态加载方法,其特征在于,加载目标模块前,调用打开动态库接口,向操作系统发出需要加载目标模块的指令。
5.如权利要求1所述的嵌入式实时操作系统动态加载方法,其特征在于,未被操作系统解析的外部接口和全部变量,被系统检测到后,以错误码形式告知。
6.如权利要求3所述的嵌入式实时操作系统动态加载方法,其特征在于,重定位完成后,当目标模块中的外部接口和全局变量被调用时,首先调用操作系统中查找符号接口,在新构成的系统全局符号查找表中找到相关联的外部接口或全局变量的相应地址,最后在内存中找到目标模块建立的符号查找表中对应该外部接口或全局变量的地址,实现跳转。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201710357048.1A CN107122216B (zh) | 2017-05-19 | 2017-05-19 | 一种嵌入式实时操作系统动态加载方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201710357048.1A CN107122216B (zh) | 2017-05-19 | 2017-05-19 | 一种嵌入式实时操作系统动态加载方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN107122216A true CN107122216A (zh) | 2017-09-01 |
CN107122216B CN107122216B (zh) | 2020-06-16 |
Family
ID=59728426
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201710357048.1A Active CN107122216B (zh) | 2017-05-19 | 2017-05-19 | 一种嵌入式实时操作系统动态加载方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN107122216B (zh) |
Cited By (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN109542043A (zh) * | 2018-10-31 | 2019-03-29 | 武汉华中数控股份有限公司 | 一种基于插件的数控系统管理方法及装置 |
CN111124407A (zh) * | 2019-12-11 | 2020-05-08 | 深圳华臻信息技术有限公司 | 人机命令接口的实现方法及装置 |
CN113672238A (zh) * | 2021-09-07 | 2021-11-19 | 广东九联科技股份有限公司 | 基于实时操作系统模块化管理的运行方法、装置及设备 |
CN113849245A (zh) * | 2021-09-23 | 2021-12-28 | 武汉深之度科技有限公司 | 一种应用程序运行方法、计算设备及存储介质 |
CN115794260A (zh) * | 2023-02-06 | 2023-03-14 | 湖南高至科技有限公司 | 一种简单的dsp软件库动态加载方法 |
Citations (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20030033441A1 (en) * | 1998-09-09 | 2003-02-13 | Alessandro Forin | Highly componentized system architecture with a demand-loading namespace and programming model |
CN1912833A (zh) * | 2006-08-29 | 2007-02-14 | 华南理工大学 | 一种嵌入式操作系统驱动程序动态升级方法 |
CN101000550A (zh) * | 2006-12-13 | 2007-07-18 | 青岛大学 | 一种嵌入式系统远程在线再配置方法 |
US20080024494A1 (en) * | 2006-07-25 | 2008-01-31 | Perumal Poopathy | Method and system for image based rendering large volumetric datasets |
CN101211309A (zh) * | 2006-12-29 | 2008-07-02 | 中兴通讯股份有限公司 | 嵌入式系统中进程异常跟踪定位的方法 |
CN101668283A (zh) * | 2008-09-01 | 2010-03-10 | 沃勤网络科技(上海)有限公司 | 一种手机嵌入式系统中动态加载的方法 |
CN102541579A (zh) * | 2010-12-17 | 2012-07-04 | 沈阳新邮通信设备有限公司 | 嵌入式系统应用程序动态加载的方法 |
-
2017
- 2017-05-19 CN CN201710357048.1A patent/CN107122216B/zh active Active
Patent Citations (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20030033441A1 (en) * | 1998-09-09 | 2003-02-13 | Alessandro Forin | Highly componentized system architecture with a demand-loading namespace and programming model |
US20080024494A1 (en) * | 2006-07-25 | 2008-01-31 | Perumal Poopathy | Method and system for image based rendering large volumetric datasets |
CN1912833A (zh) * | 2006-08-29 | 2007-02-14 | 华南理工大学 | 一种嵌入式操作系统驱动程序动态升级方法 |
CN101000550A (zh) * | 2006-12-13 | 2007-07-18 | 青岛大学 | 一种嵌入式系统远程在线再配置方法 |
CN101211309A (zh) * | 2006-12-29 | 2008-07-02 | 中兴通讯股份有限公司 | 嵌入式系统中进程异常跟踪定位的方法 |
CN101668283A (zh) * | 2008-09-01 | 2010-03-10 | 沃勤网络科技(上海)有限公司 | 一种手机嵌入式系统中动态加载的方法 |
CN102541579A (zh) * | 2010-12-17 | 2012-07-04 | 沈阳新邮通信设备有限公司 | 嵌入式系统应用程序动态加载的方法 |
Cited By (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN109542043A (zh) * | 2018-10-31 | 2019-03-29 | 武汉华中数控股份有限公司 | 一种基于插件的数控系统管理方法及装置 |
CN111124407A (zh) * | 2019-12-11 | 2020-05-08 | 深圳华臻信息技术有限公司 | 人机命令接口的实现方法及装置 |
CN113672238A (zh) * | 2021-09-07 | 2021-11-19 | 广东九联科技股份有限公司 | 基于实时操作系统模块化管理的运行方法、装置及设备 |
CN113672238B (zh) * | 2021-09-07 | 2024-03-12 | 广东九联开鸿科技发展有限公司 | 基于实时操作系统模块化管理的运行方法、装置及设备 |
CN113849245A (zh) * | 2021-09-23 | 2021-12-28 | 武汉深之度科技有限公司 | 一种应用程序运行方法、计算设备及存储介质 |
CN113849245B (zh) * | 2021-09-23 | 2023-09-12 | 武汉深之度科技有限公司 | 一种应用程序运行方法、计算设备及存储介质 |
CN115794260A (zh) * | 2023-02-06 | 2023-03-14 | 湖南高至科技有限公司 | 一种简单的dsp软件库动态加载方法 |
Also Published As
Publication number | Publication date |
---|---|
CN107122216B (zh) | 2020-06-16 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN107122216A (zh) | 一种嵌入式实时操作系统动态加载方法 | |
CN100492301C (zh) | 避免软件冲突的方法和系统 | |
US8352925B2 (en) | Mechanism for enabling a set of code intended for a first platform to be executed on a second platform | |
EP1582985A2 (en) | Test case inheritance controlled via attributes | |
CN108874372B (zh) | 一种基于Scala的区块链合约实现方法及系统 | |
CN101421711A (zh) | 用于资源受限设备的虚拟执行系统 | |
CN105404524A (zh) | Java应用中的类加载隔离方法及装置 | |
CN101706734B (zh) | 二进制翻译中间接跳转指令的翻译方法及其系统 | |
CN111736913B (zh) | 类加载方法和装置 | |
CN101980546B (zh) | 智能网平台、业务执行方法和分析业务异常的方法 | |
US8429623B2 (en) | Processing engine for enabling a set of code intended for a first platform to be executed on a second platform | |
CN102023867A (zh) | 一种终端二次开发装置及二次开发平台构建方法 | |
CN106295326A (zh) | 一种用于获取显卡内容的内联hook方法和系统 | |
US6901591B1 (en) | Frameworks for invoking methods in virtual machines | |
CN112487092A (zh) | 一种基于区块链的智能合约调用方法及装置 | |
CN102262537A (zh) | 一种工作于混合模式执行引擎中的异常处理方法 | |
US7367032B2 (en) | Partial dynamic implementation of JAVA interfaces | |
CN105303325B (zh) | 一种基于交易场景识别的流程控制方法和系统 | |
CN114610516B (zh) | 应用程序的修复方法、装置、计算机设备以及存储介质 | |
CN101840338B (zh) | 一种m2m终端及其二次开发平台的实现方法 | |
CN100549958C (zh) | 一种类文件装载方法和系统 | |
CN104317673B (zh) | 应用程序的回收方法、装置及其恢复方法、装置 | |
JP2000056982A (ja) | 非持続メモリ内にオブジェクトを作成する方法および装置、ならびにオブジェクトへのアクセス可能性を維持する方法 | |
US8893127B2 (en) | Method and system for loading application to a local memory of a co-processor system by using position independent loader | |
CN108304230A (zh) | 调整应用属性的实现方法、装置及可读存储介质 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |