CN116627519A - 一种嵌入式设备的多系统启动方法 - Google Patents

一种嵌入式设备的多系统启动方法 Download PDF

Info

Publication number
CN116627519A
CN116627519A CN202310675437.4A CN202310675437A CN116627519A CN 116627519 A CN116627519 A CN 116627519A CN 202310675437 A CN202310675437 A CN 202310675437A CN 116627519 A CN116627519 A CN 116627519A
Authority
CN
China
Prior art keywords
starting
started
environment variable
partition
value
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.)
Pending
Application number
CN202310675437.4A
Other languages
English (en)
Inventor
田萌
黄文哲
张小峰
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
SHANGHAI BEIRUI INFORMATION TECHNOLOGY CO LTD
Original Assignee
SHANGHAI BEIRUI INFORMATION TECHNOLOGY CO LTD
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by SHANGHAI BEIRUI INFORMATION TECHNOLOGY CO LTD filed Critical SHANGHAI BEIRUI INFORMATION TECHNOLOGY CO LTD
Priority to CN202310675437.4A priority Critical patent/CN116627519A/zh
Publication of CN116627519A publication Critical patent/CN116627519A/zh
Pending legal-status Critical Current

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/4401Bootstrapping
    • G06F9/4406Loading of operating system
    • G06F9/441Multiboot arrangements, i.e. selecting an operating system to be loaded
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/07Responding to the occurrence of a fault, e.g. fault tolerance
    • G06F11/14Error detection or correction of the data by redundancy in operation
    • G06F11/1402Saving, restoring, recovering or retrying
    • G06F11/1415Saving, restoring, recovering or retrying at system level
    • G06F11/1438Restarting or rejuvenating
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/60Software deployment
    • G06F8/65Updates
    • YGENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y02TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
    • Y02DCLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
    • Y02D10/00Energy efficient computing, e.g. low power processors, power management or thermal management

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • General Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Computer Security & Cryptography (AREA)
  • Quality & Reliability (AREA)
  • Stored Programmes (AREA)

Abstract

一种嵌入式设备的多系统启动方法,包括:在uboot中创建第一环境变量和第二环境变量以标记各系统的启动次数和当前启动的系统,以及用于评价各系统稳定性的第三环境变量;BootLoader启动后,读取环境变量数据,并对读取的数据进行CRC校验;开始启动系统时,根据第二环境变量或第三环境变量的值选择系统进行启动,如未正常启动,判断第一环境变量是否大于设定值,如是,则进行备份恢复或切换别的系统进行启动;并可根据存储器件和应用场景选择相应的启动跳转和系统升级方法。本发明可提高系统启动的成功率和效率,提高设备运行的可靠性和稳定性,避免因升级导致的系统不正常,保证用户在任何情况下均有可使用的操作系统。

Description

一种嵌入式设备的多系统启动方法
技术领域
本发明涉及系统启动技术领域,尤其涉及一种嵌入式设备的多系统启动方法。
背景技术
随着通信技术、物联网技术、人工智能技术以及智能家居等领域的不断发展,嵌入式设备得到广泛应用,涉及方方面面各个领域,如工控领域(机械臂、智能测试仪)、智能家居领域、交通物流领域、医疗健康领域、通信领域(路由器、企业级网关、通信基站设备、交换机)等。在一些领域中,设备运行的稳定性和可维护性对用户体验的影响越来越大。为提高设备的运行可靠性和可维护性,可在工控机、基站设备、交换机等设备中安装多个操作系统,方便用户使用,一旦一个系统出现问题,用户可以进入另一个系统,不会因为系统崩溃而导致的循环重启、无法开机等无法正常使用的问题;同时多个系统之间相互独立,可独立运行各自支持的应用程序,也扩大了设备的应用灵活性和使用范围。
但安装有多个系统的设备在系统启动时存在系统选择和升级的问题,特别是当出现系统故障重启时如何协调多个系统之间的配合关系,以提高设备运行的可靠性和稳定性,则显得尤为重要。
发明内容
本发明的目的是克服上述现有技术的缺点,提供一种系统启动的成功率高、系统运行稳定可靠的一种嵌入式设备的多系统启动方法,该方法为解决单固件启动不可靠的问题,进一步提升了设备运行的稳定可靠性,保证设备在出现无法正常使用的情况下,仍有可启动的系统供用户使用。
本发明是通过以下技术方案来实现的:
一种嵌入式设备的多系统启动方法,包括如下步骤:
S1、给各系统进行编号标记,并将各系统的编号标记记载在存储器件的分区表中,并将编号记录在分区名称上以进行区分和获取;在uboot中创建第一环境变量和第二环境变量,所述第一环境变量用于标记各系统的启动次数,所述第二环境变量用于标记当前启动的系统;
S2、引导加载程序BootLoader启动后,读取uboot-env中的环境变量数据,并对读取的数据进行CRC校验,以确保数据读取准确;
S3、选择系统进行启动;
S4、如选择的系统启动成功,重置第一环境变量的值为零,如未正常启动,则将第一环境变量的值加一,并判断第一环境变量的值是否大于设定值,并根据判断情况执行步骤S5或S6,直至系统启动成功;
S5、如第一环境变量的值≥设定值,则切换别的系统继续按照S4步骤进行启动,并重置第一环境变量的值为零;
S6、如第一环境变量的值<设定值,则继续选择该系统继续按照S4步骤进行启动。
进一步地,所述系统启动的方法为:
根据选择启动的系统,跳转到系统对应的位置进行启动,根据系统存储器件选择不同的跳转启动方式:
如系统的存储器件为NAND Flash,则系统启动时,根据flash分区表,找到该系统对应的分区名,选择对应UBI分区进行启动,并将启动参数写入环境变量bootargs中;
如系统的存储器件为EMMC,则系统启动时,根据emmc分区表,找到该系统kernel所在的分区,同时找到对应rootfs所在的分区,将rootfs的信息写入环境变量bootargs中,启动kernel后,kernel通过BootLoader传入的cmdline找到对应rootfs的位置并继续启动。
进一步地,当选择系统或切换系统进行启动时,根据第二环境变量的值选择系统或切换系统,及按照各系统的标记值进行选择,优先选择第一系统。
进一步地,还包括:在uboot中创建第三环境变量stab_sys,所述第三环境变量stab_sys用于评价各系统的稳定性,当选择系统或切换系统进行启动时,根据第三环境变量的值选择或切换稳定性高的系统;
第三环境变量stab_sys的表达式为:
其中,K1、K2均为权重系数,为定值,msys为该系统的历史启动总次数,asys为该系统的历史启动成功总次数,bsys为该系统运行过程中出现故障的历史总次数。K1、K2为定值,asys、bsys、msys均为变量;
当一个系统启动时,该系统的msys值+1,如启动成功,则该系统asys值+1;该系统运行时,如出现故障重启,则该系统的bsys值+1。
进一步地,系统启动成功后,还包括:init进程中的bootcount程序通过使用fw_printf和fw_set工具对uboot-env分区中的环境变量进行读写,将第一环境变量中各系统的启动次数清零。
进一步地,所述S2步骤中,如为烧录后第一次启动,则BootLoader启动后,需初始化环境变量分区。
进一步地,还包括:系统启动成功后,通过SnapShot对当前系统进行备份(相当于进行一次快照),并将系统备份存储在存储介质SnapShot分区中;
当S5步骤中第一环境变量的值(该系统的启动次数)≥设定值,如SnapShot分区中存储有该系统备份,则恢复SnapShot分区中该系统备份中的内容,再进行启动,如该系统仍无法启动,则按照S5步骤切换其它系统进行启动;如SnapShot分区中没有存储该系统备份,则按照S5步骤至直接切换其它系统进行启动。即通过预先系统备份的方式来提高系统启动的成功率。
进一步地,还包括:系统启动成功后,通过SnapShot对当前系统进行备份(相当于进行一次快照),并将系统备份存储在存储介质SnapShot分区中;
当按照S5步骤所有系统切换完成且均没有启动成功时,如SnapShot分区中存储有一个系统备份,则恢复SnapShot分区中该系统备份中的内容,再进行启动。为节省存储介质空间,snapshot分区中可仅保存最后一次系统快照,如恢复后仍无法启动,不进行系统切换,转而进入下一步恢复步骤。
当然,如没有节省存储介质空间方面的顾虑,也可在SnapShot分区中存储多个系统的备份,这种情况下,当所有系统切换完成且均没有启动成功时,则选择(按照系统标记顺序或随机选择)一个系统备份进行恢复和启动;如该系统仍无法启动时,则切换(按照顺序或随机的原则)其它系统备份进行恢复和启动。
进一步地,还包括:当按照S5步骤所有系统切换完成且都没有启动成功时,uboot判段是否连接网络:如果有连接网络,则连接预设的服务器,通过otg的方式升级某一个系统分区,并启动该系统,如该系统仍无法启动时,则转入下一步恢复步骤;
如果没有连接网络,则进入系统恢复模式,从存储介质中recovery分区获取并恢复系统备份,再启动该系统,如该系统仍无法启动时,则自动启动httpd服务,用户可通过浏览器进入预设网址进行手动固件升级。
进一步地,所述系统启动前还包括进行系统升级的步骤:若为BootLoader下的升级,则根据第二环境变量获取当前启动的系统的编号标记,根据编号标记找到对应系统的kernel及rootfs分区位置,升级成功后重置第一环境变量的值为零,然后进行系统的启动。
进一步地,所述S3步骤前,还包括系统启动前进行系统升级的步骤:若为操作系统下的升级,则根据获取的第二环境变量的值计算出需要升级的系统的编号标记,再根据待升级系统的编号标记找到其系统kernel及rootfs分区位置,对该系统进行升级;升级成功后,切换到升级成功的系统进行启动,重置第一环境变量的值为零,然后进行系统的启动。
本发明在嵌入设备中设置多操作系统,通过在系统启动时进行系统选择的逻辑处理来提高系统启动的成功率和效率,从而实现提高设备运行的可靠性和稳定性的目的,系统启动的选择可用于设备因硬件故障或软件故障而导致的设备重启,也适用于设备的人工启动;通过对各系统启动和运行历史情况的记录和统计来评价各系统的稳定性,在进行系统选择和切换时根据各系统的稳定性评分高低来选择合适的系统,进一步提高了系统启动的成功率和系统运行的稳定可靠性;在所有系统均不能成功启动时,通过恢复存储器件中的备份或连接网络服务器来对系统进行恢复和升级,进一步保障了系统启动和运行的可靠性;同时可根据存储器件的不同类型选择相应的启动跳转方法,并可针对不同的应用场景选择不同的系统升级流程,增加操作系统启动的可靠性,避免因升级导致的系统不正常,保证用户在任何情况下均有可使用的操作系统使用或升级;除此之外,开发人员在开发过程中,也可以使用多系统对不同软件进行对比,并在短时间内完成系统切换,极大的减少了开发时间。
附图说明
图1为本发明实施例一的系统启动流程图。
图2为本发明实施例一中一种实施方式的系统启动逻辑图。
图3为本发明实施例一中另一实施方式的系统启动逻辑图。
图4为本发明实施例一中另一实施方式的系统启动逻辑图。
图5为本发明实施例一中又一实施方式的系统启动逻辑图。
图6为本发明实施例一中又一实施方式的系统启动逻辑图。
图7为本发明实施例一中又一实施方式的系统启动逻辑图。
图8为本发明实施例一中的固件结构图。
图9为本发明实施例二中一种实施方式的系统启动逻辑图。
具体实施方式
术语解释:
Operating System:操作系统(OS),一组主管并控制计算机操作、运用和运行硬件、软件资源和提供公共服务来组织用户交互的互相关联的系统软件程序。
Firmware:固件(FW),写入flash、emmc等可擦写可编程只读存储器中的程序。
BootLoader:引导加载程序,在操作系统内核运行之前运行,用于初始化硬件设备、建立内存空间映射图,一般使用uboot作为BootLoader。
Kernel:内核,操作系统最基础的部分,为众多应用程序提供对计算机硬件的安全访问的一部分软件。
Rootfs:文件系统,操作系统用于明确存储设备或分区上的文件的方法和数据结构。
Offset:偏移量,在当前段内的内存单元地址相对于段首单元的字节距离。
MTD子系统:flash驱动直接操作设备,而MTD在flash驱动之上,向上呈现统一的操作接口。
UBI子系统:UBI子系统是基于MTD子系统的,在MTD上实现nand特性的管理逻辑,向上屏蔽nand的特性。
UBI文件系统:无排序区块镜像文件系统(Unsorted Block Image File System,UBIFS)是用于固态存储设备上,并与logfs互相竞争,作为jffs2的后继文件系统之一;是基于UBI子系统的文件系统,实现文件系统的所有基本功能,例如文件的实现,日志的实现。
CmdLine:由Uboot在引导内核启动时传递给内核的,其作用是指导内核启动。
实施例一
一种嵌入式设备的多系统启动方法,如图1,包括如下步骤:
S1、给各系统进行编号标记,在uboot中创建第一环境变量(mult_boot_count)和第二环境变量(mult_boot_sys),所述第一环境变量(mult_boot_count)用于标记各系统的启动次数,所述第二环境变量(mult_boot_sys)用于标记当前启动的系统。uboot在第一次启动时初始化这两个环境变量,并将其保存在环境变量参数uboot-env中。各系统的编号在存储器件的分区表中进行记载,并将编号记录在分区名称上以进行区分和获取。
本发明适用于嵌入式设备中多操作系统,可为双操作系统,也可根据存储设备大小添加三个或更多个系统做为启动系统,适应不同实际的应用场景。如为双操作系统,也可将第一环境变量命名为dual_boot_count,将第二环境变量命名为dual_boot_sys。
S2、引导加载程序BootLoader启动后,读取uboot-env中的环境变量数据,并对读取的数据进行CRC校验,以确保数据读取准确;
所述S2步骤中,如为烧录后第一次启动,则BootLoader启动后,先需初始化环境变量分区,再读取uboot-env中的环境变量数据。
S3、如图2,开始启动系统时,根据第二环境变量(mult_boot_sys)的值选择启动的系统进行启动。即上电启动时根据第二环境变量的值选择对应的系统进行启动,如为第一次上电,依据顺序的原则,默认选择启动第一个系统,如多个系统,分别标记为OS-0、OS-1、OS-2……则默认先选择OS-0操作系统,依次为OS-1、OS-2……;如为系统重启(故障导致的重启或系统启动失败导致的重启),只要当前系统启动的次数不超过设定值,默认选择当前系统进行重启,当当前系统启动的次数超过设定值则会自动切换系统进行重启,系统切换按照前述顺序的原则。
S4、如系统启动成功,重置第一环境变量的值为零,即将该系统的启动次数重置为零,重新对系统启动次数进行计数,如未正常启动,则将第一环境变量的值(该系统的启动次数)(mult_boot_count)加一,并判断第一环境变量的值(该系统的启动次数)是否大于设定值,并根据判断情况执行步骤S5或S6,直至系统启动成功;
S5、如第一环境变量的值(该系统的启动次数)≥设定值,则切换别的系统继续按照S4步骤进行启动,并重置第一环境变量的值为零,切换系统时可采用顺序切换的原则,可预先对切换顺序进行设置;
S6、如第一环境变量的值(该系统的启动次数)<设定值,则继续选择该系统继续按照S4步骤进行启动。
启动次数的设定值可根据实际应用场景进行调整,如可设定为三次,认为操作系统启动三次仍没有正常进入操作系统,即判定目前启动操作系统无法启动,则执行切换操作系统的操作。
S7、系统启动成功后,还包括:init进程中的bootcount程序通过使用fw_printf和fw_set工具对uboot-env分区中的环境变量进行读写,其主要是将第一环境变量(mult_boot_count)中各系统的启动次数清零。
作为其中一种实施方式,还包括系统启动成功后,通过SnapShot对系统进行备份的步骤,如图3所示,具体方法为:
A1、系统启动成功后,通过SnapShot对当前系统进行备份(相当于进行一次快照),并将系统备份存储在存储介质SnapShot分区中,如SnapShot分区中已有该系统的备份,则覆盖之前的系统备份;
A2、当S5步骤中第一环境变量的值(该系统的启动次数)≥设定值,如SnapShot分区中存储有该系统备份,则恢复SnapShot分区中该系统备份中的内容,再进行启动,如该系统仍无法启动,则按照S5步骤切换其它系统进行启动;
A3、如SnapShot分区中没有存储该系统备份,则按照S5步骤至直接切换其它系统进行启动;切换的系统的启动方法仍可采用上述A2步骤的方法,即当第一环境变量的值(切换系统的启动次数)≥设定值,若在SnapShot分区中存储有该切换系统的备份,则恢复SnapShot分区中该切换系统备份中的内容,再进行启动,以此类推,直至系统启动成功。即通过预先系统备份的方式来提高系统启动的成功率。
为节省存储介质空间,snapshot分区中可仅保存最后一次系统快照,如恢复后仍无法启动,不进行系统切换,转而进入下一步其它恢复步骤。作为其中另一种实施方式,也可在SnapShot分区中存储多个系统的备份,当一个系统备份没有恢复和启动成功时,切换其它系统备份进行恢复和启动。具体可如图4所示,通过以下方式来实现:
B1、系统启动成功后,通过SnapShot对当前系统进行备份(相当于进行一次快照),并将系统备份存储在存储介质SnapShot分区中;
B2、当按照S5步骤所有系统切换完成且都没有启动成功时,如在SnapShot分区中存储有系统备份,若有一个或多个系统的备份,则按照系统标记顺序或随机选择一个系统备份,恢复SnapShot分区中该系统备份中的内容,再进行启动;
B3、如该系统仍无法启动且SnapShot分区中还存在其它系统备份,则按照顺序或随机的原则切换其它系统备份进行恢复和启动,直至系统启动成功;
B4、当SnapShot分区中的所有系统备份恢复后仍无法启动则启动中止。
作为其中另一种实施方式,如图5所示,当执行S5步骤时所有系统切换完成且都没有启动成功时,uboot判段是否连接网络:
C1、如果有连接网络,则连接预设的服务器,通过otg的方式升级某一个系统分区,并启动该系统,如该系统仍无法启动时,则转入下一步其它恢复步骤,如按照下述C2步骤进行系统恢复和启动;
C2、如果没有连接网络,则进入系统恢复模式,从存储介质中recovery分区获取并恢复系统备份,并启动该系统,如该系统仍无法启动时,则自动启动httpd服务,用户可通过浏览器进入预设网址进行手动固件升级。
选择升级的系统可按照各系统的标记顺序进行选择,或随机选择,当一个系统升级或启动不成功,可切换其它的系统进行升级和启动,直至启动成功。
作为其中又一种实施方式,当启动某一系统时,当其启动次数超过设定值时,先进行SnapShot分区中系统备份的恢复和启动,如仍没有启动成功该系统时,再切换其它系统按照上述方法进行启动,切换的顺序按照各系统的标记顺序选择或随机选择的原则进行,当所有系统切换完成且都没有启动成功时,在进行系统联网升级或通过recovery分区的系统备份升级后启动,如图6所示,具体为:
D1、系统启动成功后,通过SnapShot对当前系统进行备份(相当于进行一次快照),并将系统备份存储在存储介质SnapShot分区中,如SnapShot分区中已有该系统的备份,则覆盖之前的系统备份;
D2、当第一环境变量的值(该系统的启动次数)≥设定值,如SnapShot分区中存储有该系统备份,则恢复SnapShot分区中该系统备份中的内容,再进行启动,如该系统仍无法启动,则按照S5步骤切换其它系统进行启动;
D3、如SnapShot分区中没有存储该系统备份,则按照S5步骤直接切换其它系统进行启动;切换的系统的启动方法仍可采用上述D2步骤的方法,即当第一环境变量的值(切换系统的启动次数)≥设定值,若在SnapShot分区中存储有该切换系统的备份,则恢复SnapShot分区中该切换系统备份中的内容,再进行启动,以此类推,直至系统启动成功;
D4、当按照上述D2至D3的方法所有系统切换完成且都没有启动成功时,uboot判段是否连接网络,如果有连接网络,则连接预设的服务器,通过otg的方式升级某一个系统分区,并启动该系统,如该系统仍无法启动时,则转入下一步其它恢复步骤,如按照下述D5步骤进行系统恢复和启动;
D5、如果没有连接网络,则进入系统恢复模式,从存储介质中recovery分区获取并恢复系统备份,并启动该系统,如该系统仍无法启动时,则自动启动httpd服务,用户可通过浏览器进入预设网址进行手动固件升级。
选择升级的系统可按照各系统的标记顺序进行选择,或随机选择,当一个系统升级或启动不成功,可切换其它的系统进行升级和启动,直至启动成功。
作为其中又一种实施方式,当所有系统切换完成且都没有启动成功时,先进行SnapShot分区中系统备份的恢复和启动,当SnapShot分区中所有的系统备份均切换完成仍没有启动成功时,则检测是否联网,如联网则进行otg恢复,未联网或启动失败,则从recovery分区中恢复系统,如仍无法启动,则自动启动httpd服务,用户可通过浏览器进入预设网址进行手动固件升级。参见图7,具体为:
E1、通过SnapShot对当前系统进行备份(相当于进行一次快照),并将系统备份存储在存储介质SnapShot分区中;
E2、当按照S5步骤轮流切换所有系统且所有的系统启动次数均≥设定值,且均没有启动成功时,如在SnapShot分区中存储有系统备份,若有多个系统的备份,则按照系统标记顺序或随机选择一个系统备份,则恢复SnapShot分区中该系统备份中的内容,再进行启动;
E3、如该系统仍无法系统且SnapShot分区中还存在其它系统备份,则按照顺序或随机的原则切换进行其它系统备份的恢复和启动,直至系统启动成功;
E4、当按照上述E2和E3步骤切换SnapShot分区中所有的系统备份恢复,但系统仍没有启动成功时,uboot判段是否有网络连接,如果有网络连接,则连接预设的服务器,通过otg的方式升级某一个系统分区,并启动该系统,如该系统仍无法启动时,则转入下一步其它恢复步骤,如按照下述E5步骤进行系统恢复和启动;
E5、如果没有连接网络,则进入系统恢复模式,从存储介质中recovery分区获取或恢复系统备份,并启动该系统,如该系统仍无法启动时,则自动启动httpd服务,用户可通过浏览器进入预设网址进行手动固件升级。
上述系统启动时,启动的方法为:
根据选择启动的系统,跳转到系统对应的位置进行启动,由于存储器件不同,跳转启动的方式也有所不同,故需根据系统存储器件选择不同的跳转启动方式:
A.NAND Flash
由于NAND Flash的特性,此种存储器件采用ubi文件系统做统一管理,制作固件时将单个系统的kernel和rootfs打包后放入单独一个UBI的卷中,根据操作系统的数量设有相应数量的UBI卷,分别存储对应的操作系统,如为双系统,如图8,此时固件分区中同时存在两个不同的UBI卷,分别存储两个不同的操作系统。因此,如系统的存储器件为NANDFlash,则系统启动时,BootLoader在确定启动哪个操作系统之后,根据flash分区表,找到该系统对应的分区名,选择对应UBI分区进行启动,并将启动参数写入环境变量bootargs中。
B.EMMC
当使用此种存储器件时,单独划分出两个分区分别存放各个系统的kernel和rootfs,如为双操作系统,此时emmc中就存在4个不同的分区,用于存放两个不同操作系统的kernel和rootfs。因此,如系统的存储器件为EMMC,则系统启动时,BootLoader在确定启动哪个操作系统之后,根据emmc分区表,找到该系统kernel所在的分区,同时找到对应rootfs所在的分区,将rootfs的信息写入环境变量bootargs中,启动kernel后,kernel通过BootLoader传入的cmdline找到对应rootfs的位置并继续启动。
存储器件也可为其它类型,如SPI NOR FLASH,系统启动时根据其各存储期间的特征找到对应系统的kernel和rootfs即可启动该系统。
如同时存在多个存储器件,各存储器件上存储一个或多个操作系统,亦只需要uboot启动完成后跳转到不同系统的启动地址即可。
系统启动前,还包括对系统进行系统升级的步骤:
若为BootLoader下的升级,即uboot启动阶段的升级,由于BootLoader下的升级一般是开发者或用于遇到特殊情况售后指导升级的情况,为系统启动前的升级,所以其设计的逻辑为:启动时选择需升级的系统,根据第二环境变量mult_boot_sys获取当前启动的系统的编号标记,根据编号标记找到对应系统的kernel及rootfs分区位置,升级成功后重置第一环境变量(该系统启动次数)为零,然后按照S3步骤进行系统的启动。此种情况下,在系统启动前,应先明确需要升级的系统,在启动阶段选择该系统,并由此可获取第二环境变量mult_boot_sys的值。
若为操作系统下的升级,此种升级形式多为用户使用,为避免用升级过程中意外断电、系统升级不完全导致的系统启动失败,故在一个操作系统正常运行的环境下对另一操作系统进行升级,所以其设计逻辑为:正在运行的系统获取第二环境变量mult_boot_sys,根据第二环境变量mult_boot_sys的值计算出需要升级的系统的编号标记(当前为升级顺序的下个系统),再根据待升级系统的编号标记找到其系统kernel及rootfs分区位置,对该系统进行升级;升级成功后,切换到升级成功的系统进行启动,重置第一环境变量(系统启动次数标记)的值为零,然后按照S3步骤进行系统的启动。此种情况,需要先选择一个暂时不需要升级的系统启动运行,在该系统运行环境下对其它系统进行升级,升级成功后启动该系统,可再在该系统运行环境下对别的操作系统进行升级,如此可对多个系统一一进行升级。
实施例二
一种嵌入式设备的多系统启动方法,其余与实施例一相同,改进之处在于选择系统或切换系统时的选择原则。
各个系统的稳定性一般来说会存在差别,为了使系统上电启动时和切换系统重启时启动系统的选择更加科学和高效,故可通过各系统的历史启动记录和运行记录对各系统进行稳定性评判,在选择系统时依据各系统的稳定性数据来合理选择启动的系统。具体的方案如下:
在uboot中创建第三环境变量stab_sys,所述第三环境变量stab_sys用于评价各系统的稳定性,第三环境变量stab_sys的表达式为:
其中,K1、K2均为权重系数,为定值,msys为该系统的历史启动总次数,asys为该系统的历史启动成功总次数,bsys为该系统运行过程中出现故障的历史总次数。K1、K2为定值,asys、bsys、msys均为变量。
上述公式综合各系统启动的成功率和运行时的故障率(稳定性)来评价各系统的稳定可靠性,权重系统K1、K2可根据对启动成功率和运行稳定性的不同要求来实际设定,K1+K2可等于1,也可不等于1。
参照实施例一中系统启动的方法,如图9所示,当一个系统启动时,该系统的msys值+1,如启动成功,则该系统asys值+1;该系统运行时,如出现故障重启,则该系统的bsys值+1。由此,可对各系统的启动历史和运行历史进行统计,得到各系统的稳定性评分stab_sys,以前述多个系统OS-0、OS-1、OS-2……为例,uboot中存储第三环境变量stab_sys,分别为stab_OS-0、stab_OS-1、stab_OS-2……,分别对应各系统的稳定性,评分高的系统表明其系统稳定等级较高。
当面临需要选择系统或切换系统进行启动时,根据评分的高低排列选择的顺序,即根据stab_OS-0、stab_OS-1、stab_OS-2……数值的大小进行排列,选择评分最高排列最前列的系统进行启动,当一个系统的启动次数超过设定值时,再切换系统启动,在余下系统中选择第三环境变量stab_sys数值最大的系统,依次类推。相比于按照系统的标记值进行选择的方式,更加科学和合理,系统的稳定性评分stab_sys随着系统的启动和运行动态变化,能更科学地评价系统的稳定性,所有系统的排列顺序同时随着stab_sys值而动态变化。
实施例一中其它的实施方式中在系统的启动和运行时均进行相应的记录,以不断更新各系统的稳定性评分,并在相应的系统选择和系统切换步骤中均可采用上述根据各系统的稳定等级来进行选择的方法,在此不一一赘述。
上列详细说明是针对本发明可行实施例的具体说明,该实施例并非用以限制本发明的专利范围,凡未脱离本发明所为的等效实施或变更,均应包含于本案的专利范围中。

Claims (10)

1.一种嵌入式设备的多系统启动方法,其特征在于,包括如下步骤:
S1、给各系统进行编号标记,并将各系统的编号标记记载在存储器件的分区表中,在uboot中创建第一环境变量和第二环境变量,所述第一环境变量用于标记各系统的启动次数,所述第二环境变量用于标记当前启动的系统;
S2、引导加载程序BootLoader启动后,读取uboot-env中的环境变量数据,并对读取的数据进行CRC校验,以确保数据读取准确;
S3、选择系统进行启动;
S4、如选择的系统启动成功,重置第一环境变量的值为零,如未正常启动,则将第一环境变量的值加一,并判断第一环境变量的值是否大于设定值,根据判断情况执行步骤S5或S6,直至系统启动成功;
S5、如第一环境变量≥设定值,则切换别的系统继续按照S4步骤进行启动,并重置第一环境变量的值为零;
S6、如第一环境变量<设定值,则继续选择该系统并按照S4步骤进行启动。
2.根据权利要求1所述的一种嵌入式设备的多系统启动方法,其特征在于,所述系统启动的方法为:
根据选择启动的系统,跳转到系统对应的位置进行启动,根据系统存储器件选择不同的跳转启动方式:
如系统的存储器件为NAND Flash,则系统启动时,根据flash分区表,找到该系统对应的分区名,选择对应UBI分区进行启动,并将启动参数写入环境变量bootargs中;
如系统的存储器件为EMMC,则系统启动时,根据emmc分区表,找到该系统kernel所在的分区,同时找到对应rootfs所在的分区,将rootfs的信息写入环境变量bootargs中,启动kernel后,kernel通过BootLoader传入的cmdline找到对应rootfs的位置并继续启动。
3.根据权利要求1所述的一种嵌入式设备的多系统启动方法,其特征在于,当选择系统或切换系统进行启动时,根据第二环境变量的值选择系统或切换系统。
4.根据权利要求1所述的一种嵌入式设备的多系统启动方法,其特征在于,还包括:在uboot中创建第三环境变量stab_sys,所述第三环境变量stab_sys用于评价各系统的稳定性,当选择系统或切换系统进行启动时,根据第三环境变量的值选择或切换稳定性高的系统;
第三环境变量stab_sys的表达式为:
其中,K1、K2均为权重系数,msys为该系统的历史启动总次数,asys为该系统的历史启动成功总次数,bsys为该系统运行过程中出现故障的历史总次数;
当一个系统启动时,该系统的msys值+1,如启动成功,则该系统asys值+1;该系统运行时,如出现故障重启,则该系统的bsys值+1。
5.根据权利要求1所述的一种嵌入式设备的多系统启动方法,其特征在于,系统启动成功后,还包括:init进程中的bootcount程序通过使用fw_printf和fw_set工具对uboot-env分区中的环境变量进行读写,将第一环境变量中系统的启动次数清零;
所述S2步骤中,如为烧录后第一次启动,则BootLoader启动后,需初始化环境变量分区。
6.根据权利要求1所述的一种嵌入式设备的多系统启动方法,其特征在于,还包括:系统启动成功后,通过SnapShot对当前系统进行备份,并将系统备份存储在存储介质SnapShot分区中;
当S5步骤中第一环境变量的值≥设定值,如SnapShot分区中存储有该系统备份,则恢复SnapShot分区中该系统备份中的内容,再进行启动,如该系统仍无法启动,则按照S5步骤切换其它系统进行启动;如SnapShot分区中没有存储该系统备份,则按照S5步骤直接切换其它系统进行启动。
7.根据权利要求1所述的一种嵌入式设备的多系统启动方法,其特征在于,还包括:系统启动成功后,通过SnapShot对当前系统进行备份,并将系统备份存储在存储介质SnapShot分区中;
当按照S5步骤所有系统切换完成且均没有启动成功时,如SnapShot分区中存储有系统备份,则恢复SnapShot分区中系统备份中的内容,再进行启动。
8.根据权利要求1所述的一种嵌入式设备的多系统启动方法,其特征在于,还包括:当所有系统切换完成且都没有启动成功时,uboot判段是否连接网络:如果有连接网络,则连接预设的服务器,通过otg的方式升级某一个系统分区,并启动该系统,如该系统仍无法启动时,则进入系统恢复模式进行启动;
如果没有连接网络,则进入系统恢复模式,从存储介质中recovery分区获取并恢复系统备份,再启动该系统,如该系统仍无法启动时,则自动启动httpd服务,用户通过浏览器进入预设网址进行手动固件升级。
9.根据权利要求1所述的一种嵌入式设备的多系统启动方法,其特征在于,所述系统启动前还包括对系统进行升级的步骤:若为BootLoader下的升级,则根据第二环境变量获取当前启动的系统的编号标记,根据编号标记找到对应系统的kernel及rootfs分区位置,升级成功后重置第一环境变量的值为零,然后进行系统的启动。
10.根据权利要求1所述的一种嵌入式设备的多系统启动方法,其特征在于,所述系统启动前还包括对系统进行升级的步骤:若为操作系统下的升级,则根据获取的第二环境变量的值计算出需要升级的系统的编号标记,再根据待升级系统的编号标记找到其系统kernel及rootfs分区位置,对该系统进行升级;升级成功后,切换到升级成功的系统进行启动,重置第一环境变量的值为零,然后进行系统的启动。
CN202310675437.4A 2023-06-07 2023-06-07 一种嵌入式设备的多系统启动方法 Pending CN116627519A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202310675437.4A CN116627519A (zh) 2023-06-07 2023-06-07 一种嵌入式设备的多系统启动方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202310675437.4A CN116627519A (zh) 2023-06-07 2023-06-07 一种嵌入式设备的多系统启动方法

Publications (1)

Publication Number Publication Date
CN116627519A true CN116627519A (zh) 2023-08-22

Family

ID=87613387

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202310675437.4A Pending CN116627519A (zh) 2023-06-07 2023-06-07 一种嵌入式设备的多系统启动方法

Country Status (1)

Country Link
CN (1) CN116627519A (zh)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN117312056A (zh) * 2023-11-29 2023-12-29 麒麟软件有限公司 一种操作系统升级备份方法

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN117312056A (zh) * 2023-11-29 2023-12-29 麒麟软件有限公司 一种操作系统升级备份方法

Similar Documents

Publication Publication Date Title
US7734945B1 (en) Automated recovery of unbootable systems
CN100595778C (zh) 鉴定病毒文件的方法、装置
WO2010098019A4 (en) Program update device, program update method, and information processing device
CN106020865A (zh) 一种系统升级方法和装置
CN104915219A (zh) 单片机程序升级方法及装置
CN112732503B (zh) 一种bios问题定位方法、装置和计算机可读存储介质
CN116627519A (zh) 一种嵌入式设备的多系统启动方法
CN104915226A (zh) 一种网络设备软件启动方法、装置及网络设备
CN108345464A (zh) 一种安卓系统的启动方法及安卓车机
CN112015447B (zh) 电子设备的系统更新方法及装置、电子设备及存储介质
CN113157303A (zh) 升级方法、嵌入式系统、终端及计算机存储介质
CN113641390B (zh) 一种系统升级方法、装置、设备及存储介质
CN112433739B (zh) 一种固件升级方法
CN116361817B (zh) 一种Linux下ubi文件系统的保护方法
JP3675375B2 (ja) 不揮発性メモリ並びに不揮発性メモリのデータ書き換え方法
CN115827069A (zh) 服务器主板的启动控制方法、系统及装置
CN113778485A (zh) 电子芯片的系统运行方法、装置、电子芯片和存储介质
CN110795155B (zh) 系统启动方法及装置、电子设备、存储介质
CN101192161B (zh) 更新影像文件的方法
CN114518845A (zh) 数据存储方法、装置、介质及设备
CN114153503A (zh) 一种bios控制方法、装置、介质
US10592329B2 (en) Method and electronic device for continuing executing procedure being aborted from physical address where error occurs
CN1297910C (zh) 一种用于存储和恢复计算机系统信息的方法和装置
CN116185461B (zh) 固件升级方法及系统
CN111367717B (zh) 一种电子设备的恢复方法、装置及系统

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination