本发明涉及电子产品引导升级技术领域,具体涉及一种bootloader升级系统和方法。
背景技术:
bootloader是嵌入式系统在加电后执行的第一段代码,在它完成cpu和相关硬件的初始化之后,再将操作系统映像或固化的嵌入式应用程序装载到内存中然后跳转到操作系统所在的空间,启动操作系统运行。在嵌入式操作系统中,bootloader是在操作系统内核运行之前运行,可以初始化硬件设备、建立内存空间映射图,从而将系统的软硬件环境带到一个合适状态,以便为最终调用操作系统内核准备好正确的环境。
一般工厂批量生产过程中,bootloader的更新需要通过jtag或者跳线,一般会预留测试点,首次下载bootloader时,通过测试架顶针触发主板上的跳线测试点实现bootloader的升级。设备完成程序的升级后下线,设备外壳安装完毕后,测试点就不再暴露出来。那么bootloader如果需要更新的话,就会需要拆开设备外壳,这将给设备带来很多不可控的影响。
目前,业界很多升级方案都直接或间接的解决了需要“拆机”升级的问题,但是当需求改变时,需要改动升级逻辑来将固件包升级到新的分区,传统bootloader需要修改本身的升级逻辑,再将新的bootloader更新到设备,更新bootloader时,新的bootloader包含在固件包内,用旧的bootloader去升级新的固件包来更新bootloader。更新的过程中,旧的bootloader会将其所在flash的分区擦除,再将新的bootloader写到该分区,若该过程出错,由于旧的bootloader所在分区被擦除,烧录出错后重新上电时,没有bootloader将会导致设备无法重启,这个时候就只能“拆机”通过跳线或jtag的方式来升级bootloader,很有可能会破坏其中的元器件,导致设备不能正常工作运行。
技术实现要素:
有鉴于此,有必要提供一种不需要“拆机”升级bootloader升级系统和方法,灵活适配升级需求。
一种bootloader升级系统,其包括上位机模块和需要升级的设备,所述设备具有sysloader模块,所述sysloader模块烧录于设备的片内flash单元。优选地,所述bootloader升级系统还包括ramloader模块,所述ramloader模块设有升级逻辑,所述设备与所述上位机模块通过串口连接,所述sysloader模块与所述上位机模块通过所述串口进行通信,所述上位机模块用于通过所述串口下发ramloader模块、升级包和升级指令,所述上位机模块将所述ramloader模块下发给sysloader模块,所述sysloader模块用于将ramloader模块加载到内存执行,所述ramloader模块用于接收所述升级包和升级指令,并根据所述升级指令将所述升级包写到对应地址或分区。
优选地,所述升级指令具有烧录地址或分区信息。
优选地,所述sysloader模块具有第一监听单元、第一接收单元和第一执行单元,所述第一监听单元与第一接收单元连接,所述第一接收单元与第一执行单元连接,所述第一监听单元用于监听是否收到所述上位机模块下发的请求,所述第一接收单元用于接收上位机模块下发的ramloader模块,所述第一执行模块用于执行所述ramloader模块。
优选地,所述ramloader模块具有第二监听单元、第二接收单元和第二执行单元,所述第二监听单元与第二接收单元连接,所述第二接收单元与第二执行单元连接,所述第二监听单元用于监听是否收到所述上位机模块下发的请求,所述第二接收单元用于接收上位机模块下发的升级包,所述第二执行模块用于升级所述升级包。
以及,一种bootloader升级方法,所述升级方法基于以上所述的bootloader升级系统,所述方法包括以下步骤:
s1,运行上位机模块:所述上位机模块下发具有升级逻辑的ramloader模块给sysloader模块;
s2,运行sysloader模块:所述sysloader模块接收所述ramloader模块,接收完后断开所述串口的连接并将ramloader模块加载到内存执行;
s3,上位机模块连接ramloader模块和sysloader模块:被执行后的ramloader模块和sysloader模块分别与所述上位机模块通过所述串口进行连接;
s4,运行ramloader模块:上位机模块下发升级包和升级指令,ramloader模块接收所述升级包和升级指令,并根据所述升级指令将所述升级包写到对应地址或分区。
优选地,所述步骤s4运行ramloader模块中,所述ramloader模块执行所述升级逻辑,所述升级逻辑的执行包括bootloader的片内flash单元的读、写或擦除操作和片外存储的读、写或擦除操作。
优选地,所述步骤s1运行上位机模块,包括如下步骤:
打开串口:运行上位机模块,打开串口,请求尝试与所述设备建立连接;
建立连接:将所述设备上电,sysloader模块运行后,通过串口建立连接;
下发ramloader模块:上位机模块将ramloader模块通过串口下发。
优选地,所述步骤s2运行sysloader模块,包括如下步骤:
初始化硬件:给所述设备上电,初始化所述设备的硬件;
判断是否有上位机模块请求:所述第一监听单元监听串口,判断是否有上位机模块的请求;
执行ramloader模块:监听到上位机模块的请求,所述第一接收单元接收ramloader模块加载到内存,通过第一执行单元执行ramloader模块;若第一监听单元未检测到上位机模块的请求,则引导应用程序执行。
优选地,所述步骤s3上位机模块连接ramloader模块,包括如下步骤:
准备建立连接:第二监听单元监听串口,准备与上位机模块建立连接;
判断是否连接上位机模块:若上位机模块下发升级包或升级指令,建立上位机模块与ramloader模块的连接;若上位机模块在预定时间内未下发升级包或升级指令,则退出ramloader模块。
优选地,所述步骤s4运行ramloader模块,包括如下步骤:
接收升级包:上位机模块下发升级包和升级指令,所述第二接收单元通过所述串口接收升级包和升级指令;
升级升级包:将升级包烧录到所述升级指令指定的地址,第二执行单元升级所述升级包,根据所述升级指令执行升级逻辑,将升级包写到对应地址或分区;
重启设备或引导设备执行应用程序:升级包升级完毕后,升级需要重启才能生效,由ramloader模块进行重启;若升级时第一监听单元没有监听到上位机模块的请求,则sysloader模块引导执行所述设备的应用程序。
上述bootloader升级系统和方法中,分离了传统bootloader的升级逻辑,将升级逻辑放置于ramloader模块,需要升级时,只需要在上位机模块中设置升级的地址或分区,下发带有新的分区或地址信息的升级指令给ramloader模块,ramloader模块根据升级指令将升级包写到新的分区或地址。不需要更新sysloader模块,不需要需要拆机用跳线或jtag升级,不仅提高了效率,还有效减少了sysloader模块的升级次数,升级方式简单方便,降低升级风险。
附图说明
图1是本发明实施例的bootloader升级系统和方法的系统模块示意框图。
图2是本发明实施例的bootloader升级方法的方法步骤示意图。
图3是本发明实施例的bootloader升级方法的运行上位机模块步骤示意图。
图4是本发明实施例的bootloader升级方法的运行sysloader模块步骤示意图。
图5是本发明实施例的bootloader升级方法的上位机模块连接ramloader模块步骤示意图。
图6是本发明实施例的bootloader升级方法的运行ramloader模块步骤示意图。
具体实施方式
以下将结合具体实施例和附图对本发明进行详细说明。
请参阅图1,示出本发明实施例的一种bootloader升级系统100,其包括上位机模块1和需要升级的设备,所述设备具有sysloader模块2,所述sysloader模块2烧录于设备的片内flash单元。优选地,所述bootloader升级系统还包括ramloader模块3,所述ramloader模块3设有升级逻辑,所述设备与所述上位机模块1通过串口连接,所述sysloader模块2与所述上位机模块1通过所述串口进行通信,所述上位机模块1用于通过所述串口下发ramloader模块3、升级包和升级指令,所述上位机模块1将所述ramloader模块3下发给sysloader模块2,所述sysloader模块2用于将ramloader模块3加载到内存执行,所述ramloader模块3用于接收所述升级包和升级指令,并根据所述升级指令将所述升级包写到对应地址或分区。
进一步地,所述sysloader模块2为分离了升级逻辑的bootloader,依然保留着传统的bootloader所具备的初始化硬件、引导应用程序等最基本功能。
优选地,所述升级指令具有烧录地址或分区信息,由用户在上位机模块1按照需求自行设置。
优选地,所述sysloader模块2具有第一监听单元21、第一接收单元22和第一执行单元23,所述第一监听单元21与第一接收单元22连接,所述第一接收单元22与第一执行单元23连接,所述第一监听单元21用于监听是否收到所述上位机模块1下发的请求,所述第一接收单元21用于接收上位机模块1下发的ramloader模块3,所述第一执行模块23用于执行所述ramloader模块3。
优选地,所述ramloader模块3具有第二监听单元31、第二接收单元32和第二执行单元33,所述第二监听单元31与第二接收单元32连接,所述第二接收单元32与第二执行单元33连接,所述第二监听单元31用于监听是否收到所述上位机模块1下发的请求,所述第二接收单元32用于接收上位机模块1下发的升级包,所述第二执行模块33用于升级所述升级包。
以及,一种bootloader升级方法,所述升级方法基于以上所述的bootloader升级系统100。
请参阅图2,所述方法包括以下步骤:
s1,运行上位机模块1:所述上位机模块1下发具有升级逻辑的ramloader模块3给sysloader模块2;
s2,运行sysloader模块2:所述sysloader模块2接收所述ramloader模块3,接收完后断开所述串口的连接并将ramloader模块3加载到内存执行;
s3,上位机模块1连接ramloader模块3和sysloader模块2:被执行后的ramloader模块3和sysloader模块2分别与所述上位机模块1通过所述串口进行连接;
s4,运行ramloader模块3:上位机模块1下发升级包和升级指令,ramloader模块3接收所述升级包和升级指令,并根据所述升级指令将所述升级包写到对应地址或分区。
优选地,所述步骤s4中,所述ramloader模块3执行所述升级逻辑,所述升级逻辑的执行包括bootloader的片内flash单元的读、写或擦除操作和片外存储的读、写或擦除操作,可升级片内flash单元和片外存储设备。
请参阅图3,所述步骤s1运行上位机模块1,具体包括如下步骤:
打开串口s11:运行上位机模块1,打开串口,请求尝试与所述设备建立连接;
建立连接s12:将所述设备上电,sysloader模块2运行后,通过串口建立连接;
下发ramloader模块s13:上位机模块1将ramloader模块3通过串口下发。
请参阅图4,所述步骤s2运行sysloader模块2,包括如下步骤:
初始化硬件s21:给所述设备上电,初始化所述设备的硬件;所述硬件包括内存,flash单元或串口等;
判断是否有上位机模块1请求s22:所述第一监听单元21监听串口,判断是否有上位机模块1的请求;
执行ramloader模块3s23:监听到上位机模块1的请求,所述第一接收单元22接收ramloader模块3加载到内存,通过第一执行单元23执行ramloader模块3;若第一监听单元21未检测到上位机模块1的请求,则引导应用程序执行。
请参阅图5,所述步骤s3上位机模块1连接ramloader模块3包括如下步骤:
准备建立连接s31:第二监听单元31监听串口,准备ramloader模块3与上位机模块1建立连接;
判断是否连接上位机模块1s32:若上位机模块1下发升级包或升级指令,建立上位机模块1与ramloader模块3的连接;若上位机模块1在预定时间内未下发升级包或升级指令,则退出ramloader模块3。
请参阅图6,所述步骤s4运行ramloader模块3,包括如下步骤:
接收升级包s41:上位机模块1下发升级包和升级指令,所述第二接收单元32通过所述串口接收升级包和升级指令;
升级升级包s42:将升级包烧录到所述升级指令指定的地址,第二执行单元33升级所述升级包,根据所述升级指令执行对应的升级逻辑,将升级包写到升级指令指定的对应地址或分区;
重启设备或引导设备执行应用程序s43:升级包升级完毕后,升级需要重启才能生效,此时上位机模块1会下发重启设备的指令,此时ramloader模块3检测到后,由ramloader模块3执行重启指令,将设备重启;若升级时第一监听单元21没有监听到上位机模块1的请求,则sysloader模块2引导执行所述设备的应用程序。
上述bootloader升级系统和方法,把传统的bootloader分离升级逻辑,将升级逻辑设置于ramloader模块3,当有需求要将升级包烧录到新的地址或分区时,通过所述方法,改动非常方便,若ramloader模块3尚未有该升级逻辑,添加升级逻辑后不需要更新到设备上;若ramloader模块3已有支持升级到该分区或地址的升级逻辑,只需要设置上位机模块1,更改烧录地址为新的分区的起始地址,下发的升级指令带有新分区的地址信息,ramloader模块3执行主要的升级逻辑(即实际的flash单元操作),直接将升级包烧录到升级指令指定的地址中;通过上位机模块1下发的升级包和升级指令,根据升级指令对片内flash单元或片外存储设备进行读、写或擦除等操作,可升级bootloader的片内flash单元的固件或升级片外存储的应用程序、软件或图片资源等,可升级的资源可随需求增加,灵活变动。由于不需要更新sysloader模块2,减少了bootloader的升级次数,降低了升级风险,不需要拆机,升级过程更加安全,利于保护硬件。
需要说明的是,本发明并不局限于上述实施方式,根据本发明的创造精神,本领域技术人员还可以做出其他变化,这些依据本发明的创造精神所做的变化,都应包含在本发明所要求保护的范围之内。
1.一种bootloader升级系统,包括上位机模块和需要升级的设备,所述设备具有sysloader模块,所述sysloader模块烧录于设备的片内flash单元,其特征在于,所述bootloader升级系统还包括ramloader模块,所述ramloader模块设有升级逻辑,所述设备与所述上位机模块通过串口连接,所述sysloader模块与所述上位机模块通过所述串口进行通信,所述上位机模块用于通过所述串口下发ramloader模块、升级包和升级指令,所述上位机模块将所述ramloader模块下发给sysloader模块,所述sysloader模块用于将ramloader模块加载到内存执行,所述ramloader模块用于接收所述升级包和升级指令,并根据所述升级指令将所述升级包写到对应地址或分区。
2.如权利要求1所述的bootloader升级系统,其特征在于,所述升级指令具有烧录地址或分区信息。
3.如权利要求1所述的bootloader升级系统,其特征在于,所述sysloader模块具有第一监听单元、第一接收单元和第一执行单元,所述第一监听单元与第一接收单元连接,所述第一接收单元与第一执行单元连接,所述第一监听单元用于监听是否收到所述上位机模块下发的请求,所述第一接收单元用于接收上位机模块下发的ramloader模块,所述第一执行模块用于执行所述ramloader模块。
4.如权利要求3所述的bootloader升级系统,其特征在于,所述ramloader模块具有第二监听单元、第二接收单元和第二执行单元,所述第二监听单元与第二接收单元连接,所述第二接收单元与第二执行单元连接,所述第二监听单元用于监听是否收到所述上位机模块下发的请求,所述第二接收单元用于接收上位机模块下发的升级包,所述第二执行模块用于升级所述升级包。
5.一种bootloader升级方法,其特征在于,所述升级方法基于如权利要求1-4任一项所述的bootloader升级系统,所述方法包括以下步骤:
s1,运行上位机模块:所述上位机模块下发具有升级逻辑的ramloader模块给sysloader模块;
s2,运行sysloader模块:所述sysloader模块接收所述ramloader模块,接收完后断开所述串口的连接并将ramloader模块加载到内存执行;
s3,上位机模块连接ramloader模块和sysloader模块:被执行后的ramloader模块和sysloader模块分别与所述上位机模块通过所述串口进行连接;
s4,运行ramloader模块:上位机模块下发升级包和升级指令,ramloader模块接收所述升级包和升级指令,并根据所述升级指令将所述升级包写到对应地址或分区。
6.如权利要求5所述的bootloader升级方法,其特征在于,所述步骤s4运行ramloader模块中,所述ramloader模块执行所述升级逻辑,所述升级逻辑的执行包括bootloader的片内flash单元的读、写或擦除操作和片外存储的读、写或擦除操作。
7.如权利要求5所述的bootloader升级方法,其特征在于,所述步骤s1运行上位机模块,包括如下步骤:
打开串口:运行上位机模块,打开串口,请求尝试与所述设备建立连接;
建立连接:将所述设备上电,sysloader模块运行后,通过串口建立连接;
下发ramloader模块:上位机模块将ramloader模块通过串口下发。
8.如权利要求5所述的bootloader升级方法,其特征在于,所述步骤s2运行sysloader模块,包括如下步骤:
初始化硬件:给所述设备上电,初始化所述设备的硬件;
判断是否有上位机模块请求:所述第一监听单元监听串口,判断是否有上位机模块的请求;
执行ramloader模块:监听到上位机模块的请求,所述第一接收单元接收ramloader模块加载到内存,通过第一执行单元执行ramloader模块;若第一监听单元未检测到上位机模块的请求,则引导应用程序执行。
9.如权利要求5所述的bootloader升级方法,其特征在于,所述步骤s3上位机模块连接ramloader模块,包括如下步骤:
准备建立连接:第二监听单元监听串口,准备与上位机模块建立连接;
判断是否连接上位机模块:若上位机模块下发升级包或升级指令,建立上位机模块与ramloader模块的连接;若上位机模块在预定时间内未下发升级包或升级指令,则退出ramloader模块。
10.如权利要求5所述的bootloader升级方法,其特征在于,所述步骤s4运行ramloader模块,包括如下步骤:
接收升级包:上位机模块下发升级包和升级指令,所述第二接收单元通过所述串口接收升级包和升级指令;
升级升级包:将升级包烧录到所述升级指令指定的地址,第二执行单元升级所述升级包,根据所述升级指令执行升级逻辑,将升级包写到对应地址或分区;
重启设备或引导设备执行应用程序:升级包升级完毕后,升级需要重启才能生效,由ramloader模块进行重启,若升级时第一监听单元没有监听到上位机模块的请求,则sysloader模块引导执行所述设备的应用程序。
技术总结