一种MCU上应用程序的动态下载和运行方法及系统与流程

文档序号:32004320发布日期:2022-11-02 12:28阅读:22来源:国知局
一种MCU上应用程序的动态下载和运行方法及系统与流程
一种mcu上应用程序的动态下载和运行方法及系统
技术领域
1.本发明涉及软件工程领域,具体涉及一种mcu上应用程序的动态下载和运行方法及系统。


背景技术:

2.在mcu(microcontroller unit,微控制单元)的软件开发过程中,经常会使用实时嵌入式操作系统。嵌入式操作系统是一类小型的、适合在资源有限的设备上运行的操作系统。
3.应用程序开发时,通常是将应用程序源码和嵌入式操作系统的内核源码组织成一个工程,一起编译链接,形成一个嵌入式操作系统和应用程序糅合在一起的可执行程序,然后将可执行程序下载到mcu上并运行。但是,如果应用程序需要修改功能或修复bug(程序错误),则需要将修改后的应用程序和嵌入式操作系统再次重新一起编译,并将mcu上的程序全部进行替换,此种操作方式显然不利于应用程序的升级维护,耗时耗力。


技术实现要素:

4.针对现有技术中存在的缺陷,本发明的目的在于提供一种mcu上应用程序的动态下载和运行方法及系统,能够单独对某个应用程序进行更新升级,有更少的更新数据量,远程升级时会更节省流量、更快。
5.为达到以上目的,本发明提供的一种mcu上应用程序的动态下载和运行方法,其特征在于:
6.基于编译工具对应用程序进行编译以生成编译后文件;
7.通过mcu中预置的嵌入式操作系统的应用程序管理器的对外通信接口,下载所述编译后文件至mcu;
8.应用程序管理器基于所述编译后文件的地址信息计算得到应用程序的实际入口地址,跳转至实际入口地址以运行应用程序;
9.其中,在编译时设定好参数和地址,以供后续应用程序运行时将got表中对代码段引用的表项的地址修改为实际地址,将got表中对数据段引用的表项的地址修改为实际地址。
10.在上述技术方案的基础上,所述基于编译工具对应用程序进行编译以生成编译后文件,具体步骤包括:
11.编译工具对应用程序编译生成位置无关的代码,以生成编译后文件;
12.对所述编译后文件进行分析,得到应用程序的地址信息和属性信息。
13.在上述技术方案的基础上,
14.所述地址信息包括代码段地址和大小、初始化数据段地址和大小、未初始化数据段地址和大小、got表地址和大小,以及程序入口地址信息;
15.所述属性信息为got表中各个表项的属性信息;
16.所述属性信息用于表明表项为对代码段的引用或为对数据段的引用。
17.在上述技术方案的基础上,
18.当表项的内容代表的地址位于代码段地址范围内,则表明当前表项为对代码段的引用;
19.当表项的内容代表的地址位于初始化数据段或者未初始化数据段,则表明当前表项为对数据段的引用。
20.在上述技术方案的基础上,所述通过mcu中预置的嵌入式操作系统的应用程序管理器的对外通信接口,下载所述编译后文件至mcu,具体步骤包括:
21.外部工具通过对外通信接口向mcu发送初始化指令,所述初始化指令包含应用程序的地址信息和属性信息;
22.应用程序管理器接收初始化指令并对初始化指令中所含信息进行记录,同时进行flash存储器的分配;
23.将got表中对代码段引用的表项的地址修改为实际地址;
24.外部工具通过外通信接口将进行地址修改后的bin文件发送至应用程序管理器;
25.应用程序管理器接收编译后文件并将接收的编译后文件存储至所述flash存储器中。
26.在上述技术方案的基础上,当下载所述编译后文件至mcu之后,还包括:
27.应用程序管理器根据待运行的应用程序的数据段大小分配ram存储器作为数据段存储器;
28.应用程序管理器根据got表中表项的属性信息,将got表中对数据段引用的表项的地址修改为实际地址;
29.应用程序管理器将编译后文件的初始化数据段内容复制至所述ram存储器的起始地址。
30.在上述技术方案的基础上,所述将got表中对代码段引用的表项的地址修改为实际地址,具体的修改过程为:
31.根据got表中对代码段引用的表项的原始地址和bin文件存储起始地址,得到got表中对代码段引用的表项的实际地址。
32.在上述技术方案的基础上,所述将got表中对数据段引用的表项的地址修改为实际地址,具体的修改过程为:
33.根据got表中表项原始地址和数据段起始地址,得到相对偏移值;
34.根据分配的ram存储器的起始地址和所述相对偏移值,得到got表中对数据段引用的表项的实际地址。
35.在上述技术方案的基础上,所述应用程序管理器基于所述编译后文件的地址信息计算得到应用程序的实际入口地址,具体步骤包括:
36.应用程序管理器根据编译后文件的下载地址和入口地址,计算得到应用程序的实际入口地址。
37.本发明提供的一种mcu上应用程序的动态下载和运行系统,包括:
38.编译工具,其用于基于编译工具对应用程序进行编译以生成编译后文件;
39.外部工具,其用于通过mcu中预置的嵌入式操作系统的应用程序管理器的对外通
信接口,下载所述编译后文件至mcu;
40.mcu,其包括嵌入式操作系统,所述嵌入式操作系统包括应用程序管理器,所述应用程序管理器用于基于所述编译后文件的地址信息计算得到应用程序的实际入口地址,跳转至实际入口地址以运行应用程序;
41.其中,在编译时设定好参数和地址,以供后续应用程序运行时将got表中对代码段引用的表项的地址修改为实际地址,将got表中对数据段引用的表项的地址修改为实际地址。
42.与现有技术相比,本发明的优点在于:
43.1、应用程序可以独立的进行更新,相比与传统的固件升级方式,本发明具有更少的数据量,远程升级时会更节省流量、更快,有效提升应用程序的升级效率;
44.2、操作系统可以独立的进行更新,且在升级时能够达到减少升级数据量的效果,并且操作系统升级后,应用程序的数据和状态都可以得到保留;
45.3、应用程序启动时可以对其二进制代码进行完整性校验,有更高的安全性,且可以把相对独立的功能用单独的应用程序实现,代码更容易维护;
46.4、能够实现操作系统和应用程序分开独立开发,从而更加方便芯片厂家发布产品给客户做二次开发。
附图说明
47.为了更清楚地说明本技术实施例中的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本技术的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
48.图1为本发明实施例中一种mcu上应用程序的动态下载和运行方法的流程图;
49.图2为本发明实施例中一种mcu上应用程序的动态下载和运行系统的结构示意图。
具体实施方式
50.为使本技术实施例的目的、技术方案和优点更加清楚,下面将结合本技术实施例中的附图,对本技术实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本技术的一部分实施例,而不是全部的实施例。
51.参见图1所示,本发明实施例提供的一种mcu上应用程序的动态下载和运行方法,具体包括以下步骤:
52.s1:基于编译工具对应用程序进行编译以生成编译后文件,其中,在编译时会设定好参数和地址,以供后续应用程序运行时将got表中对代码段引用的表项的地址修改为实际地址,将got表中对数据段引用的表项的地址修改为实际地址。
53.具体的,基于编译工具对应用程序进行编译以生成elf格式的可执行文件,然后将所述可执行文件转换成bin文件(二进制文件);
54.需要说明的是,本发明实施例中,编译工具为gcc(gnu compiler collection,gnu编译器套件)编译工具。即采用gcc编译工具实现对应用程序的编译链接。
55.s2:通过mcu中预置的嵌入式操作系统的应用程序管理器的对外通信接口,下载编
译后文件至mcu,即下载bin文件至mcu;
56.本发明实施例中,嵌入式操作系统预置在mcu上,嵌入式操作系统包括应用程序管理器,应用程序管理器使用对外通信接口对外通信,通过应用程序管理器实现应用程序的下载和运行。具体的,对外通信接口可以为串口。
57.s3:应用程序管理器基于所述编译后文件的地址信息计算得到应用程序的实际入口地址,跳转至实际入口地址以运行应用程序。即当计算得到应用程序的实际入口地址后,即可跳转至实际入口地址进行应用程序的运行。
58.本发明实施例中,基于编译工具对应用程序进行编译以生成编译后文件,具体步骤包括:
59.s101:编译工具对应用程序编译生成位置无关的代码,以生成编译后文件;
60.s102:对编译后文件进行分析,得到应用程序的地址信息和属性信息。
61.具体的,基于-fpic参数,编译工具对应用程序编译生成位置无关的代码,得到elf格式的可执行文件,然后将得到的elf格式的可执行文件转换成bin文件,bin文件仅包括代码段、初始化的数据段和got表内容,然后分析elf格式的可执行文件得到应用程序的地址信息和属性信息。本发明利用编译工具的-fpic参数产生的代码的特点来实现应用程序的独立编译和后下载。
62.对于位置无关的代码而言,其主要特点是通过pc指针相对偏移寻址或通过got表寻址,而不是采用绝对地址寻址,从而无论应用程序下载到何种地址,只需修改got表(全局偏移量表)里面的地址为实际地址,应用程序便可正常运行。
63.对于将应用程序编译生成的位置无关的代码,链接地址设置为0,代码段、初始化数据段、未初始化数据段地址连续,以便生成紧凑的bin文件。
64.本发明实施例中,地址信息包括代码段地址和大小、初始化数据段地址和大小、未初始化数据段地址和大小、got表地址和大小,以及程序入口地址信息;属性信息为got表中各个表项的属性信息;属性信息用于表明表项为对代码段的引用或为对数据段的引用。
65.当表项的内容代表的地址位于代码段地址范围内,则表明当前表项为对代码段的引用;当表项的内容代表的地址位于初始化数据段或者未初始化数据段,则表明当前表项为对数据段的引用。
66.需要说明的是,初始化数据段是应用程序中定义了初始值的全局变量和数组,未初始化数据段是应用程序中没有定义初始值的全局变量和数组,got表里面存放的是全局变量和使用指针访问的代码段的地址。应用程序编译生成的汇编代码通过got表来寻址全局变量和使用指针访问的代码段地址。
67.本发明实施例中,通过mcu中预置的嵌入式操作系统的应用程序管理器的对外通信接口,下载所述编译后文件至mcu,具体步骤包括:
68.s201:外部工具通过对外通信接口向mcu发送初始化指令,所述初始化指令包含应用程序的地址信息和属性信息;
69.s202:应用程序管理器接收初始化指令并对初始化指令中所含信息进行记录,同时进行flash存储器的分配;分配的flash存储器用于存储应用程序的bin文件,同时,当进行bin文件的存储后,将bin文件的存储起始地址通过对外通信接口返回给外部工具。
70.s203:将bin文件的got表中对代码段引用的表项的地址修改为实际地址;具体的,
根据got表中对代码段引用的表项的原始地址和bin文件存储起始地址,得到got表中对代码段引用的表项的实际地址。
71.因为编译工具中设置代码段起始地址为0,故got表中对代码段引用的表项的实际地址=got表中对代码段引用的表项的原始地址+bin文件存储起始地址。之所以修改got表中对代码段引用的表项的地址,是因为此时bin文件的下载地址已经确定,并且后续不会变化,此时已可以确定代码段的具体物理地址,但是数据段存储器是在启动应用程序时由mcu上的应用程序管理器动态分配的,此时数据段的地址还不能确定,所以got表中对数据段引用的表项的地址此时还无法修改。
72.s204:外部工具通过外通信接口将进行地址修改后的bin文件发送至应用程序管理器;
73.s205:应用程序管理器接收编译后文件并将接收的编译后文件存储至所述flash存储器中,即应用程序管理器接收bin文件并将接收的bin文件存储至所述flash存储器中,具体的,存储至步骤s202中分配好的flash存储器中。
74.本发明实施例中,当下载所述编译后文件至mcu之后,还包括:
75.s206:应用程序管理器根据待运行的应用程序的数据段大小分配ram存储器作为数据段存储器;
76.s207:应用程序管理器根据got表中表项的属性信息,将got表中对数据段引用的表项的地址修改为实际地址;
77.本发明实施例中,将got表中对数据段引用的表项的地址修改为实际地址,具体的修改过程为:
78.s2071:根据got表中表项原始地址和数据段起始地址,得到相对偏移值;
79.s2072:根据分配的ram存储器的起始地址和所述相对偏移值,得到got表中对数据段引用的表项的实际地址。
80.由于此时数据段起始地址已经确定,故应用程序管理器可以根据got表中表项的属性信息,对数据段引用的表项的地址进行修改,具体的:相对偏移值=got表中表项原始地址-数据段起始地址,got表中对数据段引用的表项的实际地址=分配的ram存储器的起始地址+相对偏移值。
81.例如,数据段起始地址是0x1000,某个got表项的值为0x1010,那么相对偏移值便是0x1010-0x1000=0x10,如果应用程序管理器为应用程序分配的数据段ram存储器起始地址是0x20000000,那么该got表中对数据段引用的表项的实际地址就应该修改为0x20000000+0x10=0x20000010。
82.s208:应用程序管理器将编译后文件的初始化数据段内容复制至所述ram存储器的起始地址。
83.即应用程序管理器将bin文件的初始化数据段内容复制至所述ram存储器的起始地址,具体的,将初始化数据段内容复制到步骤s206分配的ram存储器的起始地址,从而完成应用程序初始化全局变量的初始化。
84.本发明实施例中,应用程序管理器基于所述编译后文件的地址信息计算得到应用程序的实际入口地址,具体步骤包括:应用程序管理器根据编译后文件的下载地址和入口地址,计算得到应用程序的实际入口地址。
85.即应用程序管理器根据bin文件的下载地址和入口地址,计算得到应用程序的实际入口地址=bin文件的下载地址+入口地址,然后跳转到入口地址开始运行,至此,应用程序开始运行起来。
86.本发明将应用程序独立于嵌入式操作系统开发编译,不需要使用嵌入式操作系统的源码或者静态库;本发明不依赖于mcu的存储管理单元实现,而linux、windows等大型操作系统的应用程序动态加载运行都依赖于处理器的存储管理单元实现虚拟地址到物理地址的映射,但是,mcu上通常没有存储管理单元,因此本方法不依赖于mcu的存储管理单元实现的方式,具有更广泛的适应性;本发明使得嵌入式操作系统和应用程序各自独立编译,并且可以将相对独立的多个功能分成多个应用程序开发编译和动态下载运行,维护起来更加方便;本发明可以单独对某个应用程序进行更新升级,有更少的更新数据量,远程升级时会更节省流量、更快。
87.参见图2所示,本发明实施例提供的一种mcu上应用程序的动态下载和运行系统,包括编译工具、外部工具和mcu。
88.编译工具用于基于编译工具对应用程序进行编译以生成编译后文件,其中,在编译时设定好参数和地址,以供后续应用程序运行时将got表中对代码段引用的表项的地址修改为实际地址,将got表中对数据段引用的表项的地址修改为实际地址;外部工具用于通过mcu中预置的嵌入式操作系统的应用程序管理器的对外通信接口,下载所述编译后文件至mcu;mcu包括嵌入式操作系统,所述嵌入式操作系统包括应用程序管理器,所述应用程序管理器用于基于所述编译后文件的地址信息计算得到应用程序的实际入口地址,跳转至实际入口地址以运行应用程序。
89.以上所述仅是本技术的具体实施方式,使本领域技术人员能够理解或实现本技术。对这些实施例的多种修改对本领域的技术人员来说将是显而易见的,本文中所定义的一般原理可以在不脱离本技术的精神或范围的情况下,在其它实施例中实现。因此,本技术将不会被限制于本文所示的这些实施例,而是要符合与本文所申请的原理和新颖特点相一致的最宽的范围。
90.本发明是参照根据本发明实施例的方法、设备(系统)和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1