CN117093247A - 嵌入式设备的固件升级方法、装置、芯片和计算设备 - Google Patents

嵌入式设备的固件升级方法、装置、芯片和计算设备 Download PDF

Info

Publication number
CN117093247A
CN117093247A CN202311059049.XA CN202311059049A CN117093247A CN 117093247 A CN117093247 A CN 117093247A CN 202311059049 A CN202311059049 A CN 202311059049A CN 117093247 A CN117093247 A CN 117093247A
Authority
CN
China
Prior art keywords
firmware
loader
program
upgrade
loading
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
CN202311059049.XA
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.)
Zhuhai Jieli Technology Co Ltd
Original Assignee
Zhuhai Jieli 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 Zhuhai Jieli Technology Co Ltd filed Critical Zhuhai Jieli Technology Co Ltd
Priority to CN202311059049.XA priority Critical patent/CN117093247A/zh
Publication of CN117093247A publication Critical patent/CN117093247A/zh
Pending legal-status Critical Current

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/60Software deployment
    • G06F8/65Updates
    • G06F8/654Updates using techniques specially adapted for alterable solid state memories, e.g. for EEPROM or flash memories

Landscapes

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

Abstract

本发明涉及嵌入式技术领域,提供了一种嵌入式设备的固件升级方法、装置、芯片和计算设备。其中,嵌入式设备的固件升级方法用于从外部设备获取升级文件进行固件升级,升级文件包括前级装载程序和后级装载程序。该方法包括:步骤S200,从外部设备获取前级装载程序,并将至少部分前级装载程序存储在可擦写非易失性存储器中;步骤S400,将前级装载程序加载至RAM;步骤S600,在RAM中运行前级装载程序,以从外部设备获取后级装载程序,并将后级装载程序加载至RAM中;步骤S800,在RAM中运行后级装载程序,以更新嵌入式设备的固件。本发明实施例减少了对嵌入式设备的Flash存储空间的占用。

Description

嵌入式设备的固件升级方法、装置、芯片和计算设备
技术领域
本发明涉及嵌入式技术领域,具体涉及一种嵌入式设备的固件升级方法、装置、芯片和计算设备。
背景技术
嵌入式系统是以应用为中心,以现代计算机技术为基础,能够根据用户需求(功能、可靠性、成本、体积、功耗、环境等)灵活裁剪软硬件模块的专用计算机系统。由于嵌入式系统具有便利灵活、性价比高、嵌入性强等特点,其在各个领域得到了广泛应用,例如目前快速发展的物联网领域和可穿戴式智能设备领域。嵌入式系统通常也被称为嵌入式设备,通常将嵌入式设备中的软件称为固件,固件根据其功能划分为引导程序、应用程序和程序资源。固件通常存储于嵌入式设备的可擦写非易失性存储器,例如芯片内部的Flash。
嵌入式设备的厂商通常会陆续推出新固件以修复软件中的Bug或者提供新的软件功能。相应地,嵌入式设备的用户可以通过下载厂商提供的新固件以进行设备固件升级。固件升级即是指将写入嵌入式设备的Flash中的引导程序、应用程序和程序资源升级至新版本。
目前,嵌入式设备在进行固件升级时,通常通过引导程序从上位机将升级程序下载到嵌入式设备的本地Flash,再从本地Flash中将升级程序加载到RAM中运行,由升级程序将上位机的升级文件下载到本地Flash中以完成固件升级。这种将升级程序下载到本地Flash的升级方式造成对Flash存储空间的占用,特别是在嵌入式设备固件的程序较多时,每个程序都有其对应的升级程序,将所有程序的升级程序均下载到本地Flash中将占用大量的Flash存储空间。
因此,如何减小固件升级时对嵌入式设备的可擦写非易失性存储器存储空间的占用成为亟待解决的技术问题。
发明内容
基于上述现状,本发明的主要目的在于提供一种嵌入式设备的固件升级方法、装置、芯片和计算设备,减少了固件升级时对嵌入式设备的可擦写非易失性存储器存储空间的占用。
为实现上述目的,本发明采用的技术方案如下:
一种嵌入式设备的固件升级方法,用于从外部设备获取升级文件进行固件升级,所述升级文件包括前级装载程序和后级装载程序;所述方法包括:步骤S200,从所述外部设备获取所述前级装载程序,并将至少部分前级装载程序存储在可擦写非易失性存储器中;步骤S400,将所述前级装载程序加载至RAM;步骤S600,在所述RAM中运行所述前级装载程序,以从所述外部设备获取所述后级装载程序,并将所述后级装载程序加载至所述RAM中;步骤S800,在所述RAM中运行所述后级装载程序,以更新所述嵌入式设备的固件。
优选地,所述前级装载程序包括第一装载程序和第二装载程序;所述步骤S200包括:步骤S210,从所述外部设备获取所述第一装载程序,并将所述第一装载程序存储在所述可擦写非易失性存储器中;步骤S220,运行所述第一装载程序,以从所述外部设备获取所述第二装载程序;所述步骤S400包括:将所述第二装载程序加载至所述RAM;所述步骤S600包括:在所述RAM中运行所述第二装载程序,以从所述外部设备获取所述后级装载程序,并将所述后级装载程序加载至所述RAM中。
优选地,所述第一装载程序由通信接口代码和第一加载代码组成,其中,所述通信接口代码用于实现所述嵌入式设备和所述外部设备的通信接口,所述第一加载代码用于通过所述通信接口从所述外部设备获取所述第二装载程序。
优选地,所述步骤S200包括:从所述外部设备获取所述前级装载程序,并将全部的所述前级装载程序存储在所述可擦写非易失性存储器中。
优选地,所述步骤S200之后,所述方法还包括:在所述RAM中设置标志位,其中,所述标志位在掉电时会被删除;所述步骤S600包括:步骤S610,运行引导程序,以判断所述RAM中是否存在标志位;步骤S620,若所述引导程序判断所述RAM中存在标志位,在所述RAM中运行所述前级装载程序,以从所述外部设备获取所述后级装载程序,并将所述后级装载程序加载至所述RAM中,删除所述标志位;步骤S630,若所述引导程序判断所述RAM中不存在标志位,引导所述嵌入式设备正常启动。
优选地,所述嵌入式设备的固件包括引导程序、应用程序、程序资源中的一个或多个,所述后级装载程序包括按顺序排列的N个子装载程序,其中N为正整数,N≥1,每个子装载程序分别用于更新所述嵌入式设备中与其对应的固件;所述步骤S600包括:在所述RAM中运行所述前级装载程序,以从所述外部设备获取第i个子装载程序,并将所述第i个子装载程序加载至所述RAM中,其中i为正整数,1≤i≤N,i的初始值为1;所述步骤S800包括:在所述RAM中运行所述第i个子装载程序,以从所述外部设备的所述升级文件中获取与所述第i个子装载程序对应的第i个固件的升级数据从而更新该固件;所述步骤S800之后,所述方法还包括步骤S1000:对i自加1并转至步骤S600,直至i=N。
优选地,所述可擦写非易失性存储器的记录区域记录有当前升级进度,所述步骤S600包括:在所述RAM中运行所述前级装载程序,以根据所述记录区域记录的当前升级进度从所述外部设备获取相应的第i个子装载程序,并将该第i个子装载程序加载至所述RAM中,其中,相应的第i个子装载程序为所述当前升级进度下所需执行的下一操作步骤用于升级的第i个固件所对应的子装载程序;所述步骤S800包括:步骤S810,在所述RAM中运行所述第i个子装载程序,根据所述记录区域记录的当前升级进度,若当前升级进度为第i个固件擦除成功,则执行步骤S830;若当前升级进度为第i个固件写入成功,则执行步骤S840;若当前升级进度为无升级状态,则执行所述步骤S820;若当前升级进度为第i个固件升级成功,则执行步骤S1000;步骤S820,擦除所述可擦写非易失性存储器中存储的与所述第i个子装载程序对应的第i个固件,并在所述可擦写非易失性存储器的记录区域记录当前升级进度为第i个固件擦除成功;步骤S830,从所述外部设备的所述升级文件中获取该固件的升级数据,将该固件的升级数据存储至所述可擦写非易失性存储器,并在所述记录区域记录当前升级进度为第i个固件写入成功;步骤S840,若校验该固件升级成功,在所述记录区域记录当前升级进度为第i个固件升级成功;若校验该固件升级失败,在所述记录区域记录当前升级进度为该固件擦除成功的前一升级进度,所述前一升级进度为第(i-1)个固件升级成功或无升级状态。
优选地,所述后级装载程序还包括N个校验程序,校验程序与子装载程序一一对应,每个校验程序在所述后级装载程序中的排列顺序位于与该校验程序对应的子装载程序之后;所述步骤S800之后所述步骤S1000之前,所述方法还包括:步骤S910,在所述RAM中运行所述前级装载程序,以根据所述后级装载程序中程序的排列顺序,从所述外部设备获取与所述第i个子装载程序对应的第i个校验程序,并将所述第i个校验程序加载至所述RAM中;步骤S920,在所述RAM中运行该校验程序,以校验与所述第i个子装载程序对应的第i个固件的升级是否成功,若成功则执行所述步骤S1000,否则重复执行上一次执行的所述步骤S600。
优选地,所述步骤S600中获取的当前子装载程序用于更新所述嵌入式设备中的引导程序;所述步骤S600之后,所述方法还包括:步骤S700,将所述可擦写非易失性存储器中第一地址存储的引导程序备份至所述可擦写非易失性存储器中的第二地址。
优选地,所述嵌入式设备的固件包括引导程序以及应用程序和程序资源中的至少一个,所述后级装载程序包括按顺序排列的N个子装载程序,其中N为正整数,N≥1,每个子装载程序分别用于更新所述嵌入式设备中与其对应的固件;所述步骤S600包括:在所述RAM中运行所述前级装载程序,所述前级装载程序用于:从所述外部设备获取第1个子装载程序,所述第1个子装载程序为引导程序装载程序,并将所述引导程序装载程序加载至所述RAM中,所述引导程序装载程序用于:将所述可擦写非易失性存储器中第一地址存储的引导程序备份至所述可擦写非易失性存储器中的第二地址,并擦除所述第一地址存储的引导程序;从所述外部设备的所述升级文件中获取引导程序,将获取的引导程序写入所述可擦写非易失性存储器;从所述外部设备中根据所述后级装载程序的排列顺序依次获取剩余的子装载程序,所述剩余的子装载程序为应用程序装载程序和/或程序资源装载程序,并将获取的子装载程序加载至所述RAM中,所述子装载程序用于从所述外部设备的所述升级文件中获取与该子装载程序对应的固件的升级数据,将获取的升级数据写入所述可擦写非易失性存储器。
优选地,所述可擦写非易失性存储器的记录区域用于记录升级进度;所述引导程序装载程序在将所述可擦写非易失性存储器中第一地址存储的引导程序备份至所述可擦写非易失性存储器中的第二地址之前,还用于:在所述记录区域无记录信息时,判断所述外部设备的所述升级文件中引导程序的头部CRC码与所述嵌入式设备的引导程序的头部CRC码是否一致;若所述外部设备的所述升级文件中引导程序的头部CRC码与所述嵌入式设备的引导程序的头部CRC码不一致,执行将所述可擦写非易失性存储器中第一地址存储的引导程序备份至所述可擦写非易失性存储器中的第二地址的步骤。
优选地,所述第二地址为所述可擦写非易失性存储器中n*m字节地址,n为整数,n≥0,m为正整数;所述方法还包括:步骤S101,上电后读取所述可擦写非易失性存储器中j*m字节地址存储的数据,判断读取的数据是否符合所述可擦写非易失性存储器的头部结构,其中,其中j为正整数,1≤j≤n,j的初始值为1;若读取的数据符合所述可擦写非易失性存储器的头部结构,执行步骤S102,否则,执行步骤S103;步骤S102,偏移所述可擦写非易失性存储器的头部长度读取存储于所述可擦写非易失性存储器的头部之后的引导程序,将该引导程序从所述可擦写非易失性存储器加载至所述RAM中运行;步骤S103,对j自加1并转至步骤S101,直至j=n。
优选地,所述外部设备的所述升级文件中包括按顺序排列的N个固件,每个固件的头部包括头部CRC码、数据CRC码、固件存储地址、固件运行地址和固件长度;所述从所述外部设备的所述升级文件中获取与所述第i个子装载程序对应的第i个固件的升级数据从而更新该固件,包括:计算所述第i个固件的头部的偏移值,所述第i个固件的头部的偏移值等于所述升级文件中该固件之前的所有固件的固件长度之和;通过所述第i个固件的头部CRC码确定所述第i个固件的头部的完整性;若所述第i个固件的头部完整,从升级文件中的与所述第i个固件的固件存储地址对应的地址,读取长度为所述第i个固件的固件长度的数据,将其写入至所述可擦写非易失性存储器中的与所述第i个固件的固件运行地址对应的地址;计算写入所述可擦写非易失性存储器中的与所述第i个固件的固件运行地址对应的地址的固件的CRC码,将该固件的CRC码与所述升级文件中所述第i个固件的头部中的数据CRC码是否一致以校验固件读取是否正确。
本发明实施例中的升级文件包括前级装载程序和后级装载程序,在升级流程中无需事先下载完整的升级程序,而是分阶段下载升级程序,具体地,先下载前级装载程序并存储于可擦写非易失性存储器,之后通过前级装载程序下载后级装载程序,后级装载程序未写入可擦写非易失性存储器,而是被直接加载至RAM中运行,以对嵌入式设备的固件进行升级。因此,在升级流程中可以减少对嵌入式设备的可擦写非易失性存储器的存储空间的占用,并进一步使得其可擦写非易失性存储器可以装载更大或者更多的应用程序,提高了嵌入式设备中应用程序的丰富度。
此外,通过将获取的后级装载程序直接加载至RAM,缩短了升级流程中将包括后级装载程序的整个升级程序从Flash转移至RAM的时间,提高了升级效率。
本发明实施例还提供了一种嵌入式设备的固件升级装置,用于从外部设备获取升级文件进行固件升级,所述升级文件包括前级装载程序和后级装载程序;所述装置包括:获取模块,用于从所述外部设备获取所述前级装载程序,并将至少部分前级装载程序存储在可擦写非易失性存储器中;加载模块,用于将所述前级装载程序加载至RAM;第一运行模块,用于在所述RAM中运行所述前级装载程序,以从所述外部设备获取所述后级装载程序,并将所述后级装载程序加载至所述RAM中;第二运行模块,用于在所述RAM中运行所述后级装载程序,以更新所述嵌入式设备的固件。
本发明实施例还提供了一种芯片,适用于嵌入式设备,所述芯片内存储有指令集,所述指令集被执行时,能够指示嵌入式设备实现如上实施例所述的嵌入式设备的固件升级方法。
本发明实施例还提供了一种嵌入式设备,包括:处理器和存储器,所述存储器用于存储可执行指令,所述可执行指令使所述处理器执行如上实施例所述的嵌入式设备的固件升级方法。
本发明实施例还提供了一种计算机可读存储介质,所述计算机可读存储介质上存储有可执行指令,所述可执行指令被执行时实现如上实施例所述的嵌入式设备的固件升级方法的操作。
本发明的其他有益效果,将在具体实施方式中通过具体技术特征和技术方案的介绍来阐述,本领域技术人员通过这些技术特征和技术方案的介绍,应能理解所述技术特征和技术方案带来的有益技术效果。
附图说明
以下将参照附图对本发明的嵌入式设备的固件升级方法、装置、芯片和计算设备的优选实施方式进行描述。图中:
图1为本发明实施例的几种应用场景示意图,其中,图1中(a)为升级文件存储于服务器的应用场景示意图,图1中(b)为升级文件存储于服务器的另一种应用场景示意图,图1中(c)为升级文件存储于主嵌入式设备的应用场景示意图,图1中(d)为升级文件存储于移动存储设备的应用场景示意图;
图2为根据本发明的一种优选实施方式的嵌入式设备的固件升级方法的流程示意图;
图3为根据本发明的一种优选实施方式的嵌入式设备的固件升级方法的流程示意图;
图4为根据本发明的一种优选实施方式的嵌入式设备的固件升级方法的流程示意图;
图5为根据本发明的一种优选实施方式的嵌入式设备的固件升级方法的流程示意图;
图6为根据本发明的一种优选实施方式的嵌入式设备的固件升级方法的流程示意图;
图7为根据本发明的一种优选实施方式的嵌入式设备的固件升级方法的流程示意图;
图8为根据本发明的一种优选实施方式的嵌入式设备的固件升级方法的流程示意图;
图9为根据本发明的一种优选实施方式的嵌入式设备的固件升级方法的流程示意图;
图10为一具体实例中嵌入式设备中Flash和RAM的存储区域结构、外部设备中升级文件的结构以及固件升级流程示意图;
图11为图10中n个子装载程序的结构示意图;
图12为图10中一个子装载程序具体实例的结构示意图;
图13为图10中升级文件中的新固件的头部的结构示意图;
图14为根据本发明的一种优选实施方式的嵌入式设备的固件升级装置的结构示意图;以及
图15为根据本发明的一种优选实施方式的嵌入式设备的结构示意图。
具体实施方式
以下基于实施例对本发明进行描述,但是本发明并不仅仅限于这些实施例。在下文对本发明的细节描述中,详尽描述了一些特定的细节部分,为了避免混淆本发明的实质,公知的方法、过程、流程、元件并没有详细叙述。
此外,本领域普通技术人员应当理解,在此提供的附图都是为了说明的目的,并且附图不一定是按比例绘制的。
除非上下文明确要求,否则整个说明书和权利要求书中的“包括”、“包含”等类似词语应当解释为包含的含义而不是排他或穷举的含义;也就是说,是“包括但不限于”的含义。
在本发明的描述中,需要理解的是,术语“第一”、“第二”等仅用于描述目的,而不能理解为指示或暗示相对重要性。此外,在本发明的描述中,除非另有说明,“多个”的含义是两个或两个以上。
为便于理解,首先对本发明实施例所涉及的相关技术术语进行解释和说明。
嵌入式设备:也即嵌入式系统,是以应用为中心,以现代计算机技术为基础,能够根据用户需求(功能、可靠性、成本、体积、功耗、环境等)灵活裁剪软硬件模块的专用计算机系统。嵌入式系统主要由嵌入式处理器、相关支撑硬件和嵌入式软件系统组成。嵌入式处理器主要由单片机或微控制单元(Microcontroller Unit,MCU)组成。相关支撑硬件包括显卡、存储介质、通讯设备、各类卡读取设备等。关于存储介质,嵌入式系统有别于通常的计算机处理系统,通常不具备硬盘等大容量存储介质,大多使用闪存(Flash Memory)、只读存储器(Read Only Memory,ROM)和随机存取存储器(Random Access Memory,RAM)等作为存储介质。嵌入式软件包括与硬件相关的底层软件、操作系统、图形界面、通讯协议、数据库系统、标准化浏览器和应用软件等。
固件:嵌入式设备中的软件,根据其功能划分为引导程序(uboot)、应用程序和程序资源。
引导程序:例如uboot,是嵌入式设备上电后运行最早的程序,主要用于初始化底层硬件,并负责引导操作系统和应用程序的启动运行。
应用程序:也称为App Code,包括操作系统和其他设备程序,由uboot引导运行,可以实现各种功能,部分应用程序可以和用户进行交互,具有可视的用户界面。
程序资源:也称为Resource,为运行应用程序时所需的配置信息等资源。
下文的部分描述中将上述引导程序、应用程序和程序资源统称为程序。
BootLoader:指启动加载程序,可用于嵌入式设备的固件升级,通过启动升级模式进行固件升级。
空中下载技术(Over-the-Air Technology,OTA)升级:通过网络从云服务器远程下载新的程序包,对嵌入式设备的固件进行更新或升级,也即在线升级嵌入式设备的固件。
ROM:只读存储器,以非破坏性读出方式工作,只能读出无法随意写入信息。信息一旦写入后就固定下来,即使切掉电源,信息也不会丢失,因此也称为固定存储器。ROM所存数据通常是装入设备前写入的,设备工作过程中只能读出。由于ROM所存数据稳定,掉电后所存数据也不会改变,并且结构较简单,使用方便,因而常用于存储各种固定程序和数据。ROM包括可编程只读存储器(Programmable read-only memory,PROM)、可擦写可编程只读存储器(Erasable Programmable Read-Only Memory EPROM)和带电可擦写可编程只读存储器(Electrically Erasable Programmable read only memory,EEPROM)等不同的种类。
RAM:随机存取存储器,也称为主存,是与CPU直接交换数据的内部存储器。可以随时读写(刷新时除外),而且速度很快,通常作为操作系统或其他正在运行中的程序的临时数据存储介质。RAM工作时可以随时从任何一个指定的地址写入(存入)或读出(取出)信息。RAM与ROM的最大区别是数据的易失性,即RAM一旦掉电所存储的数据将随之丢失。RAM在计算机和数字系统中用来暂时存储程序、数据和中间结果。RAM包括静态随机存取存储器(Static Random-Access Memory,SRAM)、动态随机存取存储器(Dynamic Random AccessMemory,DRAM)、同步动态随机存取内存(synchronous dynamic random-access memory,简称SDRAM)、双倍速率SDRAM(Double Data Rate SDRAM,DDR SDRAM)、第二代双倍速率SDRAM(Double Data Rate 2SDRAM,DDR2 SDRAM)和第三代双倍速率SDRAM(Double Data Rate3SDRAM,DDR3 SDRAM)等。
Flash Memory(下文简称为Flash):快闪存储器,也称为闪存,结合了ROM和RAM的长处,是一种非易失性存储器,即使掉电数据也不会丢失,且具备电子可擦除可编程的性能,允许在操作中被多次擦或写,同时可以快速读取数据。Flash主要用于通常性数据存储,以及在计算机与其他数字产品间交换传输数据。Flash分为NOR Flash和Nand Flash。其中,NOR Flash的特点是芯片内执行(eXecute In Place,XIP),应用程序可以直接在NOR Flash内运行,不必再把代码读到系统RAM中,其传输效率高,但写入和擦除速度较低。Nand Flash内部采用非线性宏单元模式,具有容量较大、改写速度快等优点,适用于大量数据的存储。
目前,嵌入式设备在进行固件升级时,其中一种方式是在uboot中整合BootLoader,也即将BootLoader固化于uboot中,在通过OTA进行升级的过程中跳转至uboot中的BootLoader以执行升级流程。该方式由于uboot内整合了BootLoader,造成对本地(也即嵌入式设备自身)Flash存储空间的占用,特别是在嵌入式设备的固件程序较多时,每个程序都有其对应的BootLoader,将占用大量的Flash存储空间。当uboot存在缺陷时,只能通过刷机的方式强制升级,而无法通过OTA方式解决。
另一种方式是通过uboot从上位机(例如移动终端或者服务器)将BootLoader下载到本地Flash,再从本地Flash中将BootLoader加载到Ram中运行,由BootLoader将上位机的升级文件下载到本地Flash中以完成固件升级。这种将BootLoader下载到本地Flash的升级方式造成对Flash存储空间的占用,特别是在嵌入式设备的固件程序较多时,每个程序都有其对应的BootLoader,将所有程序的BootLoader均下载到本地Flash中将占用大量的Flash存储空间。
发明人发现,上述两种升级方式存在共同的问题,即本地Flash中均需要存储BootLoader,导致对本地Flash的占用,特别是在本地Flash需要存储多个BootLoader时将占用大量的Flash存储空间。
鉴于此,本发明实施例提供了一种嵌入式设备的固件升级方法、装置、芯片和计算设备,以减少固件升级对本地Flash存储空间的占用。
图1为本发明实施例的几种应用场景示意图。请参阅图1中(a),服务器存储有嵌入式设备的升级文件,用户通过操作移动终端以对嵌入式设备的固件进行升级,升级流程中嵌入式设备通过网络从服务器获取升级文件以完成升级。当然,也可以先将升级文件下载至移动终端,嵌入式设备直接从移动终端下载升级文件以进行升级。
请参阅图1中(b),服务器存储有嵌入式设备的升级文件,嵌入式设备具有人机交互装置(也可以通过接口外接人机交互装置),用户通过操作嵌入式设备以对嵌入式设备的固件进行升级,升级流程中嵌入式设备通过网络从服务器获取升级文件以完成升级。
请参阅图1中(c),主嵌入式设备存储有从嵌入式设备的升级文件(例如通过通信接口连接有存储升级文件的数据卡),用户通过操作主嵌入式设备(也可以操作移动终端或者从嵌入式设备)以对从嵌入式设备的固件进行升级,升级流程中从嵌入式设备通过网络从主嵌入式设备获取升级文件以完成升级。
请参阅图1中(d),移动存储设备存储有嵌入式设备的升级文件,嵌入式设备具有人机交互装置(也可以通过接口外接人机交互装置),将移动存储设备与嵌入式设备通过通信接口连接,用户通过操作嵌入式设备以对嵌入式设备的固件进行升级,升级流程中嵌入式设备通过通信接口从移动存储设备获取升级文件以完成升级。
其中,嵌入式设备可以是智能音箱、扫地机器人、智能饮水机等设备,服务器可以是提供嵌入式设备的厂商的云服务器,移动终端可以是使用该嵌入式设备的用户的手机、平板电脑等,移动存储设备可以是U盘等便携设备。
图2为根据本发明的一种优选实施方式的嵌入式设备的固件升级方法的流程示意图。本发明实施例提供了一种嵌入式设备的固件升级方法,用于从外部设备获取升级文件进行固件升级。外部设备可以为前文的服务器、移动终端、主或移动存储设备。升级文件包括前级装载程序和后级装载程序,前级装载程序主要用于从外部设备获取后级装载程序,并引导跳转至后级装载程序,后级装载程序主要用于从外部设备获取固件的升级数据从而更新固件。
请参阅图2,该方法包括如下步骤:
步骤S200,从外部设备获取前级装载程序,并将至少部分前级装载程序存储在可擦写非易失性存储器中。
本发明实施例利用待升级的嵌入式设备的可擦写非易失性存储器的可擦写性能将至少部分前级装载程序写入该存储器。同时由于该存储器的非易失特性,掉电也不会丢失数据,可以在意外掉电或系统重启时保留存储于其中的前级装载程序,从而能够使存储的前级装载程序正常加载和运行,以完成后续的升级流程。可擦写非易失性存储器可以为嵌入式设备的Flash、EPROM或者EEPROM等,下文以Flash为例进行说明。
从外部设备获取前级装载程序时,可以获取全部的前级装载程序并将全部的前级装载程序存储于Flash;也可以仅获取前级装载程序的一部分,并将获取的部分前级装载程序存储于Flash,以进一步降低对Flash存储空间的占用,后文将对这两种方式进行详细说明。
步骤S400,将前级装载程序加载至RAM。
RAM是指嵌入式设备中的内存,用于暂时存放当前正在使用的(即执行中)的数据和程序,掉电后其中的程序和数据将丢失。若步骤S200获取的是全部的前级装载程序,则本步骤将从外部设备获取的全部的前级装载程序加载至RAM以使该程序在RAM中运行。若步骤S200获取的是前级装载程序的一部分,则本步骤需要在Flash中运行获取的部分前级装载程序,以进一步获取前级装载程序的剩余部分并加载至RAM以使该剩余部分在RAM中运行。
通常需要在嵌入式设备复位重启后运行uboot,由uboot引导前级装载程序的运行。uboot可存储于嵌入式设备的主控芯片的内部Flash中,主控芯片的内部Flash通常为NOR Flash,可以直接运行存储于其中的程序,因此uboot可直接在主控芯片的内部Flash中运行。
步骤S600,在RAM中运行前级装载程序,以从外部设备获取后级装载程序,并将后级装载程序加载至RAM中。
前级装载程序通过现有的下载方式(例如OTA下载或者通信接口传输等方式)下载后级装载程序,后级装载程序未存储于Flash,而是直接被加载至RAM中运行。
步骤S800,在RAM中运行后级装载程序,以更新嵌入式设备的固件。
在RAM中运行后级装载程序,后级装载程序通过现有的下载方式从外部设备获取固件的升级数据从而更新固件。
本发明实施例中的升级文件包括前级装载程序和后级装载程序,在升级流程中无需事先下载完整的升级程序,而是分阶段下载升级程序,具体地,先下载前级装载程序并存储于可擦写非易失性存储器,之后通过前级装载程序下载后级装载程序,后级装载程序未写入可擦写非易失性存储器,而是被直接加载至RAM中运行,以对嵌入式设备的固件进行升级。因此,在升级流程中可以减少对嵌入式设备的可擦写非易失性存储器的存储空间的占用,并进一步使得其可擦写非易失性存储器可以装载更大或者更多的应用程序,提高了嵌入式设备中应用程序的丰富度。
此外,通过将获取的后级装载程序直接加载至RAM,缩短了升级流程中将包括后级装载程序的整个升级程序从Flash转移至RAM的时间,提高了升级效率。
如前所述,步骤S200可以获取全部的前级装载程序,也可以仅获取部分前级装载程序。下面分别对这两种实现方式进行详细说明。
第一种实施方式(步骤S200获取全部的前级装载程序):
图3为根据本发明的一种优选实施方式的嵌入式设备的固件升级方法的流程示意图。请参阅图3,该方法包括如下步骤:
步骤S200a:从外部设备获取前级装载程序,并将全部的前级装载程序存储在可擦写非易失性存储器中。
步骤S400,将前级装载程序加载至RAM。
由于前级装载程序被加载至RAM运行,而无需在可擦写非易失性存储器中运行,因此,可擦写非易失性存储器为Flash时,可以是嵌入式设备的主控芯片的内部Flash,也可以是主控芯片之外的外部Flash存储器(通常为Nand Flash,存储于其中的程序需要被加载至RAM运行)。
步骤S600,在RAM中运行前级装载程序,以从外部设备获取后级装载程序,并将后级装载程序加载至RAM中。
步骤S800,在RAM中运行后级装载程序,以更新嵌入式设备的固件。
该方式在升级流程中无需将升级文件中的后级装载程序写入Flash,可以减少对嵌入式设备的Flash存储空间的占用。
第二种实施方式(步骤S200仅获取部分前级装载程序):
图4为根据本发明的一种优选实施方式的嵌入式设备的固件升级方法的流程示意图。在该实施方式中,前级装载程序包括第一装载程序和第二装载程序。第一装载程序由通信接口代码和第一加载代码组成,其中,通信接口代码用于实现嵌入式设备和外部设备的通信接口,第一加载代码用于通过通信接口从外部设备获取第二装载程序。第二装载程序包括第二加载代码,用于通过第一装载程序提供的通信接口从外部设备获取后级装载程序,并将后级装载程序加载至RAM中。通过上述方式,第一装载程序仅保留数据通信接口和加载第二装载程序的功能,升级流程中其余的功能由第二装载程序和后级装载程序实现。
请参阅图4,该方法包括如下步骤:
步骤S210,从外部设备获取第一装载程序,并将第一装载程序存储在可擦写非易失性存储器中。
步骤S220,运行第一装载程序,以从外部设备获取第二装载程序。
本实施方式中,Flash可以为嵌入式设备的主控芯片的内部Flash,主控芯片的程序存储区在片内NOR Flash,NOR Flash能直接像内存RAM一样寻址,因此能直接从芯片内部Flash运行程序,例如步骤S220直接从Flash运行存储于其中的第一装载程序。当然,步骤S220也可以将存储于主控芯片的内部Flash的第一装载程序加载至RAM运行。此外,Flash也可以是Nand Flash,步骤S220需要将存储于Nand Flash的第一装载程序加载至RAM运行。
步骤S400a:将第二装载程序加载至RAM。
获取的第二装载程序并未存储于Flash中,而是直接加载至RAM,从而进一步减小对Flash空间的占用。
步骤S600a:在RAM中运行第二装载程序,以从外部设备获取后级装载程序,并将后级装载程序加载至RAM中。
后级装载程序也未存储于Flash中,而是直接加载至RAM。
步骤S800,在RAM中运行后级装载程序,以更新嵌入式设备的固件。
该方式将前级装载程序分为第一装载程序和第二装载程序,仅从外部设备将第一装载程序下载到Flash存储,由第一装载程序直接从升级文件中将第二装载程序加载至RAM运行,由第二装载程序从升级文件中将后级装载程序加载至RAM运行以进行升级,相比将整个前级装载程序下载至Flash的实施方式,进一步减小了对Flash存储空间的占用。
嵌入式设备开机启动后,首先加载uboot运行,由uboot进行硬件初始化/获取内存大小信息等,调整嵌入式设备至适配状态,之后再将操作系统映像或固化的嵌入式应用程序加载至内存中运行。若uboot每次上电后均直接引导操作系统或者应用程序运行,不提供固件升级的通道,则无法进行固件升级。本发明实施例通过在需要升级时设置标志位,使uboot能够引导升级程序运行。图5为根据本发明的一种优选实施方式的嵌入式设备的固件升级方法的流程示意图。请参阅图5,该方法包括如下步骤:
步骤S200,从外部设备获取前级装载程序,并将至少部分前级装载程序存储在可擦写非易失性存储器中。
步骤S300,在RAM中设置标志位,其中,标志位在掉电时会被删除。
将至少部分前级装载程序存储于Flash后将设置标志位,标志位用于在后续uboot运行后基于该标志位的存在而选择引导升级程序运行。也即,uboot根据标志位的有无,确定是进行固件升级还是正常启动系统。由于标志位设置于RAM中,掉电时会被删除,可以保证掉电后重新上电时能够正常启动系统,而不会每次重启都重复进入升级流程。若标志位设置于其他非易失性存储器中,掉电后也将继续存在,将导致每次掉电后重新上电时重复进入升级流程。
可以直接在RAM中定义一个标志位,例如gd->flags|=GD_FLG_RELOC。
步骤S400,将前级装载程序加载至RAM。
步骤S610,运行引导程序,以判断RAM中是否存在标志位。
步骤S620,若引导程序判断RAM中存在标志位,在RAM中运行前级装载程序,以从外部设备获取后级装载程序,并将后级装载程序加载至RAM中,删除标志位。
获取并加载后级装载程序后,需要删除标志位,否则将导致此次升级完成后系统重启时,由于标志位的存在uboot将继续引导升级程序运行,进行重复升级,而无法正常启动系统。
步骤S630,若引导程序判断RAM中不存在标志位,引导嵌入式设备正常启动。
不存在标志位时,uboot将引导嵌入式设备的操作系统或者应用程序运行,也即使嵌入式设备能够正常启动。
步骤S800,在RAM中运行后级装载程序,以更新嵌入式设备的固件。
上述实施例通过设置标志位,使升级流程中uboot能够基于标志位的存在引导升级程序运行;此外,掉电时标志位被删除,以及将后级装载程序加载至RAM后也会删除标志位,从而使掉电后重新上电时以及此次升级完成后系统重启时能够正常启动系统。
嵌入式设备的固件通常包括引导程序、应用程序和程序资源。若嵌入式设备的固件包括引导程序、应用程序、程序资源中的一个或多个时,可以在后级装载程序中对应设置1个或多个子装载程序以分别对每个程序进行升级。
在这样的一些实施例中,后级装载程序包括按顺序排列的N个子装载程序,其中N为正整数,N≥1,每个子装载程序分别用于更新嵌入式设备中与其对应的固件。图6为根据本发明的一种优选实施方式的嵌入式设备的固件升级方法的流程示意图,请参阅图6,该方法包括如下步骤:
步骤S200,从外部设备获取前级装载程序,并将至少部分前级装载程序存储在可擦写非易失性存储器中。
步骤S400,将前级装载程序加载至RAM。
步骤S640,在RAM中运行前级装载程序,以从外部设备获取第i个子装载程序,并将第i个子装载程序加载至RAM中,其中i为正整数,1≤i≤N,i的初始值为1。
步骤S800a,在RAM中运行第i个子装载程序,以从外部设备获取与第i个子装载程序对应的第i个固件的升级数据从而更新该固件。
步骤S1000:对i自加1并转至步骤S640,直至i=N。
例如,首先从外部设备获取第1个子装载程序并加载至RAM中运行,以获取第1个子装载程序对应的第1个固件的升级数据;然后获取第2个子装载获取程序……以此类推,直至i=N,完成最后一个固件的更新。
通过上述方式,可以按顺序依次对每个固件进行升级,在需要更新的固件有多个时,可以依次完成对所有固件的升级。将后级装载程序拆分成多个子装载程序,方便进行升级程序的修改或扩展:若某个固件的装载程序内容需要修改,仅需对该固件的子装载程序进行修改,无需修改其他固件的子装载程序;若有新的固件需要升级,可通过增加该固件的子装载程序实现扩展。
子装载程序还可以用于对嵌入式设备的除主控芯片的内部Flash以外的外部Flash进行数据更新,例如通过添加用于外部Flash数据更新的子装载程序,并在升级文件中对应的位置添加对外部Flash进行数据更新的新数据。也可以按照类似方式对嵌入式设备的MCU进行数据更新。
在嵌入式设备的固件包括引导程序、应用程序、程序资源中的多个时,升级文件包中通常会包括该嵌入式设备中的所有固件,但可能仅部分固件需要升级,也即升级文件中的部分固件的版本高于嵌入式设备中的固件版本(该部分固件需要升级),其余部分固件的版本与嵌入式设备中的固件版本相同(该部分固件无需升级)。在升级流程中,可以通过固件的版本号判断某个固件是否需要升级,例如在嵌入式设备中的某个固件的版本号低于升级文件中该固件的版本号时,才对该固件进行升级;也可以通过数据一致性判断某个固件否需要升级,例如在嵌入式设备中的某个固件的代码文件与升级文件中该固件的代码文件不一致时,才对该固件进行升级,数据一致性的判断可以通过循环冗余校验(CyclicRedundancy Check,CRC)实现,例如比较嵌入式设备中固件的头部CRC码与升级文件中该固件的头部CRC码是否一致。通过上述方式确定出需要升级的固件,进而调用该部分固件所对应的子装载程序,从而避免在固件无需升级时也对其执行升级流程,导致资源浪费和降低整体的升级效率。
若升级流程中发生掉电,将导致上电复位后重新执行升级流程,导致已经获取过的文件被重新获取,已经执行过的程序被重新执行,从而降低升级效率。本发明一些实施例通过在可擦写非易失性存储器的记录区域记录当前升级进度,使得上电后能够在当前升级进度处继续升级。图7为根据本发明的一种优选实施方式的嵌入式设备的固件升级方法的流程示意图,请参阅图7,该方法包括如下步骤:
步骤S200,从外部设备获取前级装载程序,并将至少部分前级装载程序存储在可擦写非易失性存储器中。
步骤S400,将前级装载程序加载至RAM。
步骤S650,在RAM中运行前级装载程序,以根据记录区域记录的当前升级进度从外部设备获取相应的第i个子装载程序,并将该第i个子装载程序加载至RAM中,其中,相应的第i个子装载程序为当前升级进度下所需执行的下一操作步骤用于升级的第i个固件所对应的子装载程序。
在运行前级装载程序时,根据当前升级进度获取下一操作步骤所需升级的固件的子装载程序。
步骤S810,在RAM中运行第i个子装载程序,根据记录区域记录的当前升级进度,若当前升级进度为第i个固件擦除成功,则执行步骤S830;若当前升级进度为第i个固件写入成功,则执行步骤S840;若当前升级进度为无升级状态,则执行步骤S820;若当前升级进度为第i个固件升级成功,则执行步骤S1000。
步骤S820,擦除可擦写非易失性存储器中存储的与第i个子装载程序对应的第i个固件,并在可擦写非易失性存储器的记录区域记录当前升级进度为第i个固件擦除成功。
步骤S830,从外部设备获取该固件的升级数据,将该固件的升级数据存储至可擦写非易失性存储器,并在记录区域记录当前升级进度为第i个固件写入成功。
步骤S840,若校验该固件升级成功,在记录区域记录当前升级进度为第i个固件升级成功;若校验该固件升级失败,在记录区域记录当前升级进度为该固件擦除成功的前一升级进度,前一升级进度为第(i-1)个固件升级成功或无升级状态。
在运行子装载程序时,步骤S810至步骤S840分别根据当前升级进度执行所需操作的升级内容。
步骤S1000,对i自加1并转至步骤S650,直至i=N。
未进行升级时以及在未擦除任何固件前,当前升级进度均为无升级状态。升级流程中,运行子装载程序后,先擦除该子装载程序对应的固件,也即擦除升级前的固件(对应的当前升级进度为第i个固件擦除成功),再将新固件写入Flash(对应的当前升级进度为第i个固件写入成功),然后校验固件升级是否成功(若成功则对应的当前升级进度为第i个固件升级成功)。升级流程中对引导程序、应用程序和程序资源的升级进度均进行记录。
关于步骤S650,若记录区域记录的当前升级进度为第i个固件擦除成功,则当前升级进度下所需执行的下一操作步骤用于升级第i个固件;若记录区域记录的当前升级进度为第i个固件写入成功,则当前升级进度下所需执行的下一操作步骤用于校验第i个固件(也即其下一操作步骤还是用于升级第i个固件);若记录区域记录的当前升级进度为无升级状态,则当前升级进度下所需执行的下一操作步骤用于升级第1个固件;若记录区域记录的当前升级进度为第i个固件升级成功,则当前升级进度下所需执行的下一操作步骤用于升级第(i+1)个固件。
关于步骤S840,将升级文件写入Flash后,还进一步校验升级是否成功。若校验结果为失败,说明升级文件的数据传输或存储过程出了问题,需要退出升级流程以进行后续干预检查,此时将当前升级进度记录为第(i-1)个固件升级成功或无升级状态。例如,校验第1个固件升级失败,则记录当前升级进度为无升级状态;若第2个固件升级失败,则记录当前升级进度为第1个固件升级成功……
通过上述方式,在Flash的记录区域记录当前升级进度,使得上电后能够在当前升级进度处继续升级,实现断点升级。同时由于记录区域记录有当前升级进度,可以根据该进度解析出当前加载的子应用程序,从而判断出现错误的阶段,有利于升级错误的排查。
关于升级成功与否的校验,可以由子装载程序进行校验,也可以由单独的校验程序进行校验。
由单独的校验程序执行升级校验时,后级装载程序中除包括N个子装载程序外,还包括N个校验程序,校验程序与子装载程序一一对应,每个校验程序在后级装载程序中的排列顺序位于与该校验程序对应的子装载程序之后。图8为根据本发明的一种优选实施方式的嵌入式设备的固件升级方法的流程示意图,请参阅图8,该方法包括如下步骤:
步骤S200,从外部设备获取前级装载程序,并将至少部分前级装载程序存储在可擦写非易失性存储器中。
步骤S400,将前级装载程序加载至RAM。
步骤S640,在RAM中运行前级装载程序,以从外部设备获取第i个子装载程序,并将第i个子装载程序加载至RAM中,其中i为正整数,1≤i≤N,i的初始值为1。
步骤S800a,在RAM中运行第i个子装载程序,以从外部设备获取与第i个子装载程序对应的第i个固件的升级数据从而更新该固件。
步骤S910,在RAM中运行前级装载程序,以根据后级装载程序中程序的排列顺序,从外部设备获取与第i个子装载程序对应的第i个校验程序,并将第i个校验程序加载至RAM中。
本步骤通过前级装载程序引导校验程序运行,以对固件升级成功与否进行校验。
步骤S920,在RAM中运行该校验程序,以校验与第i个子装载程序对应的第i个固件的升级是否成功,若成功则执行步骤S1000,否则重复执行上一次执行的步骤S640。
校验时,可通过比对Flash的固件区域的数据与升级文件中的固件数据的一致性以校验是否升级成功。例如,通过计算Flash的固件区域中待校验固件的数据的CRC码,与升级文件中该固件数据的头部信息中的数据CRC码进行比对,二者一致则说明比对成功,也即升级成功,进一步地可以在记录区域记录当前升级进度为该固件升级成功;否则说明升级失败,在记录区域记录当前升级进度为该固件擦除成功的前一升级进度,以重新执行该固件的升级流程。
步骤S1000,对i自加1并转至步骤S640,直至i=N。
通过上述方式,每对一个固件进行更新后,对该固件升级成功与否进行校验,确保固件升级成功后再执行下一固件的升级流程,若升级失败则继续进行该固件的升级,如此按照固件的升级顺序依次执行升级和校验,使得最终完成升级后每个固件均升级成功。为每个固件设置单独的校验程序,方便校验程序的修改或扩展:若某个固件的校验程序内容需要修改,仅需对该固件的校验程序进行修改,无需修改其他固件的校验程序;若有新的固件需要升级,可通过增加该固件的子装载程序和校验程序实现扩展。
如前所述,本发明实施例可以对所有固件类型的固件进行升级,包括引导程序、应用程序和程序资源。当需要升级的固件为引导程序时,本发明实施例还对升级前的引导程序进行备份。图9为根据本发明的一种优选实施方式的嵌入式设备的固件升级方法的流程示意图,请参阅图9,该方法包括如下步骤:
步骤S200,从外部设备获取前级装载程序,并将至少部分前级装载程序存储在可擦写非易失性存储器中。
步骤S400,将前级装载程序加载至RAM。
步骤S640,在RAM中运行前级装载程序,以从外部设备获取第i个子装载程序,并将第i个子装载程序加载至RAM中,其中i为正整数,1≤i≤N,i的初始值为1。
步骤S700,若步骤S640中获取的当前子装载程序用于更新嵌入式设备中的引导程序,则将可擦写非易失性存储器中第一地址存储的引导程序备份至可擦写非易失性存储器中的第二地址。
在后续步骤中将新的固件写入Flash时,会先将Flash中的原有固件进行擦除,以能够将新的固件写入Flash中存储原有固件的区域。针对uboot升级,若将原有的uboot擦除后,新的uboot成功写入前,出现意外掉电,系统中uboot缺失,将导致嵌入式设备无法正常开机运行;或者若新的uboot写入不成功,也将导致无法正常开机运行。因此,本发明实施例在对uboot升级时,擦除uboot前先进行uboot备份,防止升级流程中意外掉电或uboot写入失败导致无法正常开机运行,确保在该情形下重新上电后可以正常加载并运行备份的原有uboot。
步骤S810,在RAM中运行第i个子装载程序,以从外部设备获取与第i个子装载程序对应的第i个固件的升级数据从而更新该固件。
步骤S1000:对i自加1并转至步骤S600,直至i=N。
下面以一个具体实例详细说明本发明是如何实现的。
在本具体实例中,升级文件中包括装载程序和待升级固件。装载程序包括1个第一装载程序、1个第二装载程序和n个子装载程序。第一装载程序主要负责加载第二装载程序至RAM运行,仅具备与外部设备的通信接口以及解析和加载第二装载程序的代码,通信接口可供第二装载程序使用;第二装载程序负责控制整个升级流程,包括是否升级、断点升级(也即根据记录区域记录的当前升级进度从断点处继续升级)以及加载升级流程中子装载程序的代码,通常根据记录区域记录的当前升级进度加载对应的第n个子装载程序;n个子装载程序负责下载待升级固件和升级校验等。待升级固件包括uboot、应用程序和程序资源。Flash为嵌入式设备的主控芯片的内部Flash。
图10为一具体实例中嵌入式设备中Flash和RAM的存储区域结构、外部设备中升级文件的结构以及固件升级流程示意图。图11为图10中n个子装载程序的结构示意图,其中按顺序依次存储每个子装载程序的头部(head)和代码(code)。图12为图10中一个子装载程序具体实例的结构示意图,其中待升级固件包括uboot和第一应用程序;uboot的校验由uboot升级代码完成,uboot升级代码既引导写入新的uboot,也在新的uboot写入后进行校验(也可以在uboot升级代码之后的区域单独设置uboot校验程序对写入的新的uboot进行校验);第一应用程序的校验由单独设置的校验程序完成。
图10至图12中关键名词的解释如下:
Flash头部:用于标志Flash信息的数据段,是Flash中固化的ROM程序,uboot位于其之后的存储区域,可据特定的规则在Flash中寻找Flash头部信息,从而得知uboot的具体位置。
新的Flash头部:指升级后固件中的Flash头部。
原有的Flash头部:指升级前固件原有的Flash头部。
新的uboot:指升级后固件中的uboot。
原有的uboot:指升级前固件原有的uboot。
应用程序代码:包括应用程序的代码和程序资源的代码。
预留区域:Flash中用于可擦写数据存放的区域。
剩余空间:预留区域中写入数据后可用于可擦写数据存放的空间。
sp:RAM中的堆栈寄存器(stack pointer),用于存放要执行的数据,在跳转到子程序之前,先将子程序的返回地址存入sp,即进行入栈操作。
bss:RAM中的bss段(bss segment),是指用于存放程序中未初始化的全局变量的一块内存区域。请参阅图10至图12,升级流程如下:
1,加载第一装载程序:
首先判断固件是否需要升级,若是则从外部设备请求升级文件数据,加载第一装载程序到Flash的预留区域。加载第一装载程序完成之后,更新记录区域的信息,记录当前升级进度(例如加载第一装载程序成功),接着执行复位操作,由uboot引导第一装载程序运行。
判断固件是否需要升级,可通过CRC校验的方式,例如计算外部设备的升级文件中uboot代码和应用程序代码的头部数据的CRC码(根据多个头部数据的CRC码计算出一个CRC码),与当前嵌入式设备内部uboot代码和应用程序代码计算的头部CRC码比对,不一致说明存在新固件需要升级。
2,第一装载程序将第二装载程序加载至RAM运行:
第一装载程序从外部设备请求升级文件数据,解析得到第二装载程序在升级文件中的位置,加载第二装载程序到RAM中(也即第一装载程序直接从外部设备将第二装载程序加载到RAM运行)。
3,第二装载程序加载子装载程序:
第二装载程序根据记录区域记录的当前升级进度,从外部设备加载当前升级进度对应的子装载程序到RAM中指定位置运行。若记录区域无记录信息(也即当前升级进度为无升级状态),则判定为首次执行升级流程,执行步骤3.1,否则根据记录区域的信息加载对应的应用程序子装载程序或程序资源子装载程序,执行步骤3.2。
3.1,第二装载程序从外部设备获取uboot装载程序并加载至RAM中的运行地址,执行升级uboot的流程。首先判断记录区域的信息中是否记录了uboot升级的当前升级进度。若有当前升级进度,则根据当前升级进度执行相应流程。若无当前升级进度,则判断uboot是否发生变化(可通过比对本地Flash中uboot头部中的CRC码和外部设备的升级文件中uboot头部中的数据CRC码,不一致则认为uboot发生变化)。若uboot没有发生变化,则无需更新;若uboot发生变化,则需要先对uboot进行升级,执行步骤3.1.1。
3.1.1,将原有的Flash头部和原有的uboot备份至设定位置,更新记录区域,记录当前升级进度为uboot备份成功,然后擦除原有的Flash头部和原有的uboot,擦除完成之后更新记录区域,记录当前升级进度为uboot擦除成功。
3.1.2,从外部设备读取新的uboot进行升级,新的uboot写入Flash之后执行升级校验,校验无误后写入新的Flash头部并更新记录区域,记录当前升级进度为应用程序升级。
关于备份uboot的读取方式:备份uboot时备份地址为Flash中n*64K地址,n为正整数。芯片上电后首先读取芯片内Flash的0地址数据进行比对,判断是否符合Flash头部结构;若是,则偏移Flash头部的长度读取uboot,并判断uboot完整性;若uboot完整,则将uboot从Flash加载至RAM中运行,再由uboot引导应用程序运行。若0地址数据不符合Flash头部结构,再读取Flash的1*64K位置进行同样的数据校验,若再不符合则读取2*64K,直至Flash尾部。升级uboot过程中若升级失败,可根据上述方式读取备份好的uboot,避免设备无法启动。64K仅为举例,还可以是其他大小,其与Flash的存储结构相关。
关于新固件的具体加载过程:
图13为图10中升级文件中的新固件的头部的结构示意图,也即图10中uboot代码或应用程序代码的头部的存储结构。请参阅图13,以uboot升级为例,每个子装载程序获取uboot头部的偏移值。关于偏移值,例如,uboot代码存储于升级文件的首位,则uboot头部的位置为0(也即偏移值为0),第一应用程序头部的偏移值为“0+升级文件中uboot头部长度+uboot主体长度”,uboot头部长度+uboot主体长度可以从uboot头部获取(也即图13中的长度),然后根据第一应用程序的名称是否为“app”判断当前头部是否为应用程序的头部,其他应用程序或程序资源的加载以此类推。根据uboot头部中的名称为“uboot”,确定该头部数据为uboot的头部数据,通过图13中该头部数据中的头部CRC码确定该头部数据的完整性,具体可根据图13中uboot的头部数据得到该uboot区域的长度和头部CRC码,然后对uboot的头部数据进行CRC计算得到计算的CRC码,本领域技术人员可以理解,计算CRC码时依据头部数据中除头部CRC码以外的其余数据进行计算,例如依据图13所示的头部CRC码以下的数据CRC码、地址……名称等五个部分的数据计算CRC码。最后将计算的CRC码和uboot的头部数据中记录的头部CRC码对比,相同则认为uboot区域完整(也即uboot的头部数据完整)。若该头部数据完整,则根据该头部数据中的地址(也即固件存储地址)从升级文件对应地址拉取长度为该头部数据中长度(length)的数据至Flash中与该头部数据中的运行地址(也即固件运行地址)对应的地址,并计算实际拉取的uboot的数据的CRC码与升级文件中uboot头部中的数据CRC码是否一致,以校验拉取的uboot代码是否正确。
以上为已uboot为例说明的固件的数据部分(也即主体部分)的写入过程,关于头部的写入过程,还是以uboot为例进行说明:
从升级文件拉取uboot头部区域的数据(不包括头部CRC码)至Flash,计算实际拉取的uboot的头部区域的CRC码与升级文件中uboot的头部数据中的头部CRC码是否一致,以校验拉取的uboot头部代码是否正确。若一致,则将升级文件中uboot的头部数据中的头部CRC码填入Flash中uboot的头部区域(也即图10中的新的Flash头部)。
3.2,第二装载程序按照图11中子装载程序的顺序加载子装载程序至RAM的运行地址,执行应用程序或程序资源的升级流程3.2.1。
3.2.1首先根据外部设备的升级文件中应用程序代码的长度,擦除Flash中对应的应用程序代码区域的内容,并更新记录区域,记录当前升级进度为该固件擦除成功。接着从外部设备读取新的应用程序代码写入Flash,写入完成之后更新记录区域,记录当前升级进度为该固件备份成功。
4,第二装载程序根据子装载程序的顺序加载该固件的校验程序代码至RAM的运行地址,执行应用程序或程序资源的校验流程。根据Flash中应用程序代码的数据计算CRC码,与升级文件中该应用程序的数据CRC码比对,一致则表示升级成功,更新当前升级进度为该固件升级成功;若校验失败,则需要把当前升级进度回退为该固件升级,并重新执行步骤3。
图14为根据本发明的一种优选实施方式的嵌入式设备的固件升级装置的结构示意图。该装置用于从外部设备获取升级文件进行固件升级,升级文件包括前级装载程序和后级装载程序。请参阅图14,该装置1400包括获取模块1401、加载模块1402、第一运行模块1403和第二运行模块1404。
获取模块1401用于从外部设备获取前级装载程序,并将至少部分前级装载程序存储在可擦写非易失性存储器中。
加载模块1402用于将前级装载程序加载至RAM。
第一运行模块1403用于在RAM中运行前级装载程序,以从外部设备获取后级装载程序,并将后级装载程序加载至RAM中。
第二运行模块1404用于在RAM中运行后级装载程序,以更新嵌入式设备的固件。
本发明上述实施例的嵌入式设备的固件升级装置1400的具体实现方式、实现原理和有益效果可参考前述实施例的嵌入式设备的固件升级方法,此处不再赘述。
本发明实施例还提供了一种芯片,适用于嵌入式设备,芯片内存储有指令集,指令集被执行时,能够指示嵌入式设备实现上述实施例的嵌入式设备的固件升级方法。
本发明实施例还提供了一种嵌入式设备,图15为根据本发明的一种优选实施方式的嵌入式设备的结构示意图,本发明具体实施例并不对嵌入式设备的具体实现做限定。如图15所示,该嵌入式设备可以包括:处理器(processor)1502和存储器(memory)1504。
其中,处理器1502,用于执行程序1506,具体可以执行上述嵌入式设备的固件升级方法实施例中的相关步骤。具体地,程序1506可以包括程序代码,该程序代码包括计算机可执行指令。处理1502可能是中央处理器CPU,或者是特定集成电路ASIC(ApplicationSpecific Integrated Circuit),或者是被配置成实施本发明实施例的一个或多个集成电路。嵌入式设备包括的一个或多个处理器,可以是同一类型的处理器,如一个或多个CPU;也可以是不同类型的处理器,如一个或多个CPU以及一个或多个ASIC。
存储器1504,用于存储程序1506。存储器1504可能包含高速RAM存储器,也可能还包括非易失性存储器(non-volatile memory),例如至少一个磁盘存储器。
此外,本发明实施例还提供了一种计算机可读存储介质,如芯片、光盘等,计算机可读存储介质上存储有可执行指令,该可执行指令被执行时实现上述实施例的嵌入式设备的固件升级方法的操作。
需要说明的是,本公开的实施例所述的计算机可读存储介质并不限定于上述所给实施例,例如还可以为电、磁、光、电磁、红外线、或半导体的系统、装置或器件,或者任意以上的组合。计算机可读存储介质的更具体的例子可以包括但不限于:具有一个或多个导线的电连接、便携式计算机磁盘、硬盘、随机访问存储器(RAM)、只读存储器(ROM)、可擦式可编程只读存储器(EPROM或闪存)、光纤、便携式紧凑磁盘只读存储器(CD-ROM)、光存储器件、磁存储器件、或者上述的任意合适的组合。在本公开的实施例中,计算机可读存储介质可以是任何包含或存储程序的有形介质,该程序可以被指令执行系统、装置或者器件使用或者与其结合使用。
本领域的技术人员能够理解的是,在不冲突的前提下,上述各优选方案可以自由地组合、叠加。其中,附图中的流程图和框图,图示了按照本公开各种实施例的系统、方法和计算机程序产品的可能实现的体系架构、功能和操作。在这点上,流程图或框图中的每个方框可以代表一个模块、程序段、或代码的一部分,该模块、程序段、或代码的一部分包含一个或多个用于实现规定的逻辑功能的可执行指令。也应当注意,在有些作为替换的实现中,方框中所标注的功能也可以以不同于附图中所标注的顺序发生,例如,两个接连表示的方框实际上可以基本并行地执行,它们有时也可以按相反的顺序执行,这依所涉及的功能而定。也要注意的是,框图和/或流程图中的每个方框、以及框图和/或流程图中的方框的组合,可以用执行规定的功能或操作的专用的基于硬件的系统来实现,或者可以用专用硬件与计算机指令的组合来实现。本文中对于各步骤的编号仅为了方便说明和引用,并不用于限定前后顺序,具体的执行顺序是由技术本身确定的,本领域技术人员可以根据技术本身确定各种允许的、合理的顺序。
需要说明的是,本发明中采用步骤编号(字母或数字编号)来指代某些具体的方法步骤,仅仅是出于描述方便和简洁的目的,而绝不是用字母或数字来限制这些方法步骤的顺序。本领域的技术人员能够明了,相关方法步骤的顺序,应由技术本身决定,不应因步骤编号的存在而被不适当地限制,本领域技术人员可以根据技术本身确定各种允许的、合理的步骤顺序。
本领域的技术人员能够理解的是,在不冲突的前提下,上述各优选方案可以自由地组合、叠加。
应当理解,上述的实施方式仅是示例性的,而非限制性的,在不偏离本发明的基本原理的情况下,本领域的技术人员可以针对上述细节做出的各种明显的或等同的修改或替换,都将包含于本发明的权利要求范围内。

Claims (17)

1.一种嵌入式设备的固件升级方法,用于从外部设备获取升级文件进行固件升级,其特征在于,所述升级文件包括前级装载程序和后级装载程序;所述方法包括:
步骤S200,从所述外部设备获取所述前级装载程序,并将至少部分前级装载程序存储在可擦写非易失性存储器中;
步骤S400,将所述前级装载程序加载至RAM;
步骤S600,在所述RAM中运行所述前级装载程序,以从所述外部设备获取所述后级装载程序,并将所述后级装载程序加载至所述RAM中;
步骤S800,在所述RAM中运行所述后级装载程序,以更新所述嵌入式设备的固件。
2.根据权利要求1所述的方法,其特征在于,所述前级装载程序包括第一装载程序和第二装载程序;
所述步骤S200包括:
步骤S210,从所述外部设备获取所述第一装载程序,并将所述第一装载程序存储在所述可擦写非易失性存储器中;
步骤S220,运行所述第一装载程序,以从所述外部设备获取所述第二装载程序;
所述步骤S400包括:将所述第二装载程序加载至所述RAM;
所述步骤S600包括:在所述RAM中运行所述第二装载程序,以从所述外部设备获取所述后级装载程序,并将所述后级装载程序加载至所述RAM中。
3.根据权利要求2所述的方法,其特征在于,所述第一装载程序由通信接口代码和第一加载代码组成,其中,所述通信接口代码用于实现所述嵌入式设备和所述外部设备的通信接口,所述第一加载代码用于通过所述通信接口从所述外部设备获取所述第二装载程序。
4.根据权利要求1所述的方法,其特征在于,所述步骤S200包括:从所述外部设备获取所述前级装载程序,并将全部的所述前级装载程序存储在所述可擦写非易失性存储器中。
5.根据权利要求1所述的方法,其特征在于,所述步骤S200之后,所述方法还包括:在所述RAM中设置标志位,其中,所述标志位在掉电时会被删除;
所述步骤S600包括:
步骤S610,运行引导程序,以判断所述RAM中是否存在标志位;
步骤S620,若所述引导程序判断所述RAM中存在标志位,在所述RAM中运行所述前级装载程序,以从所述外部设备获取所述后级装载程序,并将所述后级装载程序加载至所述RAM中,删除所述标志位;
步骤S630,若所述引导程序判断所述RAM中不存在标志位,引导所述嵌入式设备正常启动。
6.根据权利要求1所述的方法,其特征在于,所述嵌入式设备的固件包括引导程序、应用程序、程序资源中的一个或多个,所述后级装载程序包括按顺序排列的N个子装载程序,其中N为正整数,N≥1,每个子装载程序分别用于更新所述嵌入式设备中与其对应的固件;
所述步骤S600包括:在所述RAM中运行所述前级装载程序,以从所述外部设备获取第i个子装载程序,并将所述第i个子装载程序加载至所述RAM中,其中i为正整数,1≤i≤N,i的初始值为1;
所述步骤S800包括:在所述RAM中运行所述第i个子装载程序,以从所述外部设备的所述升级文件中获取与所述第i个子装载程序对应的第i个固件的升级数据从而更新该固件;
所述步骤S800之后,所述方法还包括步骤S1000:对i自加1并转至步骤S600,直至i=N。
7.根据权利要求6所述的方法,其特征在于,所述可擦写非易失性存储器的记录区域记录有当前升级进度,所述步骤S600包括:在所述RAM中运行所述前级装载程序,以根据所述记录区域记录的当前升级进度从所述外部设备获取相应的第i个子装载程序,并将该第i个子装载程序加载至所述RAM中,其中,相应的第i个子装载程序为所述当前升级进度下所需执行的下一操作步骤用于升级的第i个固件所对应的子装载程序;
所述步骤S800包括:
步骤S810,在所述RAM中运行所述第i个子装载程序,根据所述记录区域记录的当前升级进度,若当前升级进度为第i个固件擦除成功,则执行步骤S830;若当前升级进度为第i个固件写入成功,则执行步骤S840;若当前升级进度为无升级状态,则执行所述步骤S820;若当前升级进度为第i个固件升级成功,则执行步骤S1000;
步骤S820,擦除所述可擦写非易失性存储器中存储的与所述第i个子装载程序对应的第i个固件,并在所述可擦写非易失性存储器的记录区域记录当前升级进度为第i个固件擦除成功;
步骤S830,从所述外部设备的所述升级文件中获取该固件的升级数据,将该固件的升级数据存储至所述可擦写非易失性存储器,并在所述记录区域记录当前升级进度为第i个固件写入成功;
步骤S840,若校验该固件升级成功,在所述记录区域记录当前升级进度为第i个固件升级成功;若校验该固件升级失败,在所述记录区域记录当前升级进度为该固件擦除成功的前一升级进度,所述前一升级进度为第(i-1)个固件升级成功或无升级状态。
8.根据权利要求6所述的方法,其特征在于,所述后级装载程序还包括N个校验程序,校验程序与子装载程序一一对应,每个校验程序在所述后级装载程序中的排列顺序位于与该校验程序对应的子装载程序之后;
所述步骤S800之后所述步骤S1000之前,所述方法还包括:
步骤S910,在所述RAM中运行所述前级装载程序,以根据所述后级装载程序中程序的排列顺序,从所述外部设备获取与所述第i个子装载程序对应的第i个校验程序,并将所述第i个校验程序加载至所述RAM中;
步骤S920,在所述RAM中运行该校验程序,以校验与所述第i个子装载程序对应的第i个固件的升级是否成功,若成功则执行所述步骤S1000,否则重复执行上一次执行的所述步骤S600。
9.根据权利要求6所述的方法,其特征在于,所述步骤S600中获取的当前子装载程序用于更新所述嵌入式设备中的引导程序;
所述步骤S600之后,所述方法还包括:
步骤S700,将所述可擦写非易失性存储器中第一地址存储的引导程序备份至所述可擦写非易失性存储器中的第二地址。
10.根据权利要求1所述的方法,其特征在于,所述嵌入式设备的固件包括引导程序以及应用程序和程序资源中的至少一个,所述后级装载程序包括按顺序排列的N个子装载程序,其中N为正整数,N≥1,每个子装载程序分别用于更新所述嵌入式设备中与其对应的固件;
所述步骤S600包括:在所述RAM中运行所述前级装载程序,所述前级装载程序用于:
从所述外部设备获取第1个子装载程序,所述第1个子装载程序为引导程序装载程序,并将所述引导程序装载程序加载至所述RAM中,所述引导程序装载程序用于:将所述可擦写非易失性存储器中第一地址存储的引导程序备份至所述可擦写非易失性存储器中的第二地址,并擦除所述第一地址存储的引导程序;从所述外部设备的所述升级文件中获取引导程序,将获取的引导程序写入所述可擦写非易失性存储器;
从所述外部设备中根据所述后级装载程序的排列顺序依次获取剩余的子装载程序,所述剩余的子装载程序为应用程序装载程序和/或程序资源装载程序,并将获取的子装载程序加载至所述RAM中,所述子装载程序用于从所述外部设备的所述升级文件中获取与该子装载程序对应的固件的升级数据,将获取的升级数据写入所述可擦写非易失性存储器。
11.根据权利要求10所述的方法,其特征在于,所述可擦写非易失性存储器的记录区域用于记录升级进度;
所述引导程序装载程序在将所述可擦写非易失性存储器中第一地址存储的引导程序备份至所述可擦写非易失性存储器中的第二地址之前,还用于:
在所述记录区域无记录信息时,判断所述外部设备的所述升级文件中引导程序的头部CRC码与所述嵌入式设备的引导程序的头部CRC码是否一致;
若所述外部设备的所述升级文件中引导程序的头部CRC码与所述嵌入式设备的引导程序的头部CRC码不一致,执行将所述可擦写非易失性存储器中第一地址存储的引导程序备份至所述可擦写非易失性存储器中的第二地址的步骤。
12.根据权利要求9~11任意一项所述的方法,其特征在于,所述第二地址为所述可擦写非易失性存储器中n*m字节地址,n为整数,n≥0,m为正整数;所述方法还包括:
步骤S101,上电后读取所述可擦写非易失性存储器中j*m字节地址存储的数据,判断读取的数据是否符合所述可擦写非易失性存储器的头部结构,其中,其中j为正整数,1≤j≤n,j的初始值为1;若读取的数据符合所述可擦写非易失性存储器的头部结构,执行步骤S102,否则,执行步骤S103;
步骤S102,偏移所述可擦写非易失性存储器的头部长度读取存储于所述可擦写非易失性存储器的头部之后的引导程序,将该引导程序从所述可擦写非易失性存储器加载至所述RAM中运行;
步骤S103,对j自加1并转至步骤S101,直至j=n。
13.根据权利要求6所述的方法,其特征在于,所述外部设备的所述升级文件中包括按顺序排列的N个固件,每个固件的头部包括头部CRC码、数据CRC码、固件存储地址、固件运行地址和固件长度;
所述从所述外部设备的所述升级文件中获取与所述第i个子装载程序对应的第i个固件的升级数据从而更新该固件,包括:
计算所述第i个固件的头部的偏移值,所述第i个固件的头部的偏移值等于所述升级文件中该固件之前的所有固件的固件长度之和;
通过所述第i个固件的头部CRC码确定所述第i个固件的头部的完整性;
若所述第i个固件的头部完整,从升级文件中的与所述第i个固件的固件存储地址对应的地址,读取长度为所述第i个固件的固件长度的数据,将其写入至所述可擦写非易失性存储器中的与所述第i个固件的固件运行地址对应的地址;
计算写入所述可擦写非易失性存储器中的与所述第i个固件的固件运行地址对应的地址的固件的CRC码,将该固件的CRC码与所述升级文件中所述第i个固件的头部中的数据CRC码是否一致以校验固件读取是否正确。
14.一种嵌入式设备的固件升级装置,用于从外部设备获取升级文件进行固件升级,其特征在于,所述升级文件包括前级装载程序和后级装载程序;所述装置包括:
获取模块,用于从所述外部设备获取所述前级装载程序,并将至少部分前级装载程序存储在可擦写非易失性存储器中;
加载模块,用于将所述前级装载程序加载至RAM;
第一运行模块,用于在所述RAM中运行所述前级装载程序,以从所述外部设备获取所述后级装载程序,并将所述后级装载程序加载至所述RAM中;
第二运行模块,用于在所述RAM中运行所述后级装载程序,以更新所述嵌入式设备的固件。
15.一种芯片,适用于嵌入式设备,其特征在于,所述芯片内存储有指令集,所述指令集被执行时,能够指示嵌入式设备实现如权利要求1-13中任意一项所述的嵌入式设备的固件升级方法。
16.一种嵌入式设备,其特征在于,包括:处理器和存储器,所述存储器用于存储可执行指令,所述可执行指令使所述处理器执行如权利要求1-13中任意一项所述的嵌入式设备的固件升级方法。
17.一种计算机可读存储介质,所述计算机可读存储介质上存储有可执行指令,其特征在于,所述可执行指令被执行时实现如权利要求1-13中任意一项所述的嵌入式设备的固件升级方法的操作。
CN202311059049.XA 2023-08-21 2023-08-21 嵌入式设备的固件升级方法、装置、芯片和计算设备 Pending CN117093247A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202311059049.XA CN117093247A (zh) 2023-08-21 2023-08-21 嵌入式设备的固件升级方法、装置、芯片和计算设备

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202311059049.XA CN117093247A (zh) 2023-08-21 2023-08-21 嵌入式设备的固件升级方法、装置、芯片和计算设备

Publications (1)

Publication Number Publication Date
CN117093247A true CN117093247A (zh) 2023-11-21

Family

ID=88771253

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202311059049.XA Pending CN117093247A (zh) 2023-08-21 2023-08-21 嵌入式设备的固件升级方法、装置、芯片和计算设备

Country Status (1)

Country Link
CN (1) CN117093247A (zh)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN117932625A (zh) * 2024-03-25 2024-04-26 慧翰微电子股份有限公司 一种嵌入式设备的升级方法、装置、电子设备及存储介质

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN117932625A (zh) * 2024-03-25 2024-04-26 慧翰微电子股份有限公司 一种嵌入式设备的升级方法、装置、电子设备及存储介质

Similar Documents

Publication Publication Date Title
US7293166B2 (en) Method of indicating a format of accessing an operating system contained on a USB memory device
US8589730B2 (en) Handling errors during device bootup from a non-volatile memory
US7340566B2 (en) System and method for initializing a memory device from block oriented NAND flash
US20120260027A1 (en) Device bootup from a nand-type non-volatile memory
US20110004871A1 (en) Embedded electronic device and firmware updating method thereof
CN106293832B (zh) 一种soc芯片引导启动方法及系统
CN103970557B (zh) 存储设备启动系统的方法及存储设备
US20060064576A1 (en) Boot systems and methods
US20050177709A1 (en) Apparatus and method for updating firmware
US11042383B2 (en) System and method for boot speed optimization using non-volatile dual in-line memory modules
TWI296778B (en) Method and system for maintaining smbios
KR101555210B1 (ko) 휴대용 단말기에서 내장 대용량 메모리를 이용한 컨텐츠 다운로드 방법 및 장치
US20140304497A1 (en) Electronic device having function of booting operating system by bootloader, method of performing the same function, and storage medium
CN111857776A (zh) Dsp板卡类的应用程序的在线升级方法
CN102163155A (zh) 存储设备的升级方法及升级控制装置
CN117093247A (zh) 嵌入式设备的固件升级方法、装置、芯片和计算设备
CN113157303A (zh) 升级方法、嵌入式系统、终端及计算机存储介质
CN108897576A (zh) 一种基于arm芯片的快速启动boot的方法
CN108694052B (zh) 一种固件升级方法、固件升级装置及固件升级系统
US7490321B2 (en) Method for updating firmware via determining program code
CN112445540A (zh) 程序运行方法、系统、终端及存储介质
CN116185299A (zh) 闪存控制器及相关装置和方法
JP2008084184A (ja) メモリコントローラ
CN111399926A (zh) 下载启动程序的方法和装置
US7490232B2 (en) Disk device using disk to rewrite firmware and firmware determination method

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