系统软件的升级方法及其运行方法与流程

文档序号:19878421发布日期:2020-02-08 06:41阅读:280来源:国知局
系统软件的升级方法及其运行方法与流程

本发明涉及计算机控制技术领域,尤其涉及一种系统软件的升级方法及其运行方法。



背景技术:

目前,在嵌入式产品中,应用比较广泛的是基于引导程序(bootloader)加载源代码生成的bin文件(二进制文件),通过该小段引导程序,初始化硬件设备、建立内存空间的映射图,从而将系统的软硬件环境带到一个合适的状态。

但是,通常引导程序不涉及加密,在程序引导过程中可能会被盗取源代码,导致出现安全问题;并且,随着源代码的代码量越来越大,加载时间也越来越长,给用户造成了较差的体验。



技术实现要素:

本发明的实施例提供一种系统软件的升级方法及其运行方法,可以实现系统软件高效的升级,提高用户体验。

为达到上述目的,本发明的实施例采用如下技术方案:

一方面,提供一种系统软件的升级方法,包括:

启动引导程序;判断是否升级系统软件;所述系统软件包括软件开发工具包和应用程序;所述软件开发工具包由对应的软件开发工具包文件中的软件开发工具包代码编译生成;所述应用程序由对应的应用程序文件中的应用程序代码编译生成;若是,则判断升级所述软件开发工具包,和/或升级所述应用程序;若升级所述软件开发工具包,则所述引导程序将升级的软件开发工具包文件写入到存储器中的第一地址空间;根据升级的软件开发工具包文件中的多个api函数所分配的物理地址,生成api函数地址列表;若升级所述应用程序,则所述引导程序将升级的应用程序文件写入到存储器中的第二地址空间;所述应用程序利用所述api函数地址列表,调用所述软件开发工具包文件中的所述api函数。

可选地,所述引导程序将升级的软件开发工具包文件写入到存储器中的第一地址空间,包括:

所述引导程序利用分散加载技术,将升级的软件开发工具包文件中的api函数,分配到存储器中的所述第一地址空间的不同物理地址处。

可选地,在启动引导程序之前,所述系统软件的升级方法还包括:

将升级的系统软件代码分为升级的软件开发工具包代码和升级的应用程序代码;将升级的软件开发工具包代码生成升级的软件开发工具包文件;将升级的应用程序代码生成升级的应用程序代码文件;对升级的软件开发工具包文件进行加密,生成升级的软件开发工具包加密文件。

可选地,对升级的软件开发工具包文件进行加密,生成升级的软件开发工具包加密文件,包括:

利用高级加密标准算法,对升级的软件开发工具包文件进行加密,生成升级的软件开发工具包加密文件。

可选地,在对升级的软件开发工具包文件进行加密,生成升级的软件开发工具包加密文件之后,所述系统软件的升级方法还包括:

对升级的应用程序代码文件进行加密,生成升级的应用程序代码加密文件。

可选地,在所述引导程序将升级的软件开发工具包文件写入到存储器中的第一地址空间之前,所述系统软件的升级方法还包括:

所述引导程序将升级的软件开发工具包加密文件解密,得到升级的软件开发工具包文件。

可选地,在所述引导程序将升级的应用程序文件写入到存储器中的第二地址空间之前,所述系统软件的升级方法还包括:

所述引导程序将升级的应用程序代码加密文件解密,得到升级的应用程序代码文件。

再一方面,提供一种系统软件的运行方法,包括:

启动引导程序;所述引导程序利用如上所述的系统软件的升级方法对所述系统软件进行升级;所述系统软件包括软件开发工具包和应用程序;程序指针跳转至软件开发工具包的主函数入口,对所述软件开发工具包中的协议栈进行初始化;所述程序指针跳转至应用程序的主函数入口,对所述应用程序中的应用外设驱动进行初始化;注册所述软件开发工具包文件中的api函数;所述应用程序中的api函数指针,跳转至注册的api函数在api函数地址列表中所对应的物理地址处;根据注册的api函数所对应的物理地址,从所述存储器的第一地址空间中,调用并执行所述api函数;判断所调用的所述api函数是否执行成功;若失败,则执行复位,所述程序指针跳转回所述软件开发工具包的主函数入口;若成功,则执行启动程序,变更所述程序指针;启动并运行操作系统调度机制。

本发明的实施例提供一种系统软件的升级方法及其运行,系统软件的代码划分为软件开发工具包代码和应用程序代码,软件开发工具包代码编译生成软件工具包,应用程序代码编译生成应用程序。由此,升级系统软件时,通过判断升级软件开发工具包,和/或升级应用程序,引导程序可单独升级软件开发工具包,或者单独升级应用程序,或者同时升级软件开发工具包和应用软件;若升级软件开发工具包,则引导程序将升级的软件开发工具包文件写入到存储器中的第一地址空间,若升级应用程序,则引导程序将升级的应用程序文件写入到存储器中的第二地址空间。通过灵活选择需要升级的文件,可降低成本,减少功耗和写入时间,进而有效提高用户体验。

附图说明

为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。

图1为本发明的实施例提供的一种系统软件的升级方法的流程示意图;

图2为本发明的实施例提供的再一种系统软件的升级方法的流程示意图;

图3为本发明的实施例提供的另一种系统软件的升级方法的流程示意图;

图4为本发明的实施例提供的又一种系统软件的升级方法的流程示意图;

图5为本发明的实施例提供的又一种系统软件的升级方法的流程示意图;

图6为本发明的实施例提供的一种系统软件的运行方法的流程示意图。

具体实施方式

下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。

本发明的实施例提供一种系统软件的升级方法,如图1所示,包括:

s10、启动引导程序。

s20、判断是否升级系统软件。

系统软件包括软件开发工具包和应用程序。软件开发工具包由对应的软件开发工具包文件(stack.bin)中的软件开发工具包代码编译生成。应用程序由对应的应用程序文件(app.bin)中的应用程序代码编译生成。

可以理解的是,系统软件的代码划分为软件开发工具包代码和应用程序代码;软件开发工具包代码生成软件开发工具包文件,应用程序代码生成应用程序文件;软件开发工具包文件和应用程序文件均为二进制文件。

需要说明的是,软件开发工具包(softwaredevelopmentkit,sdk)包括协议栈(protocolstack)和软件管理单元(softdevicemanager)。应用程序包括应用程序设备(applicationsoftdevice)和应用外设驱动(app-peripheraldrivers)。

软件工具开发包是一种用于建立应用软件时的开发工具的集合。通常,软件厂商将一些基本程序功能封装,并通过软件工具开发包向外提供api(applicationprogramminginterface,应用程序接口)函数。

api函数,是软件工具开发包预设的函数,用于向基于软件工具开发包的宿主程序提供访问软件工具开发包的程序功能的接口。

s30、若否,则不升级。

s40、若是,则判断升级软件开发工具包,和/或升级应用程序。

这样,共可能出现三种情况,第一种只升级软件开发工具包,应用程序不升级;第二种只升级应用程序,软件开发工具包不升级;第三种既需要升级软件开发工具包,又需要升级应用程序。

s50、若升级软件开发工具包,则引导程序将升级的软件开发工具包文件写入到存储器中的第一地址空间。

其中,上述存储器可以为flash。

s60、根据升级的软件开发工具包文件中的多个api函数所分配的物理地址,生成api函数地址列表。即,api函数地址列表储存着每个api函数在第一地址空间中的物理地址信息。

s70、若升级应用程序,则引导程序将升级的应用程序文件写入到存储器中的第二地址空间。

应用程序利用api函数地址列表,调用软件开发工具包文件中的api函数。

可以理解的是,针对第一种只升级软件开发工具包,应用程序不升级的情况,原来写入到存储器中的第二地址空间的应用程序文件不变,引导程序仅将升级的软件开发工具包文件写入到存储器中的第一地址空间,然后删除原来写入的软件开发工具包文件。

针对第二种只升级应用程序,软件开发工具包不升级的情况,原来写入到存储器中的第一地址空间的软件开发工具包文件不变,引导程序仅将升级的应用程序文件写入到存储器中的第二地址空间,同时删除原来写入的应用程序文件。

针对第三种既升级软件开发工具包,又升级应用软件的情况,原来写入到存储器中的第一地址空间的软件开发工具包文件、以及写入到第二地址空间的应用程序文件均被删除,引导程序重新将升级的软件开发工具包文件写入到存储器中的第一地址空间中,将升级的应用程序文件写入到第二地址空间。

示例的,引导程序占用存储器中的地址空间为0x00000000~0x00003fff;若既需升级软件开发工具包,又需升级应用软件,则引导程序将升级的软件开发工具包文件写入到存储器中的第一地址空间(0x00004000~0x00022ab0)中,并将升级的应用程序文件写入到存储器中的第二地址空间(0x00028000~0x0002a000)中。

通常软件开发工具包很大,但是很少升级,可一次性将软件开发工具包文件固化在存储器中,增强系统可靠性;而应用程序文件比较小,需要的存储器中的第二地址空间相对也很小,由此,可以选择低内存的微控制单元(microcontrollerunit;mcu),以降低成本;基于此,又因为可将软件开发工具包文件固化在存储器中,只有较小的应用程序文件频繁传输,因此,程序引导过程时间缩短,功耗降低,可以有效提高用户体验。

本发明的实施例提供一种系统软件的升级方法,系统软件的代码划分为软件开发工具包代码和应用程序代码,软件开发工具包代码编译生成软件工具包,应用程序代码编译生成应用程序。由此,升级系统软件时,通过判断升级软件开发工具包,和/或升级应用程序,引导程序可单独升级软件开发工具包,或者单独升级应用程序,或者同时升级软件开发工具包和应用软件;若升级软件开发工具包,则引导程序将升级的软件开发工具包文件写入到存储器中的第一地址空间,若升级应用程序,则引导程序将升级的应用程序文件写入到存储器中的第二地址空间。通过灵活选择需要升级的文件,可降低成本,减少功耗和写入时间,进而实现系统软件高效的升级,提高用户体验。

可选地,上述s50中,引导程序将升级的软件开发工具包文件写入到存储器中的第一地址空间,包括:

引导程序利用分散加载技术,将升级的软件开发工具包文件中的api函数,分配到存储器中的第一地址空间的不同物理地址处。

需要说明的是,分散加载技术指的是把每一个编译好的函数放到存储器中的具体的一个物理地址上。

示例的,引导程序利用分散加载技术,将升级的软件开发工具包文件中的每一个api函数,分配到存储器中的第一地址空间(0x00004000~0x00022ab0)的不同物理地址处。

可选地,如图2所示,在上述s10之前,系统软件的升级方法还包括:

s1、将升级的系统软件代码分为升级的软件开发工具包代码和升级的应用程序代码。

s2、将升级的软件开发工具包代码生成升级的软件开发工具包文件。

s3、将升级的应用程序代码生成升级的应用程序代码文件。

s4、对升级的软件开发工具包文件进行加密,生成升级的软件开发工具包加密文件。

可以理解的是,对升级的软件开发工具包文件进行加密,可避免软件开发工具包代码被盗用的风险,实现对软件开发工具包代码的保护。

可选地,上述s4包括:

利用高级加密标准算法,对升级的软件开发工具包文件进行加密,生成升级的软件开发工具包加密文件。

其中,高级加密标准算法(advancedencryptionstandard,aes)指的是利用aes加密函数e与密钥k,对明文p(即,升级的软件开发工具包文件)进行加密,根据c=e(k,p),从而得到密文c(即,升级的软件开发工具包加密文件)。

可选地,如图3所示,在上述s4之后,系统软件的升级方法还包括:

s5、对升级的应用程序代码文件进行加密,生成升级的应用程序代码加密文件。

需要说明的是,相对于软件开发工具包,应用程序需要频繁升级,因此,对升级的应用程序代码文件进行加密时,在实现对应用程序代码保护的基础上,可以选择比软件开发工具包代码加密算法等级低的算法,例如只需要进行简单的校验即可,以提高应用程序文件加载写入的效率。

可选地,如图4所示,在上述s40之后,在s50之前,系统软件的升级方法还包括:

s41、引导程序将升级的软件开发工具包加密文件解密,得到升级的软件开发工具包文件。

可以理解的是,对软件开发工具包进行加密时利用的是高级加密标准算法,解密时需使用相同的密钥,利用aes解密函数d与密钥k,对密文c(即,升级的软件开发工具包加密文件)进行解密,根据p=d(k,c),从而得到明文p(即,升级的软件开发工具包文件)。

可选地,如图5所示,在上述s40之后,在s70之前,系统软件的升级方法还包括:

s61、引导程序将升级的应用程序代码加密文件解密,得到升级的应用程序代码文件。

需要说明的是,相对于对整个系统软件对应的文件进行加密和解密,分别对软件开发工具包文件和应用程序文件进行不同等级的加密,以及根据升级的需求,单独升级软件开发工具包代码文件或者单独升级应用程序代码文件,从而只需对软件开发工具包代码加密文件进行解密或者只需对应用程序代码加密文件进行解密,由此,在提高安全性的同时可以缩短ota(overtheair,空中下载)时延,提高用户体验。

本发明的实施例还提供一种系统软件的运行方法,如图6所示,包括:

s100、启动引导程序。

s101、引导程序利用如上所述的系统软件的升级方法对系统软件进行升级。

其中,系统软件包括软件开发工具包和应用程序。

s102、程序指针跳转至软件开发工具包的主函数(stack_main)入口,对软件开发工具包中的协议栈进行初始化;以及对内核系统进行初始化。

在上述s102之后,还需注册应用程序文件中的api函数。

s103、程序指针跳转至应用程序的主函数(app_main)入口,对应用程序中的应用外设驱动进行初始化。

s104、注册软件开发工具包文件中的api函数。

在上述s104之前或者在上述s104之后,还需建立应用程序任务。

s105、应用程序中的api函数指针,跳转至注册的api函数在api函数地址列表中所对应的物理地址处。

s106、根据注册的api函数所对应的物理地址,从存储器的第一地址空间中,调用并执行api函数。

s107、判断所调用的api函数是否执行成功。

s108、若失败,则执行复位(reset_handler),程序指针跳转回软件开发工具包的主函数入口。

s109、若成功,则执行启动程序(start.s),变更程序指针。

在上述s109之后,还需建立软件开发工具包任务。

s110、启动并运行操作系统调度机制。

在操作系统调度机制的运行过程中,软件开发工具包的主函数和应用程序的主函数之间通过api接口调用(apicalls)相互切换。

需要说明的是,上述的系统软件可以运行在armcortex-m3上,并且,协议栈的事件中断优先级低于外设驱动中断优先级,外设驱动中断优先级低于内核异常优先级。

以上所述,仅为本发明的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应以所述权利要求的保护范围为准。

当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1