一种嵌入式设备的多系统启动方法与流程

文档序号:35220084发布日期:2023-08-24 19:26阅读:82来源:国知局
一种嵌入式设备的多系统启动方法与流程

本发明涉及系统启动,尤其涉及一种嵌入式设备的多系统启动方法。


背景技术:

1、随着通信技术、物联网技术、人工智能技术以及智能家居等领域的不断发展,嵌入式设备得到广泛应用,涉及方方面面各个领域,如工控领域(机械臂、智能测试仪)、智能家居领域、交通物流领域、医疗健康领域、通信领域(路由器、企业级网关、通信基站设备、交换机)等。在一些领域中,设备运行的稳定性和可维护性对用户体验的影响越来越大。为提高设备的运行可靠性和可维护性,可在工控机、基站设备、交换机等设备中安装多个操作系统,方便用户使用,一旦一个系统出现问题,用户可以进入另一个系统,不会因为系统崩溃而导致的循环重启、无法开机等无法正常使用的问题;同时多个系统之间相互独立,可独立运行各自支持的应用程序,也扩大了设备的应用灵活性和使用范围。

2、但安装有多个系统的设备在系统启动时存在系统选择和升级的问题,特别是当出现系统故障重启时如何协调多个系统之间的配合关系,以提高设备运行的可靠性和稳定性,则显得尤为重要。


技术实现思路

1、本发明的目的是克服上述现有技术的缺点,提供一种系统启动的成功率高、系统运行稳定可靠的一种嵌入式设备的多系统启动方法,该方法为解决单固件启动不可靠的问题,进一步提升了设备运行的稳定可靠性,保证设备在出现无法正常使用的情况下,仍有可启动的系统供用户使用。

2、本发明是通过以下技术方案来实现的:

3、一种嵌入式设备的多系统启动方法,包括如下步骤:

4、s1、给各系统进行编号标记,并将各系统的编号标记记载在存储器件的分区表中,并将编号记录在分区名称上以进行区分和获取;在uboot中创建第一环境变量和第二环境变量,所述第一环境变量用于标记各系统的启动次数,所述第二环境变量用于标记当前启动的系统;

5、s2、引导加载程序bootloader启动后,读取uboot-env中的环境变量数据,并对读取的数据进行crc校验,以确保数据读取准确;

6、s3、选择系统进行启动;

7、s4、如选择的系统启动成功,重置第一环境变量的值为零,如未正常启动,则将第一环境变量的值加一,并判断第一环境变量的值是否大于设定值,并根据判断情况执行步骤s5或s6,直至系统启动成功;

8、s5、如第一环境变量的值≥设定值,则切换别的系统继续按照s4步骤进行启动,并重置第一环境变量的值为零;

9、s6、如第一环境变量的值<设定值,则继续选择该系统继续按照s4步骤进行启动。

10、进一步地,所述系统启动的方法为:

11、根据选择启动的系统,跳转到系统对应的位置进行启动,根据系统存储器件选择不同的跳转启动方式:

12、如系统的存储器件为nand flash,则系统启动时,根据flash分区表,找到该系统对应的分区名,选择对应ubi分区进行启动,并将启动参数写入环境变量bootargs中;

13、如系统的存储器件为emmc,则系统启动时,根据emmc分区表,找到该系统kernel所在的分区,同时找到对应rootfs所在的分区,将rootfs的信息写入环境变量bootargs中,启动kernel后,kernel通过bootloader传入的cmdline找到对应rootfs的位置并继续启动。

14、进一步地,当选择系统或切换系统进行启动时,根据第二环境变量的值选择系统或切换系统,及按照各系统的标记值进行选择,优先选择第一系统。

15、进一步地,还包括:在uboot中创建第三环境变量stab_sys,所述第三环境变量stab_sys用于评价各系统的稳定性,当选择系统或切换系统进行启动时,根据第三环境变量的值选择或切换稳定性高的系统;

16、第三环境变量stab_sys的表达式为:

17、

18、其中,k1、k2均为权重系数,为定值,msys为该系统的历史启动总次数,asys为该系统的历史启动成功总次数,bsys为该系统运行过程中出现故障的历史总次数。k1、k2为定值,asys、bsys、msys均为变量;

19、当一个系统启动时,该系统的msys值+1,如启动成功,则该系统asys值+1;该系统运行时,如出现故障重启,则该系统的bsys值+1。

20、进一步地,系统启动成功后,还包括:init进程中的bootcount程序通过使用fw_printf和fw_set工具对uboot-env分区中的环境变量进行读写,将第一环境变量中各系统的启动次数清零。

21、进一步地,所述s2步骤中,如为烧录后第一次启动,则bootloader启动后,需初始化环境变量分区。

22、进一步地,还包括:系统启动成功后,通过snapshot对当前系统进行备份(相当于进行一次快照),并将系统备份存储在存储介质snapshot分区中;

23、当s5步骤中第一环境变量的值(该系统的启动次数)≥设定值,如snapshot分区中存储有该系统备份,则恢复snapshot分区中该系统备份中的内容,再进行启动,如该系统仍无法启动,则按照s5步骤切换其它系统进行启动;如snapshot分区中没有存储该系统备份,则按照s5步骤至直接切换其它系统进行启动。即通过预先系统备份的方式来提高系统启动的成功率。

24、进一步地,还包括:系统启动成功后,通过snapshot对当前系统进行备份(相当于进行一次快照),并将系统备份存储在存储介质snapshot分区中;

25、当按照s5步骤所有系统切换完成且均没有启动成功时,如snapshot分区中存储有一个系统备份,则恢复snapshot分区中该系统备份中的内容,再进行启动。为节省存储介质空间,snapshot分区中可仅保存最后一次系统快照,如恢复后仍无法启动,不进行系统切换,转而进入下一步恢复步骤。

26、当然,如没有节省存储介质空间方面的顾虑,也可在snapshot分区中存储多个系统的备份,这种情况下,当所有系统切换完成且均没有启动成功时,则选择(按照系统标记顺序或随机选择)一个系统备份进行恢复和启动;如该系统仍无法启动时,则切换(按照顺序或随机的原则)其它系统备份进行恢复和启动。

27、进一步地,还包括:当按照s5步骤所有系统切换完成且都没有启动成功时,uboot判段是否连接网络:如果有连接网络,则连接预设的服务器,通过otg的方式升级某一个系统分区,并启动该系统,如该系统仍无法启动时,则转入下一步恢复步骤;

28、如果没有连接网络,则进入系统恢复模式,从存储介质中recovery分区获取并恢复系统备份,再启动该系统,如该系统仍无法启动时,则自动启动httpd服务,用户可通过浏览器进入预设网址进行手动固件升级。

29、进一步地,所述系统启动前还包括进行系统升级的步骤:若为bootloader下的升级,则根据第二环境变量获取当前启动的系统的编号标记,根据编号标记找到对应系统的kernel及rootfs分区位置,升级成功后重置第一环境变量的值为零,然后进行系统的启动。

30、进一步地,所述s3步骤前,还包括系统启动前进行系统升级的步骤:若为操作系统下的升级,则根据获取的第二环境变量的值计算出需要升级的系统的编号标记,再根据待升级系统的编号标记找到其系统kernel及rootfs分区位置,对该系统进行升级;升级成功后,切换到升级成功的系统进行启动,重置第一环境变量的值为零,然后进行系统的启动。

31、本发明在嵌入设备中设置多操作系统,通过在系统启动时进行系统选择的逻辑处理来提高系统启动的成功率和效率,从而实现提高设备运行的可靠性和稳定性的目的,系统启动的选择可用于设备因硬件故障或软件故障而导致的设备重启,也适用于设备的人工启动;通过对各系统启动和运行历史情况的记录和统计来评价各系统的稳定性,在进行系统选择和切换时根据各系统的稳定性评分高低来选择合适的系统,进一步提高了系统启动的成功率和系统运行的稳定可靠性;在所有系统均不能成功启动时,通过恢复存储器件中的备份或连接网络服务器来对系统进行恢复和升级,进一步保障了系统启动和运行的可靠性;同时可根据存储器件的不同类型选择相应的启动跳转方法,并可针对不同的应用场景选择不同的系统升级流程,增加操作系统启动的可靠性,避免因升级导致的系统不正常,保证用户在任何情况下均有可使用的操作系统使用或升级;除此之外,开发人员在开发过程中,也可以使用多系统对不同软件进行对比,并在短时间内完成系统切换,极大的减少了开发时间。

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