CN102999352B - 一种嵌入式系统组件加载方法 - Google Patents
一种嵌入式系统组件加载方法 Download PDFInfo
- Publication number
- CN102999352B CN102999352B CN201210459328.0A CN201210459328A CN102999352B CN 102999352 B CN102999352 B CN 102999352B CN 201210459328 A CN201210459328 A CN 201210459328A CN 102999352 B CN102999352 B CN 102999352B
- Authority
- CN
- China
- Prior art keywords
- assembly
- component
- interface
- application program
- embedded system
- 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.)
- Active
Links
Landscapes
- Stored Programmes (AREA)
Abstract
本发明实施例涉及一种嵌入式系统组件加载方法,所述方法包括:应用程序或组件在接收到需要调用其它组件的相应功能指令时,查找所述其它组件,所述其它组件具有唯一标识其身份的特征接口;查找到所述组件后,将所述组件加载到内存中,并获取所述组件的实例以及调用所述组件的相应功能接口;在不需要所述的相应功能时,调用卸载组件接口,将所述其他组件卸载。本发明实施例在编译时不链接组件,在应用程序启动时不加载不必要的组件,节省了内存,避免了针对不同业务形态的嵌入式系统生成不同版本的应用程序。
Description
技术领域
本发明涉及计算机应用程序发现和组件加载技术领域,尤其涉及一种嵌入式系统组件加载方法。
背景技术
目前,组件技术被广泛应用于嵌入式系统中。在嵌入式系统中,系统的业务形态较多,不同形态下中间件或应用程序的功能不同,需加载的组件也不同,现有技术通常是在编译时必须链接组件,这样对于相同的中间件或应用程序,需要为每个业务形态的系统链接不同的组件,生成不同版本,使用这种方法使得中间件或应用程序后续的软件维护工作量大。此外,嵌入式系统包括内存在内的硬件资源非常有限,编译链接组件库后,在应用程序启动时就加载所有组件,不必要地耗费了内存。
发明内容
针对上述问题,本发明实施例提出一种嵌入式系统组件加载方法,所述方法包括:应用程序或组件在接收到需要调用其它组件的相应功能指令时,查找所述其它组件,所述其它组件具有唯一标识其身份的特征接口;查找到所述组件后,将所述组件加载到内存中,并获取所述组件的实例以及调用所述组件的相应功能接口;在不需要所述的相应功能时,调用卸载组件接口,将所述其他组件卸载。
优选地,所述查找其他组件,具体为:根据内存中的组件注册表或者组件目录查找所述其它组件,或者遍历系统中各组件库的特征接口来查找所述其它组件。
优选地,应用程序或组件启动时不加载所述其它组件。
优选地,应用程序在编译阶段时不链接所述其它组件。
优选地,所述其它组件具有唯一标识其身份的特征接口,具体为:所述其它组件包含用于返回所述其它组件的名称的固定名称接口,或者带有所述其它组件的名称的固定接口名称。
本发明实施例在应用程序启动时或者编译时不加载不必要的组件,即只在应用程序或组件在接收到需要调用其它组件的相应功能指令时,才加载相应组件,节省了内存,避免了需要针对不同业务形态的嵌入式系统生成不同版本的应用程序。
附图说明
下面将参照附图对具体实施方案进行更详细的说明,在附图中:
图1是本发明实施例的嵌入式浏览器动态查找和加载组件流程示意图;
图2是本发明实施例嵌入式系统组件加载方法示意图。
具体实施方式
下面通过附图和实施例,对本发明实施例的技术方案做进一步的详细描述。
本发明实施例提出一种基于动态查找的嵌入式系统组件加载方法,针对嵌入式系统的特点,只在具备组件功能的系统中以及在启动组件功能时发现并加载组件,编译时无需链接组件,从而无需为不同业务形态系统中是否需要该组件编译生成不同版本。本发明实施例包含以下步骤:
步骤1,为各组件配置具有可唯一标识其身份的特征接口。
步骤2,应用程序或其他组件在接收到需要调用其它组件相应功能指令时,查找内存中的组件目录或者组件注册表来查找组件,或者通过遍历系统中各组件库的特征接口来查找组件;所述的查找组件注册表以及遍历手段在顺序上没有先后限制。
步骤3,如果存在该组件,则将组件加载到内存中,并获取组件实例、调用组件相应的功能接口;
步骤4,在退出相应功能模块时,卸载组件,释放内存。
其中,唯一标识组件身份的特征接口可使用以下几种方法:
组件中包含固定名称接口,用于返回组件名称;
组件中包含带有组件名称的固定接口名。
本发明实施例根据嵌入式系统的特点,只在具备组件功能的系统中以及在启动组件功能时加载组件,避免了应用程序为不同业务形态的系统生成不同版本,减少了应用程序启动时加载组件耗费的内存。
下面通过一个优选实施例对本发明实施例的方法做进一步阐述:
图1是本发明实施例的嵌入式浏览器动态查找和加载组件流程示意图。以嵌入式浏览器作为具体的应用程序。当前网页以其跨平台、易部署等特点成为嵌入式系统中的主流门户导航,嵌入式浏览器是解析网页的核心,在不同业务系统中需求不同,需要加载不同组件的功能,比如对于双模机顶盒需要使用DVB组件库,但互联网机顶盒不需要DVB组件库。通过本发明实施例方法,所述嵌入式浏览器可以动态发现和加载本地功能组件,无须为不同业务系统编译不同版本,并且只在启动相应功能时才加载组件。
本实例中组件创建实例的特征接口是以“Get+组件名+Object”命名,撤销实例的特征接口是以“Delete+组件名+Object”命名。此外组件的功能接口都是C++类,因此浏览器与组件库之间需要定义一个与组件接口一一对应的基类,以供加载组件后能得到组件C++实例对象并使用其方法。所述Get、Object、Delete的中文含义分别是获取、对象、删除。
此外,本实例的系统可以基于linux操作系统,组件编译成动态库(.so),浏览器使用linux系统函数dlopen、dlclose、dlsym来打开、关闭组件库以及执行组件的接口,具体可以包括以下步骤101-109:
步骤101,浏览器定义一个基类,该基类中的方法与组件接口一一对应;
步骤102,组件继承浏览器提供的基类,实现其派生类,并增加创建、撤销类两个接口,分别以“Get+组件名+Object”、“Delete+组件名+Object”命名,用于创建和撤销组件实例,编译成动态库;
步骤103,在具备该组件功能的系统中,将组件库的路径加入配置文件;
步骤104,当页面解析到需要调用组件的功能接口后,浏览器查找内存中的组件注册表是否已注册该组件,
步骤105,如果组件注册表中已注册该组件,则直接读取该组件库所在路径,跳转到步骤107;
步骤106,如果组件注册表中尚未注册该组件,则读取配置文件中的库目录路径,在该路径下遍历库查找是否有创建该组件对象的接口,如果有该接口则将组件名称和库路径添加到组件注册表中,并跳转到步骤107,如果没有该接口则返回错误;
步骤107,如果有创建组件对象的接口,则调用创建组件对象接口,返回组件实例;
步骤108,然后调用组件实例中的方法,以实现相应功能;
步骤109,当离开页面时,调用撤销组件对象的接口,释放组件实例。
为更加清楚地展示本发明实施例的方法,图2展示了本发明实施例嵌入式系统组件加载方法示意图。从图2可见:所述方法包括:步骤200,应用程序或组件在接收到需要调用其它组件的相应功能指令时,查找所述其它组件,所述其它组件具有唯一标识其身份的特征接口;步骤202,查找到所述组件后,将所述组件加载到内存中,并获取所述组件的实例以及调用所述组件的相应功能接口;步骤204,在不需要所述的相应功能时,调用卸载组件接口,将所述其他组件卸载。
优选地,所述查找其他组件,具体为:根据内存中的组件注册表或者组件目录查找所述其它组件,或者遍历系统中各组件库的特征接口来查找所述其它组件。
优选地,应用程序或组件启动时不加载所述其它组件。
优选地,应用程序在编译阶段时不链接所述其它组件。
优选地,所述其它组件具有唯一标识其身份的特征接口,具体为:所述其它组件包含用于返回所述其它组件的名称的固定名称接口,或者带有所述其它组件的名称的固定接口名称。
本发明实施例在编译时不链接组件,在应用程序启动时不加载不必要的组件,而只在应用程序或组件在接收到需要调用其它组件的相应功能指令时,才加载相应组件,节省了内存,避免了需要针对不同业务形态的嵌入式系统生成不同版本的应用程序。
最后所应说明的是,以上实施例仅用以说明本发明的技术方案而非限制,尽管参照较佳实施例对本发明进行了详细说明,本领域的普通技术人员应当理解,可以对本发明的技术方案进行修改或者等同替换,而不脱离本发明技术方案的精神和范围。
Claims (4)
1.一种嵌入式系统组件加载方法,其特征在于,所述方法包括:
应用程序或组件在接收到需要调用其它组件的相应功能指令时,查找所述其它组件,所述其它组件具有唯一标识其身份的特征接口;
根据内存中的组件注册表或者组件目录查找所述其它组件,或者遍历系统中各组件库的特征接口来查找所述其它组件;
查找内存中的组件注册表是否已注册所述其它组件,如果组件注册表中已注册所述其它组件,则直接读取所述其它组件库所在路径;
如果组件注册表中尚未注册所述其它组件,则读取配置文件中的库目录路径,在所述库目录路径下遍历库查找是否有创建所述其它组件对象的接口,如果有创建所述其它组件对象的接口则将所述其它组件名称和库路径添加到所述组件注册表中;
查找到所述组件后,将所述组件加载到内存中,并获取所述组件的实例以及调用所述组件的相应功能接口;
在不需要所述的相应功能时,调用卸载组件接口,将所述其它组件卸载,当离开页面时,调用撤销所述其它组件对象的接口,释放所述其它组件实例。
2.如权利要求1所述嵌入式系统组件加载方法,其特征在于:应用程序或组件启动时不加载所述其它组件。
3.如权利要求1所述嵌入式系统组件加载方法,其特征在于:应用程序在编译阶段时不链接所述其它组件。
4.如权利要求1-3之一所述嵌入式系统组件加载方法,其特征在于:所述其它组件具有唯一标识其身份的特征接口,具体为:所述其它组件包含用于返回所述其它组件的名称的固定名称接口,或者带有所述其它组件的名称的固定接口名称。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201210459328.0A CN102999352B (zh) | 2012-11-15 | 2012-11-15 | 一种嵌入式系统组件加载方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201210459328.0A CN102999352B (zh) | 2012-11-15 | 2012-11-15 | 一种嵌入式系统组件加载方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN102999352A CN102999352A (zh) | 2013-03-27 |
CN102999352B true CN102999352B (zh) | 2016-08-10 |
Family
ID=47927957
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201210459328.0A Active CN102999352B (zh) | 2012-11-15 | 2012-11-15 | 一种嵌入式系统组件加载方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN102999352B (zh) |
Families Citing this family (10)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104424002B (zh) * | 2013-09-10 | 2017-12-12 | 中国科学院声学研究所 | 一种基于插件机制的动态加载组件方法和系统 |
CN103530156B (zh) * | 2013-10-17 | 2016-11-16 | 北京奇虎科技有限公司 | 动态加载和调用程序的方法及装置 |
CN105278942B (zh) * | 2014-07-23 | 2020-11-06 | 腾讯科技(深圳)有限公司 | 组件管理方法及装置 |
CN104978214B (zh) * | 2014-09-05 | 2019-10-22 | 腾讯科技(深圳)有限公司 | 一种组件加载方法、装置及终端 |
CN104536737B (zh) * | 2014-12-16 | 2018-07-17 | 深圳市金证科技股份有限公司 | 一种基于组件的程序开发装置 |
CN105354052B (zh) * | 2015-09-30 | 2018-12-04 | 北京奇虎科技有限公司 | flash游戏加载方法和装置 |
CN107707584B (zh) * | 2016-08-08 | 2020-12-29 | 腾讯科技(深圳)有限公司 | 一种应用加载方法、终端及平台服务器 |
CN108197024B (zh) * | 2017-12-28 | 2022-01-04 | 深圳Tcl数字技术有限公司 | 嵌入式浏览器调试方法、调试终端及计算机可读存储介质 |
CN110262842A (zh) * | 2018-03-12 | 2019-09-20 | 福建天泉教育科技有限公司 | 一种启动组件的方法及终端 |
CN109189492A (zh) * | 2018-07-23 | 2019-01-11 | 北京城市网邻信息技术有限公司 | 功能组件加载方法、装置、计算机设备及可读存储介质 |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1834918A (zh) * | 2005-11-04 | 2006-09-20 | 北京金山软件有限公司 | 一种组件间调用方法 |
CN101458629A (zh) * | 2008-12-31 | 2009-06-17 | 北京中星微电子有限公司 | 嵌入式实时操作系统中实现动态加载的方法和装置 |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101222371B (zh) * | 2008-01-24 | 2012-08-22 | 中国海洋大学 | 客户端组件运行管理系统 |
-
2012
- 2012-11-15 CN CN201210459328.0A patent/CN102999352B/zh active Active
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1834918A (zh) * | 2005-11-04 | 2006-09-20 | 北京金山软件有限公司 | 一种组件间调用方法 |
CN101458629A (zh) * | 2008-12-31 | 2009-06-17 | 北京中星微电子有限公司 | 嵌入式实时操作系统中实现动态加载的方法和装置 |
Non-Patent Citations (1)
Title |
---|
嵌入式软件加载技术研究;夏玉春;《中国优秀硕士学位论文全文数据库》;20031215;全文 * |
Also Published As
Publication number | Publication date |
---|---|
CN102999352A (zh) | 2013-03-27 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN102999352B (zh) | 一种嵌入式系统组件加载方法 | |
CN104424002A (zh) | 一种基于插件机制的动态加载组件方法和系统 | |
US11467854B2 (en) | Method and apparatus for loading multiple differing versions of a native library into a native environment | |
CN100399267C (zh) | 一种管理软件安装/卸载的方法 | |
CN101957770B (zh) | 一种移动设备上应用程序的启动方法及装置 | |
CN100487649C (zh) | 一种组件间调用方法 | |
CN105607935A (zh) | 应用程序更新方法及其终端、服务器 | |
CN105224370A (zh) | 一种加载elf文件的方法和装置 | |
CN104536737A (zh) | 一种基于组件的程序开发框架 | |
CN108776602B (zh) | 基于sca的波形动态切换方法 | |
CN106933611B (zh) | 类加载方法及类加载器 | |
CN103425512A (zh) | 一种软件包管理方法及系统 | |
CN106295340A (zh) | 一种程序文件恢复系统及方法 | |
CN101702130A (zh) | 一种移动终端加载共享函数库的方法和装置 | |
CN102364433B (zh) | 在ARM处理器上实现Wine构建工具移植的方法 | |
US9183011B2 (en) | Method and system for runtime environment emulation | |
CN104035776B (zh) | 一种操作系统的启动方法 | |
US9335990B2 (en) | Method, a system, and a non-transitory computer-readable medium for supporting application development | |
CN105404504A (zh) | 一种Web组件的调试方法及装置 | |
US9811364B2 (en) | Thread operation across virtualization contexts | |
US8806465B2 (en) | Refactor exception class hierarchy for reduced footprint and faster application start | |
CN103605546A (zh) | 一种软件版本的检测方法和装置 | |
CN106959870B (zh) | Nginx动态模块加载方法和装置 | |
US20140373009A1 (en) | Thread operation across virtualization contexts | |
CN112486507A (zh) | 程序的部署方法、装置和计算机设备 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant | ||
TR01 | Transfer of patent right |
Effective date of registration: 20210802 Address after: Room 1601, 16th floor, East Tower, Ximei building, No. 6, Changchun Road, high tech Industrial Development Zone, Zhengzhou, Henan 450001 Patentee after: Zhengzhou xinrand Network Technology Co.,Ltd. Address before: 100190, No. 21 West Fourth Ring Road, Beijing, Haidian District Patentee before: INSTITUTE OF ACOUSTICS, CHINESE ACADEMY OF SCIENCES |
|
TR01 | Transfer of patent right |