首页 / 专利库 / 软件 / 操作系统 / 一种固件升级方法及装置

一种固件升级方法及装置

阅读:1发布:2020-09-27

专利汇可以提供一种固件升级方法及装置专利检索,专利查询,专利分析的服务。并且本 申请 提供一种 固件 升级方法及装置,包括:加载升级文件,所述升级文件包括:多个分别与不同 操作系统 对应的解压程序、固件压缩包;所述固件压缩包包括:固件升级包、多个分别与不同操作系统对应的安装程序;在所述升级文件中读取与本网络设备的操作系统对应的解压程序;运行读取到的所述解压程序以解压所述固件压缩包,得到固件升级包、多个安装程序,并在所述多个安装程序中调用与所述操作系统对应的安装程序;运行所述安装程序安装所述固件升级包,并基于该固件升级包升级固件。采用本申请提供的方法,可以实现固件升级。,下面是一种固件升级方法及装置专利的具体信息内容。

1.一种固件升级方法,其特征在于,所述方法应用于网络设备,所述方法包括:
加载升级文件,所述升级文件包括:多个分别与不同操作系统对应的解压程序、固件压缩包;所述固件压缩包包括:固件升级包、多个分别与不同操作系统对应的安装程序;
在所述升级文件中读取与本网络设备的操作系统对应的解压程序;
运行读取到的所述解压程序以解压所述固件压缩包,得到固件升级包、多个安装程序,并在所述多个安装程序中调用与所述操作系统对应的安装程序;
运行所述安装程序安装所述固件升级包,并基于该固件升级包升级固件。
2.根据权利要求1所述的方法,其特征在于,所述升级文件为Windows系统可执行的升级文件;
所述升级文件包括:Windows系统对应的Windows解压程序、Linux系统对应的Linux解压程序;所述固件压缩包包括:固件升级包、Windows系统对应的Windows安装程序、Linux系统对应的Linux安装程序;
所述Windows解压程序在所述升级文件的数据区中的存储位置在所述固件压缩包、所述Linux解压程序之前。
3.根据权利要求2所述的方法,其特征在于,
所述升级文件的第一文件头的预设空间储存有用于读取所述Linux解压程序的Shell指令,所述Shell指令包括:所述Linux解压程序在所述升级文件的数据区的起始地址。
4.根据权利要求3所述的方法,其特征在于,所述Windows系统可执行的升级文件为PE升级文件;
所述第一文件头为所述PE升级文件的MS-DOS头和MS-DOS Stub;
所述升级文件的第一文件头的预设空间为所述MS-DOS头中从第3字节开始至第60字节止所指示的空间、以及MS-DOS Stub中的所有空间。
5.根据权利要求3或4所述的方法,其特征在于,所述网络设备的操作系统为Linux系统;
所述在所述升级文件中读取与所述网络设备的操作系统对应的解压程序,包括:
解析所述升级文件的第一文件头,识别所述Shell指令;
执行所述Shell指令,以基于所述Linux解压程序在所述升级文件的数据区的起始地址,在升级文件的数据区中读取该Linux解压程序。
6.根据权利要求2所述的方法,其特征在于,所述网络设备的操作系统为Windows系统;
在所述升级文件中读取与所述操作系统对应的解压程序,包括:
基于所述升级文件的第二文件头中记录的所述Windows解压程序在所述升级文件的数据区的地址信息,从该升级文件的数据区读取所述Windows解压程序。
7.根据权利要求2或5所述的方法,其特征在于,所述Windows系统可执行的升级文件为PE升级文件;
所述升级文件的第二文件头为所述PE升级文件的PE头。
8.一种固件升级装置,其特征在于,所述装置应用于网络设备,所述装置包括:
加载单元,用于加载升级文件,所述升级文件包括:多个分别与不同操作系统对应的解压程序、固件压缩包;所述固件压缩包包括:固件升级包、多个分别与不同操作系统对应的安装程序;
读取单元,用于在所述升级文件中读取与本网络设备的操作系统对应的解压程序;
解压单元,用于运行读取到的所述解压程序以解压所述固件压缩包,得到固件升级包、多个安装程序,并在所述多个安装程序中调用与所述操作系统对应的安装程序;
安装单元,用于运行所述安装程序安装所述固件升级包,并基于该固件升级包升级固件。
9.根据权利要求8所述的装置,其特征在于,所述升级文件为Windows系统可执行的升级文件;
所述升级文件包括:Windows系统对应的Windows解压程序、Linux系统对应的Linux解压程序;所述固件压缩包包括:固件升级包、Windows系统对应的Windows安装程序、Linux系统对应的Linux安装程序;
所述Windows解压程序在所述升级文件的数据区中的存储位置在所述固件压缩包、所述Linux解压程序之前。
10.根据权利要求9所述的装置,其特征在于,所述升级文件的第一文件头的预设空间储存有用于读取所述Linux解压程序的Shell指令,所述Shell指令包括:所述Linux解压程序在所述升级文件的数据区的起始地址。
11.根据权利要求10所述的装置,其特征在于,所述Windows系统可执行的升级文件为PE升级文件;
所述第一文件头为所述PE升级文件的MS-DOS头和MS-DOS Stub;
所述升级文件的第一文件头的预设空间为所述MS-DOS头中从第3字节开始至第60字节止所指示的空间、以及MS-DOS Stub中的所有空间。
12.根据权利要求10或11所述的装置,其特征在于,所述网络设备的操作系统为Linux系统;
所述读取单元,具体用于解析所述升级文件的第一文件头,识别所述Shell指令;执行所述Shell指令,以基于所述Linux解压程序在所述升级文件的数据区的起始地址,在升级文件的数据区中读取该Linux解压程序。
13.根据权利要求9所述的装置,其特征在于,所述网络设备的操作系统为Windows系统;
所述读取单元,具体用于基于所述升级文件的第二文件头中记录的所述Windows解压程序在所述升级文件的数据区的地址信息,从该升级文件的数据区读取所述Windows解压程序。
14.根据权利要求9或13所述的装置,其特征在于,所述Windows系统可执行的升级文件为PE升级文件;
所述升级文件的第二文件头为所述PE升级文件的PE头。

说明书全文

一种固件升级方法及装置

技术领域

[0001] 本申请涉及计算机通信领域,尤其涉及一种固件升级方法及装置。

背景技术

[0002] 对于网络设备中的固件,经常需要用户提供固件升级包来对固件进行升级。
[0003] 现有的固件升级方式是:将固件升级包与用于安装固件升级包的相关程序开发成一个可执行的升级文件。操作系统运行该升级文件就可以安装该固件升级包,并基于固件升级包实现固件的升级。
[0004] 但是,由于不同的操作系统对应的可执行文件的格式不同,所以必须为各操作系统对应开发与该操作系统的可执行文件格式适配的升级文件,大大增加了开发升级文件的工作量。发明内容
[0005] 有鉴于此,本申请提供一种固件升级方法及装置,用以实现固件升级。
[0006] 具体地,本申请是通过如下技术方案实现的:
[0007] 根据本申请的第一方面,提供一种固件升级方法,所述方法应用于网络设备,所述方法包括:
[0008] 加载升级文件,所述升级文件包括:多个分别与不同操作系统对应的解压程序、固件压缩包;所述固件压缩包包括:固件升级包、多个分别与不同操作系统对应的安装程序;
[0009] 在所述升级文件中读取与本网络设备的操作系统对应的解压程序;
[0010] 运行读取到的所述解压程序以解压所述固件压缩包,得到固件升级包、多个安装程序,并在所述多个安装程序中调用与所述操作系统对应的安装程序;
[0011] 运行所述安装程序安装所述固件升级包,并基于该固件升级包升级固件。
[0012] 可选的,所述升级文件为Windows系统可执行的升级文件;
[0013] 所述升级文件包括:Windows系统对应的Windows解压程序、Linux系统对应的Linux解压程序;所述固件压缩包包括:固件升级包、Windows系统对应的Windows安装程序、Linux系统对应的Linux安装程序;
[0014] 所述Windows解压程序在所述升级文件的数据区中的存储位置在所述固件压缩包、所述Linux解压程序之前。
[0015] 可选的,所述升级文件的第一文件头的预设空间储存有用于读取所述Linux解压程序的Shell指令,所述Shell指令包括:所述Linux解压程序在所述升级文件的数据区的起始地址。
[0016] 可选的,所述网络设备的操作系统为Linux系统;
[0017] 所述在所述升级文件中读取与所述网络设备的操作系统对应的解压程序,包括:
[0018] 解析所述升级文件的第一文件头,识别所述Shell指令;
[0019] 执行所述Shell指令,以基于所述Linux解压程序在所述升级文件的数据区的起始地址,在升级文件的数据区中读取该Linux解压程序。
[0020] 可选的,所述Windows系统可执行的升级文件为PE升级文件;
[0021] 所述第一文件头为所述PE升级文件的MS-DOS头和MS-DOS Stub;
[0022] 所述升级文件的第一文件头的预设空间为所述MS-DOS头中从第3字节开始至第60字节止所指示的空间、以及MS-DOS Stub中的所有空间。
[0023] 可选的,所述网络设备的操作系统为Windows系统;
[0024] 在所述升级文件中读取与所述操作系统对应的解压程序,包括:
[0025] 基于所述升级文件的第二文件头中记录的所述Windows解压程序在所述升级文件的数据区的地址信息,从该升级文件的数据区读取所述Windows解压程序。
[0026] 可选的,所述Windows系统可执行的升级文件为PE升级文件;
[0027] 所述升级文件的第二文件头为所述PE升级文件的PE头。
[0028] 根据本申请的第二方面,本申请提供一种固件升级装置,所述装置应用于网络设备,所述装置包括:
[0029] 加载单元,用于加载升级文件,所述升级文件包括:多个分别与不同操作系统对应的解压程序、固件压缩包;所述固件压缩包包括:固件升级包、多个分别与不同操作系统对应的安装程序;
[0030] 读取单元,用于在所述升级文件中读取与本网络设备的操作系统对应的解压程序;
[0031] 解压单元,用于运行读取到的所述解压程序以解压所述固件压缩包,得到固件升级包、多个安装程序,并在所述多个安装程序中调用与所述操作系统对应的安装程序;
[0032] 安装单元,用于运行所述安装程序安装所述固件升级包,并基于该固件升级包升级固件。
[0033] 可选的,所述升级文件为Windows系统可执行的升级文件;
[0034] 所述升级文件包括:Windows系统对应的Windows解压程序、Linux系统对应的Linux解压程序;所述固件压缩包包括:固件升级包、Windows系统对应的Windows安装程序、Linux系统对应的Linux安装程序;
[0035] 所述Windows解压程序在所述升级文件的数据区中的存储位置在所述固件压缩包、所述Linux解压程序之前。
[0036] 可选的,所述升级文件的第一文件头的预设空间储存有用于读取所述Linux解压程序的Shell指令,所述Shell指令包括:所述Linux解压程序在所述升级文件的数据区的起始地址。
[0037] 可选的,所述网络设备的操作系统为Linux系统;
[0038] 所述读取单元,具体用于解析所述升级文件的第一文件头,识别所述Shell指令;执行所述Shell指令,以基于所述Linux解压程序在所述升级文件的数据区的起始地址,在升级文件的数据区中读取该Linux解压程序。
[0039] 可选的,所述Windows系统可执行的升级文件为PE升级文件;
[0040] 所述第一文件头为所述PE升级文件的MS-DOS头和MS-DOS Stub;
[0041] 所述升级文件的第一文件头的预设空间为所述MS-DOS头中从第3字节开始至第60字节止所指示的空间、以及MS-DOS Stub中的所有空间。
[0042] 可选的,所述网络设备的操作系统为Windows系统;
[0043] 所述读取单元,具体用于基于所述升级文件的第二文件头中记录的所述Windows解压程序在所述升级文件的数据区的地址信息,从该升级文件的数据区读取所述Windows解压程序。
[0044] 可选的,所述Windows系统可执行的升级文件为PE升级文件;
[0045] 所述升级文件的第二文件头为所述PE升级文件的PE头。
[0046] 由上述描述可知,本申请的升级文件中包括:多个与不同操作系统对应的解压程序和固件压缩包,固件压缩包中包括:固件升级包和多个与不同操作系统对应的安装程序,这使得不同的操作系统均可获得与自身对应的解压程序解压固件压缩包,并调用固件压缩包中与自身对应的安装程序来安装固件升级包,并基于该固件升级包实现固件的升级,所以本申请提供的升级文件的兼容性更好。
[0047] 此外,本申请只需开发一个升级文件,就可以实现在不同操作系统的固件升级包的安装,所以可以大大减少开发工作量。并且,用户也不需要区分操作系统来选择升级文件,所以用户体验更好。附图说明
[0048] 图1a是本申请示出的一种传统PE文件的示意图;
[0049] 图1b是本申请示出的一种传统PE文件的MS-DOS头示意图;
[0050] 图1c是本申请示出的一种PE文件的MS-DOS头、MS-DOS Stub和PE头信息;
[0051] 图2是本申请一示例性实施例示出的一种PE升级文件示意图;
[0052] 图3是本申请一示例性实施例示出的一种固件升级方法的流程图
[0053] 图4是本申请一示例性实施例示出的一种网络设备的硬件结构图;
[0054] 图5是本申请一示例性实施例示出的一种固件升级装置的框图

具体实施方式

[0055] 这里将详细地对示例性实施例进行说明,其示例表示在附图中。下面的描述涉及附图时,除非另有表示,不同附图中的相同数字表示相同或相似的要素。以下示例性实施例中所描述的实施方式并不代表与本申请相一致的所有实施方式。相反,它们仅是与如所附权利要求书中所详述的、本申请的一些方面相一致的装置和方法的例子。
[0056] 在本申请使用的术语是仅仅出于描述特定实施例的目的,而非旨在限制本申请。在本申请和所附权利要求书中所使用的单数形式的“一种”、“所述”和“该”也旨在包括多数形式,除非上下文清楚地表示其他含义。还应当理解,本文中使用的术语“和/或”是指并包含一个或多个相关联的列出项目的任何或所有可能组合。
[0057] 应当理解,尽管在本申请可能采用术语第一、第二、第三等来描述各种信息,但这些信息不应限于这些术语。这些术语仅用来将同一类型的信息彼此区分开。例如,在不脱离本申请范围的情况下,第一信息也可以被称为第二信息,类似地,第二信息也可以被称为第一信息。取决于语境,如在此所使用的词语“如果”可以被解释成为“在……时”或“当……时”或“响应于确定”。
[0058] 传统的固件升级方式是:将固件升级包和安装程序做成固件压缩包。将固件压缩包和解压程序做成一个可执行文件。
[0059] 网络设备加载该可执行文件,采用解压程序解压该固件压缩包,执行该固件压缩包中的安装程序,安装该固件升级包,基于该固件升级包进行升级。
[0060] 但是,不同的网络设备的操作系统是不同的,而不同的操作系统对应的可执行文件格式是不同的。比如,Windows系统对应的可执行文件是PE(Portable Executable,可移植性可执行文件)文件,Linux系统对应的可执行文件为ELF文件、a.out文件和Shell脚本文件等。
[0061] 基于此,升级文件的提供商必须为每一种操作系统单独开发与发布一个与该操作系统可执行文件格式适配的可执行文件,大大增加了提供商的工作量。而用户需要区分操作系统类型而选择不同的升级文件,极大地降低了用户体验。
[0062] 有鉴于此,本申请提供一种升级文件,该升级文件中包括:多个与不同操作系统对应的解压程序和固件压缩包,固件压缩包中包括:固件升级包和多个与不同操作系统对应的安装程序,这使得不同的操作系统均可获得与自身对应的解压程序解压固件压缩包,并调用固件压缩包中与自身对应的安装程序来安装固件升级包,并基于该固件升级包实现固件的升级,所以本申请提供的升级文件的兼容性更好。
[0063] 此外,本申请只需开发一个升级文件,就可以实现在不同操作系统的固件升级包的安装,所以可以大大减少开发工作量。并且,用户也不需要区分操作系统来选择升级文件,所以用户体验更好。
[0064] 在介绍本申请提供的方法之前,先对本申请提供的指定格式的升级文件进行详细说明。
[0065] 本申请提供的指定格式的升级文件包括:多个分别与不同操作系统对应的解压程序和固件压缩包。固件压缩包包括:固件升级包、以及多个分别与不同操作系统对应的安装程序。
[0066] 比如,操作系统可包括:Windows系统和Linux系统。升级文件中可包括:与Windows系统对应的Windows解压程序、与Linux系统对应的Linux解压程序。固件压缩包可包括:固件升级包、与Windows系统对应的Windows安装程序、与Linux系统对应的Linux安装程序。
[0067] 该升级文件可以是Windows系统中的可执行文件,比如该升级文件是PE格式的升级文件(简称PE升级文件),这里只是对升级文件的格式进行示例性说明,不进行具体地限定。
[0068] 将该升级文件制定为Windows系统可执行文件的原因在于:
[0069] 在Windows系统下所有的可执行文件必须是PE文件,对于非PE文件,无法在Windows系统下执行。而Linux系统的开源性要比Windows系统好,进一步来说,在Linux系统中加载一个文件时,首先会识别该文件的文件格式。如果该文件是ELF、a.out格式,则会直接执行该文件。如果该文件的格式是未识别格式或者是普通文本文件格式,Linux系统则会使用Shell脚本来执行该文件。
[0070] 由于对于未识别出格式的文件或者普通文本文件,Linux系统均会执行该文件,所以为了使得本申请的升级文件既可以在Windows系统下执行,又可以在Linux系统下执行,所以将该升级文件设计成Windows系统下的可执行文件。
[0071] 进一步的,本申请在升级文件的数据区中储存了Windows解压程序、固件压缩包和所述Linux解压程序。
[0072] 其中,Windows解压程序在该升级文件数据区中的存储位置在固件压缩包和Linux解压程序之前。
[0073] 换句话来说,按照存储位置的前后顺序,升级文件数据区依次存储了Windows解压程序、固件压缩包和Linux解压程序。
[0074] 或者,按照存储位置的前后顺序,升级文件数据区依次存储了Windows解压程序、Linux解压程序和固件压缩包。
[0075] 进一步的,当该升级文件是Windows系统下的可执行文件时,可在该升级文件的第一文件头中注入Linux系统中可执行的Shell指令。通过执行该Shell脚本可在该升级文件数据区中读取到Linux解压程序。
[0076] 当然,还在该升级文件的第二文件头还携带了Windows解压程序的相关信息,比如Windows解压程序的相关信息可包括:Windows解压程序的地址信息等,使得在Windows系统中执行该升级文件时,可以读取到该升级文件数据区储存的Windows解压程序。
[0077] 下面以升级文件为PE升级文件为例,多个操作系统为Windows操作系统和Linux操作系统,对升级文件进行详细说明。
[0078] 1、传统的PE文件
[0079] 参见图1a,图1a是本申请示出的一种传统PE文件的示意图。
[0080] PE文件是Windows系统下的可执行文件,PE文件通常包括:MS-DOS头、MS-DOS Stub、PE头和数据区。
[0081] 1)MS-DOS头
[0082] 如图1b所示,图1b是本申请示出的一种传统PE文件的MS-DOS头示意图。
[0083] MS-DOS头包括64个字节。
[0084] MS-DOS头的前两个字节是固定值,这两个字节分别为0x4D和0x5A。0x4D和0x5A的ASCII码分别为M、Z两个字符,所以将MS-DOS头的前两个字节称之为MZ魔术字。
[0085] 该MZ魔术字是Windows操作系统可执行文件的标志信息。在Windows系统加载文件时,若识别出该文件的文件头的前两个字节为MZ魔术字,则确定该文件为Windows系统下的可执行PE文件。
[0086] MS-DOS头的最后4个字节(即第61字节至第64字节)记录了PE头的起始地址。通过读取MS-DOS头最后4个字节,可以确定PE文件的PE头的起始位置。
[0087] 例如,MS-DOS头最后4个字节为80 00 00 00,则表示PE头的起始位置是从0080h开始的。
[0088] MS-DOS头的其他字节(即第3字节至第60字节)记录了兼容DOS系统而编写的代码。
[0089] 2)MS-DOS Stub
[0090] MS-DOS Stub记录了为了兼容DOS系统而编写的代码。
[0091] 3)PE头
[0092] PE头的前两个字节也是固定值,前两个字节的分别为0x50和0x45,0x50和0x45在ASCII码为P、E两个字符。
[0093] PE头储存了PE文件的相关信息。比如,PE文件的相关信息包括:数据区的地址信息、PE文件在数据区中的地址信息、PE文件的校验和等,这里的PE头与本领域技术人员熟知的PE头相同,这里不再赘述。
[0094] 参见图1c,图1c是本申请示出的一种PE文件的MS-DOS头、MS-DOS Stub和PE头信息。
[0095] 由图1c可以看出,图1c框出的“4D 5A”这两个字节就是MZ魔术字,框出的“80 00 00 00”这4个字节为PE头起始地址。
[0096] 图1c框出的“50 45”这2个字节为P、E字节,即PE头的前两个字节。图1c框出的“0080h”为PE头起始地址对应的起始位置。
[0097] 在Windows系统中加载PE文件时,Windows系统可先从MS-DOS头中读取PE头的起始地址,找到PE头,再基于PE头读取PE文件数据区的数据。
[0098] 4)数据区
[0099] 数据区用于储存PE文件中的数据。
[0100] PE文件的PE头中记录有数据区的起始地址以及数据区的长度。
[0101] Windows系统可以基于PE头中记录的数据区的起始地址和数据区的长度,在数据区中读取数据。具体可以参见现有技术中的PE头格式和Windows系统基于PE头从PE文件数据区中读取数据的方式,这里不再赘述。
[0102] 2、本申请提供的PE升级文件
[0103] 本申请对上述传统的PE升级文件进行了修改,一方面,使得PE升级文件携带了Linux解压程序和Linux安装程序,另一方面,在Linux系统下仍可执行该PE升级文件。总的来说,本申请提供的PE升级文件既可以在Windows系统下执行,还可在Linux系统下执行。
[0104] 下面对本申请提供的PE升级文件进行详细地说明,参见图2,图2是本申请一示例性实施例示出的一种PE升级文件示意图。
[0105] 需要说明的是,当上述升级文件为PE升级文件时,上述第一文件头包括:PE升级文件中的MS-DOS头和MS-DOS Stub。
[0106] 上述第二文件头为PE升级文件中的PE头。
[0107] 此外,该PE升级文件的后缀名仍为.exe,比如该PE升级文件的后缀名可以为.sh.exe.等,这里只是对PE升级文件的后缀名进行示例性地说明,不进行具体地限定。
[0108] 1)MS-DOS头和MS-DOS Stub
[0109] 由于在PE升级文件执行时,Windows系统并不关心MS-DOS头和MS-DOS Stub中储存的兼容DOS系统的代码,所以修改MS-DOS和MS-DOS Stub中储存的兼容DOS系统的代码并不影响PE升级文件在Windows系统下的执行。
[0110] 因此,本申请将一个Linux系统可执行的Shell指令写入至MS-DOS头和MS-DOS Stub用于储存兼容DOS系统的代码的空间中,换句话来说,在不改变MS-DOS头中的MZ魔术字和PE头起始地址的前提下,在MS-DOS头和MS-DOS Stub中写入了Shell代码。
[0111] 例如,本申请将该Shell代码写入至MS-DOS头的第3字节至第60字节所指示的空间和MS-DOS Stub空间中。又例如,将shell代码写入至MS-DOS头的第3字节至64字节所指示的空间和MS-DOS Stub空间中,其中,为忽略对于MS-DOS头的最后4个字节(即第61-64字节)所指示的空间,可在预设位置写入表示忽略该4个字节的注释,如在0x3B处插入#∈NUL NUL NUL。
[0112] 该Shell指令中包括:Linux解压程序在该PE升级文件的数据区的起始地址,以下称为Linux解压程序的起始地址。
[0113] 该Shell指令的作用是:被Linux系统识别成Shell脚本,当Linux系统执行该Shell脚本后,可基于Linux解压程序的起始地址,从PE升级文件的数据区读取Linux解压程序,并将Linux解压程序保存在Linux系统下的指定文件夹中。
[0114] 比如,该Shell指令包括:
[0115] MZ>/dev/null 2>&1;P=“if=$0bs=1status=none skip=”;(含义为:MZ为MZ魔术字,/dev/null表示执行MZ指令后不输出指令执行结果。应当理解的是,该括号内的文字并不为指令)
[0116] #∈NUL NUL NUL(这是一段注释,该注释对应的位置为MS-DOS头的最后4个字节位置,应当理解的是,该括号内的文字并不为指令)
[0117] dd${P}27936︳while read l;do eval“$l”;done(含义为:从起始地址为27936的位置读取并执行Linux解压程序。应当理解的是,该括号内的文字并不为指令)[0118] exit 0。
[0119] 上述Shell指令只是示例性地说明,不对该Shell指令进行具体地限定。
[0120] 需要说明的是,一方面,“MZ>/dev/null”作用是:对于Linux系统来说,Linux也将MZ魔术字当作指令来执行,只不过Linux系统并没有MZ指令,所以会输出无法识别指令等信息。这里增加/dev/null表示不输出MZ指令执行结果,使得Linux系统可忽略MZ魔术字执行结果的显示。
[0121] 另一方面,#∈NUL NUL NUL的作用是:将表示PE头的起始地址的4个字节变成一段程序注释,使得Linux系统可以忽略该执行这4个字节。
[0122] 通过上面两方面描述,Linux系统可以忽略MZ魔术字和PE头的起始地址,而执行基于Linux解压程序的起始地址读取Linux解压程序的操作。
[0123] 还需要说明的是:
[0124] 将MS-DOS头以及MS-DOS Stub中无用的兼容老DOS系统的代码修改为Linux系统可执行的Shell指令的好处在于:
[0125] 一方面,在Linux系统下,加载该PE升级文件,由于PE升级文件的MS-DOS头中携带有Shell指令,所以Linux系统会将PE升级文件作为Shell脚本文件来执行,使得PE升级文件可以在Linux系统下执行。
[0126] 另一方面,本申请仍保留MS-DOS头中的MZ魔术字和PE头的起始位置,使得该PE升级文件可以在Windows系统下正常执行。
[0127] 再一方面,在Linux系统下执行MS-DOS头和MS-DOS Stub中的Shell指令,可以指示Linux系统从该Shell指令指示的起始位置读取Linux解压程序。
[0128] 2)PE头
[0129] 本申请提供的PE升级文件的PE头与现有的PE升级文件中的PE头相同,这里不再赘述。
[0130] 3)数据区
[0131] 本申请在升级文件的数据区中储存了Windows解压程序、固件压缩包和所述Linux解压程序。
[0132] 其中,Windows解压程序在该升级文件数据区中的存储位置在固件压缩包和Linux解压程序之前。
[0133] 换句话来说,按照存储位置的前后顺序,升级文件数据区依次存储了Windows解压程序、固件压缩包和Linux解压程序。
[0134] 或者,按照存储位置的前后顺序,升级文件数据区依次存储了Windows解压程序、Linux解压程序和固件压缩包。
[0135] 固件压缩包中储存有:固件升级包、Windows安装程序和Linux安装程序。
[0136] 需要说明的是,本申请更改了PE升级文件的MS-DOS头以及MS-DOS Stub的一些Windows系统不关心的兼容DOS系统的代码,并没有更改PE升级文件的其他部分(比如PE头和包含有Windows解压程序的数据区等),这就使得Windows系统仍然可以按照现有的方式来执行PE文件。而如果将上述固件压缩包和Linux解压程序添加在PE升级文件的数据区的Windows解压程序之前,就会改变PE升级文件的文件格式,致使Windows系统有可能无法正常执行PE升级文件。
[0137] 因此,本申请在不改变PE升级文件格式的前提下,更改了PE升级文件的MS-DOS头以及MS-DOS Stub的一些Windows系统不关心的兼容DOS系统的代码,并在PE升级文件后添加了固件压缩包和Linux解压程序,由于本申请并没有修改PE升级文件的格式,因此Windows系统仍然会正常执行本申请提供的PE升级文件。同时还能够兼容Linux系统,Linux系统可以在PE升级文件中的MS-DOS头和MS-DOS Stub中添识别Shell指令,使得Linux系统可以从该PE升级文件中获取Linux解压程序。
[0138] 在介绍完上述PE升级文件后,下面对本申请提供的固件升级方法进行详细地说明。
[0139] 参见图3,图3是本申请一示例性实施例示出的一种固件升级方法的流程图,该方法应用于网络设备,可包括如下所示步骤。
[0140] 步骤301:加载升级文件。
[0141] 步骤302:在所述升级文件中读取与所述网络设备的操作系统对应的解压程序。
[0142] 其中,上述网络设备包括:计算机、服务器等具有操作系统的设备,这里只是示例性地说明,不进行具体地限定。
[0143] 1)当网络设备的操作系统为Linux系统时,Linux系统可在升级文件中读取与该Linux系统对应的Linux解压程序。
[0144] 在实现时,Linux系统可解析该升级文件的第一文件头,识别第一文件头中携带的Shell指令,并执行所述Shell指令,以基于所述Shell指令中携带的Linux解压程序的起始地址,在升级文件的数据区中读取该Linux解压程序。
[0145] 以该升级文件为PE升级文件为例进行说明。
[0146] 当网络设备的操作系统为Linux系统时,虽然该PE升级文件为PE格式文件,但是由于Linux系统具有开源性,Linux系统会执行未识别出格式的文件或者文本文件。所以,Linux系统在加载该PE升级文件后,会将该PE升级文件为识别为文本文件或者未识别出格式的文件,Linux系统仍会执行该PE升级文件。
[0147] 在执行时,Linux系统可解析该PE升级文件的MS-DOS头和MS-DOS Stub,并在MS-DOS头和MS-DOS Stub中读取出Shell指令。
[0148] 由于Shell指令是Linux系统中可执行指令,所以Linux系统可以执行该Shell指令。Linux系统可以直接执行读取出的Shell指令,也可将Shell指令存储在Linux系统中作为可执行文件执行。这里不对Shell指令的执行进行具体地限定。
[0149] 该Shell指令可以指示Linux系统基于该Shell指令中携带的Linux解压程序在该PE升级文件的数据区的起始地址,从该PE升级文件的数据区读取该Linux解压程序。
[0150] 2)当网络设备的操作系统为Windows系统时,Windows系统可在升级文件中读取与该Windows系统对应的Windows解压程序。
[0151] 在实现时,Windows系统可基于所述升级文件的第二文件头中记录的所述Windows解压程序在所述升级文件的数据区的地址信息,从该升级文件的数据区读取所述Windows解压程序。对于“Windows解压程序在所述升级文件的数据区的地址信息,从该升级文件的数据区读取所述Windows解压程序”可参见本领域技术人员熟知的Windows系统执行PE文件的现有方式,这里不再赘述。
[0152] 以该升级文件为PE升级文件为例进行说明。
[0153] Windows加载该PE升级文件时,由于可以在该PE升级文件的MS-DOS头的前两个字节确定出MZ魔术字,所以Windows系统可认为该PE升级文件为本系统可执行文件。
[0154] Windows系统可解析该PE升级文件的MS-DOS头,从该MS-DOS头的最后4个字节中获取PE头的起始位置。
[0155] 然后,Windows系统可依据获取到的PE头的起始位置读取出PE升级文件的PE头,并解析该PE头,从PE头中读取到Windows解压程序在该PE升级文件的数据区的地址信息。
[0156] Windows系统可基于读取到的地址信息,从该PE升级文件的数据区中读取该Windows解压程序。
[0157] 步骤303:运行读取到的所述解压程序以解压所述固件压缩包,得到固件升级包、多个安装程序,并在所述多个安装程序中调用与所述操作系统对应的安装程序。
[0158] 步骤304:运行所述安装程序以安装所述固件升级包,以基于该固件升级包升级固件。
[0159] 需要说明的是,读取到的解压程序包括:解压代码和调用代码。解压代码可以指示操作系统对固件压缩包进行解压操作。调用代码可以指示操作系统调用与本操作系统对应的安装程序。
[0160] 此外,该解压程序还存储有固件压缩包在该升级文件数据区中的地址信息。
[0161] 1)网络设备的操作系统为Linux系统
[0162] Linux系统可运行读取到的Linux解压程序。该Linux解压程序的解压代码可以指示Linux系统基于该解压程序中记录固件压缩包的地址信息,从该升级文件中读取固件压缩包,并解压该固件压缩包,得到固件升级包和多个与不同操作系统对应的安装程序。该Linux解压程序的调用代码可以指示Linux系统调用与该Linux系统对应的Linux安装程序。
[0163] Linux系统可运行该Linux安装程序,以将安装该固件升级包,并通过该固件升级包升级该固件升级包对应的固件。
[0164] 2)网络设备的操作系统为Windows系统
[0165] Windows系统可运行读取到的Windows解压程序。该Windows解压程序的解压代码可以指示Windows系统基于该解压程序中记录固件压缩包的地址信息,从该升级文件中读取固件压缩包,并解压该固件压缩包,得到固件升级包和多个与不同操作系统对应的安装程序。该Windows解压程序的调用代码可以指示Windows系统调用与该Windows系统对应的Windows安装程序。
[0166] Windows系统可运行该Windows安装程序,以将安装该固件升级包,并通过该固件升级包升级该固件升级包对应的固件。
[0167] 需要说明的是,固件升级与软件升级不同。
[0168] 固件是是涉及硬件的概念。固件升级,是将固件升级包携带的数据写入至固件对应的硬件中,比如将固件升级包携带的数据写入至网卡、主板等硬件。所以,在固件升级时,还需要有安装程序。该安装程序的作用就是将固件升级包携带的数据写入至固件对应的硬件中。
[0169] 而软件升级由于没有涉及硬件,所以软件升级的过程就是执行软件升级程序,更新存储空间中储存的软件数据等。
[0170] 所以与软件升级不同的是,固件升级需要通过安装程序安装固件升级包(即将固件升级包携带的数据写入至固件对应的硬件中),以此来升级固件。
[0171] 由上述描述可知,本申请提供了一种PE升级文件使得Windows系统和Linux系统均可执行该PE升级文件,实现固件升级包的安装,进而实现固件的升级。
[0172] 对于Windows系统来说,由于没有改变PE升级文件的MZ魔术字和PE头的起始位置字符,所以Windows可以正常执行该PE升级文件,获取该PE升级文件中的Windows解压程序,以通过执行该Windows解压程序解压固件压缩包,并调用固件压缩包中的Windows安装程序安装该固件压缩包。
[0173] 对于Linux系统来说,由于在PE升级文件中的MS-DOS头和MS-DOS Stub中添加了Linux系统可执行的Shell指令,使得Linux系统可以从该PE升级文件中获取Linux解压程序,以通过执行该Linux解压程序解压固件压缩包,并调用固件压缩包中的Linux安装程序安装该固件压缩包。
[0174] 由于Windows系统和Linux系统均可执行该PE升级文件,所以本申请的PE升级文件的兼容性更好。
[0175] 此外,本申请只需开发一个升级文件,就可以实现在不同操作系统的固件升级包的安装,所以可以大大减少开发工作量。并且,用户也不需要区分操作系统来选择升级文件,所以用户体验更好。
[0176] 下面通过具体地例子对本申请提供的固件升级方法进行详细地说明。
[0177] 实施例1:
[0178] 网络设备的操作系统为Linux系统。
[0179] 步骤401:Linux系统加载PE升级文件,解析PE升级文件的MS-DOS头和MS-DOS Stub,并从该MS-DOS头和MS-DOS Stub获取Shell指令。
[0180] 步骤402:Linux系统执行获取到的Shell指令,以基于该Shell指令携带的Linux解压程序在所述PE升级文件的数据区的起始地址,从该PE升级文件的数据区中读取该Linux解压程序。
[0181] 其中,该Linux解压程序可以是Shell解压脚本,这里只是对Linux解压程序进行示例性地说明,不进行具体地限定。
[0182] 步骤403:Linux系统运行读取到的Linux解压程序,以基于该Linux解压程序中的解压代码解压该固件压缩包,得到固件升级包和多个与不同操作系统对应的安装程序。
[0183] 基于该Linux解压程序中的调用代码调用与该Linux系统对应的Linux安装程序。
[0184] 步骤404:Linux系统可运行该Linux安装程序安装该固件升级包,并通过固件升级包升级与该固件升级包对应的固件。
[0185] 实施例2:
[0186] 网络设备的操作系统为Windows系统。
[0187] 步骤501:Windows系统加载PE升级文件,解析PE升级文件的MS-DOS头和MS-DOS Stub,并从该MS-DOS头获取PE头的起始位置。
[0188] 步骤502:Windows系统可依据获取到的PE头的起始地址,读取出PE升级文件的PE头,并解析该PE头,从PE头中读取到Windows解压程序在该PE升级文件的数据区的地址信息。
[0189] 步骤503:Windows系统可基于读取到的地址信息,从该PE升级文件的数据区中读取该Windows解压程序。
[0190] 步骤504:Windows系统运行读取到的Windows解压程序,以基于该Windows解压程序中的解压代码解压该固件压缩包,得到固件升级包和多个与不同操作系统对应的安装程序。
[0191] 基于该Windows解压程序中的调用代码调用与该Windows系统对应的Windows安装程序。
[0192] 步骤505:Windows系统可运行该Windows安装程序安装该固件升级包,并通过固件升级包升级与该固件升级包对应的固件。
[0193] 参见图4,图4是本申请一示例性实施例示出的一种网络设备的硬件结构图。
[0194] 该网络设备包括:通信接口401、处理器402、机器可读存储介质403和总线404;其中,通信接口401、处理器402和机器可读存储介质403通过总线404完成相互间的通信。处理器402通过读取并执行机器可读存储介质403中与固件升级控制逻辑对应的机器可执行指令,可执行上文描述的固件升级方法。
[0195] 本文中提到的机器可读存储介质403可以是任何电子磁性、光学或其它物理存储装置,可以包含或存储信息,如可执行指令、数据,等等。例如,机器可读存储介质可以是:易失存储器非易失性存储器或者类似的存储介质。具体地,机器可读存储介质403可以是RAM(Radom Access Memory,随机存取存储器)、闪存、存储驱动器(如硬盘驱动器)、固态硬盘、任何类型的存储盘(如光盘、DVD等),或者类似的存储介质,或者它们的组合。
[0196] 参见图5,图5是本申请一示例性实施例示出的一种固件升级装置的框图。该装置应用于网络设备,所述装置包括:
[0197] 加载单元501,用于加载升级文件,所述升级文件包括:多个分别与不同操作系统对应的解压程序、固件压缩包;所述固件压缩包包括:固件升级包、多个分别与不同操作系统对应的安装程序;
[0198] 读取单元502,用于在所述升级文件中读取与本网络设备的操作系统对应的解压程序;
[0199] 解压单元503,用于运行读取到的所述解压程序以解压所述固件压缩包,得到固件升级包、多个安装程序,并在所述多个安装程序中调用与所述操作系统对应的安装程序;
[0200] 安装单元504,用于运行所述安装程序安装所述固件升级包,并基于该固件升级包升级固件。
[0201] 可选的,所述升级文件为Windows系统可执行的升级文件;
[0202] 所述升级文件包括:Windows系统对应的Windows解压程序、Linux系统对应的Linux解压程序;所述固件压缩包包括:固件升级包、Windows系统对应的Windows安装程序、Linux系统对应的Linux安装程序;
[0203] 所述Windows解压程序在所述升级文件的数据区中的存储位置在所述固件压缩包、所述Linux解压程序之前。
[0204] 可选的,所述网络设备的操作系统为Linux系统;
[0205] 所述升级文件的第一文件头的预设空间储存有用于读取所述Linux解压程序的Shell指令,所述Shell指令包括:所述Linux解压程序在所述升级文件的数据区的起始地址;
[0206] 所述读取单元502,具体用于解析所述升级文件的第一文件头,识别所述Shell指令;执行所述Shell指令,以基于所述Linux解压程序在所述升级文件的数据区的起始地址,在升级文件的数据区中读取该Linux解压程序。
[0207] 可选的,所述Windows系统可执行的升级文件为PE升级文件;
[0208] 所述第一文件头为所述PE升级文件的MS-DOS头和MS-DOS Stub;
[0209] 所述升级文件的第一文件头的预设空间为所述MS-DOS头中从第3字节开始至第60字节止所指示的空间、以及MS-DOS Stub中的所有空间。
[0210] 可选的,所述网络设备的操作系统为Windows系统;
[0211] 所述读取单元502,具体用于基于所述升级文件的第二文件头中记录的所述Windows解压程序在所述升级文件的数据区的地址信息,从该升级文件的数据区读取所述Windows解压程序。
[0212] 可选的,所述Windows系统可执行的升级文件为PE升级文件;
[0213] 所述第二文件头为所述PE升级文件的PE头。
[0214] 上述装置中各个单元的功能和作用的实现过程具体详见上述方法中对应步骤的实现过程,在此不再赘述。
[0215] 对于装置实施例而言,由于其基本对应于方法实施例,所以相关之处参见方法实施例的部分说明即可。以上所描述的装置实施例仅仅是示意性的,其中所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部模来实现本申请方案的目的。本领域普通技术人员在不付出创造性劳动的情况下,即可以理解并实施。
[0216] 以上所述仅为本申请的较佳实施例而已,并不用以限制本申请,凡在本申请的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本申请保护的范围之内。
高效检索全球专利

专利汇是专利免费检索,专利查询,专利分析-国家发明专利查询检索分析平台,是提供专利分析,专利查询,专利检索等数据服务功能的知识产权数据服务商。

我们的产品包含105个国家的1.26亿组数据,免费查、免费专利分析。

申请试用

分析报告

专利汇分析报告产品可以对行业情报数据进行梳理分析,涉及维度包括行业专利基本状况分析、地域分析、技术分析、发明人分析、申请人分析、专利权人分析、失效分析、核心专利分析、法律分析、研发重点分析、企业专利处境分析、技术处境分析、专利寿命分析、企业定位分析、引证分析等超过60个分析角度,系统通过AI智能系统对图表进行解读,只需1分钟,一键生成行业专利分析报告。

申请试用

QQ群二维码
意见反馈