机架式服务器系统的固件更新方法及其装置制造方法
【专利摘要】本发明公开了一种机架式服务器系统的固件更新方法,适用于通过一控制芯片模组更新一待更新芯片模组的固件,所述更新方法包括以下步骤:通过所述控制芯片模组发送可形成一更新固件的多个数据包给所述待更新芯片模组;通过所述控制芯片模组发送一验证所述多个数据包的命令至所述待更新芯片模组;通过所述控制芯片模组从所述待更新芯片模组获得所述多个数据包对应的多个验证信息;通过所述控制芯片模组判断所述多个数据包对应的多个验证信息是否全部正确,以确认所述待更新芯片模组收到的所述多个数据包是否出错。本发明能够有效解决现有技术中更新固件缓慢和耗时较长的问题,从而可以节省大量更新时间,使得更新固件的速度大幅提升。
【专利说明】机架式服务器系统的固件更新方法及其装置
【技术领域】
[0001] 本发明涉及服务器架构领域,具体的说,是一种机架式服务器系统的固件更新方 法及其装置,适用于通过一控制芯片模组更新一待更新芯片模组的固件。
【背景技术】
[0002] 目前服务器广为各企业所使用,发展的范围除了结合国际网络与电信业务的应用 夕卜,也更深入到普通人的生活中,例如金融、财经、网络银行等,这些都必须依托服务器强大 的运算能力。
[0003] 如今服务器的种类有很多种,比较常见的有机架式服务器与塔式服务器。其中,机 架服务器是一种优化结构的塔式服务器,其设计宗旨主要是为了尽可能减少服务器空间的 占用。一般而言,机架服务器的宽度为19英寸,高度以U为单位(1U = 44. 45毫米),通常 有1U,2U,4U,5U等几种标准的服务器。而为了要提升目前服务器的基板的应用层面,系统 厂商通常会将服务器的基板设计成可以与各种类型(例如1U,2U及4U)的系统相容。
[0004] 而在服务器机架系统中的主板包含了多种嵌入式芯片(例如作为控制芯片、计算 功耗芯片的Cortex-M3或Cortex-4芯片等),这些嵌入式芯片都需要固件来配合运行。倘 若在服务器机架系统出货之后,需要更新上述芯片的固件,可以采用的做法是通过一设置 在服务器机架内的机架管理控制器(Rack Management Controller,简称RMC)来进行更新。 该机架管理控制器包括一 ARM9芯片,且运行于一嵌入式Linux系统。当需要更新服务器机 架系统中某一主板的嵌入式芯片的固件时,由机架管理控制器读取固件文件,并且将固件 文件分解成若干个数据包发送至待更新的芯片。在现有的更新方法中,每发送一个数据包, 机架管理控制器均会等待芯片的返回,并且检查数据包CRC是否正确,若正确才会发送下 一个数据包。于是,目前更新芯片固件比较缓慢,用时较长。
[0005] 有鉴于此,亟需提供一种新的机架式服务器系统的固件更新方法或装置来解决上 述问题。
【发明内容】
[0006] 本发明的目的在于,提供一种机架式服务器系统的固件更新方法,其能够有效解 决现有技术中更新固件缓慢和耗时较长的问题,从而可以节省大量更新时间,使得更新固 件的速度大幅提升。
[0007] 为实现上述目的,本发明提供一种机架式服务器系统的固件更新方法,适用于通 过一控制芯片模组更新一待更新芯片模组的固件,所述控制芯片模组为一机架式服务器系 统的一机架管理控制器,所述机架式服务器系统包括连接所述机架管理控制器的至少一服 务器,所述至少一服务器包含所述待更新芯片模组,所述机架管理控制器可控制所述至少 一服务器的开机与关机,所述更新方法包括以下步骤:通过所述控制芯片模组发送可形成 一更新固件的多个数据包给所述待更新芯片模组;通过所述控制芯片模组发送一验证所述 多个数据包的命令至所述待更新芯片模组;通过所述控制芯片模组从所述待更新芯片模组 获得所述多个数据包对应的多个验证信息;通过所述控制芯片模组判断所述多个数据包对 应的多个验证信息是否全部正确,以确认所述待更新芯片模组收到的所述多个数据包是否 出错。
[0008] 作为可选的技术方案,在通过所述控制芯片模组判断所述多个数据包对应的多个 验证信息是否正确的步骤中,包括:若其中有验证信息不正确,进一步包括:a、通过所述控 制芯片模组将出错的验证信息所对应的数据包重新发送给所述待更新芯片模组;b、通过所 述控制芯片模组从所述待更新芯片模组获得重新发送给所述待更新芯片模组的数据包对 应的验证信息;c、通过所述控制芯片模组判断重新发送给所述待更新芯片模组的数据包对 应的验证信息是否正确;若正确,则所述控制芯片模组重新发送给所述待更新芯片模组的 数据包没有出错,若不正确,循环执行步骤a、b、c,直到所述控制芯片模组从所述待更新芯 片模组获得的验证信息中不存在错误的验证信息。
[0009] 作为可选的技术方案,在通过所述控制芯片模组发送可形成一更新固件的多个数 据包给所述待更新芯片模组的步骤之前,进一步包括通过所述控制芯片模组将更新固件分 解成所述多个数据包。
[0010] 作为可选的技术方案,在通过所述控制芯片模组判断所述多个数据包对应的多个 验证信息是否正确的步骤中,包括:若所述多个验证信息正确,则待更新芯片模组收到的各 数据包没有出错。
[0011] 作为可选的技术方案,所述待更新芯片模组是一具有固件的芯片,所述具有固件 的芯片设置于一服务器的一主板上。
[0012] 作为可选的技术方案,通过所述控制芯片模组发送可形成一更新固件的多个数据 包给所述待更新芯片模组的步骤之前进一步包括:通过所述控制芯片模组发送一更新开始 命令至所述待更新芯片模组;通过所述控制芯片模组从所述待更新芯片模组获得一运行状 态信息;通过所述控制芯片模组判断所述运行状态信息是否为一第一运行状态,若不是,则 所述待更新芯片模组切换为第一运行状态。
[0013] 作为可选的技术方案,在通过所述控制芯片模组发送一更新开始命令至所述待更 新芯片模组的步骤之后进一步包括:通过所述控制芯片模组从所述待更新芯片模组等待接 收一运行状态信息;若等待接收的时间超过一预设的第一时间阈值时,则所述控制芯片模 组重新发送一更新开始命令至所述待更新芯片模组,并且记录重新发送更新开始命令的次 数。
[0014] 作为可选的技术方案,在所述控制芯片模组重新发送一更新开始命令至所述待更 新芯片模组,并且记录重新发送更新开始命令的次数的步骤之后,进一步包括:通过所述控 制芯片模组判断重新发送更新开始命令的次数是否大于一预设的重发次数最大值;若是, 则停止更新固件的操作。
[0015] 作为可选的技术方案,在所述控制芯片模组从所述待更新芯片模组获得的验证信 息中不存在错误的验证信息的步骤之后,进一步包括:通过所述控制芯片模组发送一完成 更新固件的命令至所述待更新芯片模组;通过所述控制芯片模组从所述待更新芯片模组获 得一完成更新固件的响应,所述待更新芯片模组已标记为一固件更新成功状态。
[0016] 本发明的另一目的在于,提供一种固件更新装置,适用于通过一控制芯片模组更 新一待更新芯片模组的固件,所述控制芯片模组为一机架式服务器系统的一机架管理控制 器,所述机架式服务器系统包括连接所述机架管理控制器的至少一服务器,所述至少一服 务器包含所述待更新芯片模组,所述机架管理控制器可控制所述至少一服务器的开机与关 机,所述固件更新装置包括:数据包发送模块,用以通过所述控制芯片模组发送可形成一更 新固件的多个数据包给所述待更新芯片模组;验证信息请求模块,与所述数据包发送模块 相连,用以通过所述控制芯片模组发送一验证所述多个数据包的命令至所述待更新芯片模 组;验证信息获取模块,与所述验证信息请求模块相连,用以通过所述控制芯片模组从所述 待更新芯片模组获得所述多个数据包对应的多个验证信息;验证信息判断模块,与所述验 证信息获取模块相连,用以通过所述控制芯片模组判断所述多个数据包对应的多个验证信 息是否全部正确,以确认所述待更新芯片模组收到的所述多个数据包是否出错。
[0017] 作为可选的技术方案,所述固件更新装置进一步包括:数据包重发模块,与所述验 证信息判断模块相连,用于在所述多个验证信息中有验证信息不正确,通过所述控制芯片 模组将出错的验证信息所对应的数据包重新发送给所述待更新芯片模组;验证信息重获模 块,与所述数据包重发模块相连,用于通过所述控制芯片模组从所述待更新芯片模组获得 重新发送给所述待更新芯片模组的数据包对应的验证信息;验证信息重判模块,与所述验 证信息重获模块相连,用于通过所述控制芯片模组判断重新发送给所述待更新芯片模组的 数据包对应的验证信息是否正确,当验证信息不正确时,调用所述数据包重发模块。
[0018] 作为可选的技术方案,所述待更新芯片模组是一具有固件的芯片,所述具有固件 的芯片设置于一服务器的一主板上。
[0019] 作为可选的技术方案,所述固件更新装置进一步包括:更新开始命令发送模块,用 以通过所述控制芯片模组发送一更新开始命令至所述待更新芯片模组;运行状态获取模 块,与所述更新开始命令发送模块相连,用以通过所述控制芯片模组从所述待更新芯片模 组获得一运行状态信息;运行状态判断模块,与所述运行状态获取模块相连,用以通过所述 控制芯片模组判断所述运行状态信息是否为一第一运行状态,若不是,则所述待更新芯片 模组切换为第一运行状态。
[0020] 作为可选的技术方案,所述固件更新装置进一步包括:等待接收模块,用以通过所 述控制芯片模组从所述待更新芯片模组等待接收一运行状态信息;更新开始命令重发模 块,与所述等待接收模块相连,用以若等待接收的时间超过一预设的第一时间阈值时,则所 述控制芯片模组重新发送一更新开始命令至所述待更新芯片模组,并且记录重新发送更新 开始命令的次数。
[0021] 作为可选的技术方案,所述固件更新装置进一步包括:重发次数判断模块,用以通 过所述控制芯片模组判断重新发送更新开始命令的次数是否大于一预设的重发次数最大 值,若是,则停止更新固件的操作。
[0022] 作为可选的技术方案,所述固件更新装置进一步包括:完成更新请求模块,用以通 过所述控制芯片模组发送一完成更新固件的命令至所述待更新芯片模组;完成更新响应模 块,与所述完成更新请求模块相连,用以通过所述控制芯片模组从所述待更新芯片模组获 得一完成更新固件的响应,所述待更新芯片模组已标记为一固件更新成功状态。
[0023] 本发明的优点在于,通过所述机架式服务器系统的固件更新方法及其装置,能够 有效解决现有技术更新芯片固件缓慢和耗时较长的问题,从而可以节省大量更新时间,提 升更新固件的速度,以进一步提高升级工作的效率。
【专利附图】
【附图说明】
[0024] 图1是本发明一实施例中机架式服务器系统的固件更新方法的具体实施步骤流 程不意图。
[0025] 图2是现有机架式服务器系统的固件更新方法的信息交互示意图。
[0026] 图3是本发明所述机架式服务器系统的固件更新方法的信息交互示意图。
[0027] 图4是本发明一实施例中所述固件更新装置所在服务器的架构示意图。
[0028] 图5是本发明一实施例中所述固件更新装置的架构图。
【具体实施方式】
[0029] 下面结合附图对本发明提供的所述机架式服务器系统的固件更新方法及其装置 的具体实施做详细说明。
[0030] 图1是本发明一实施例中机架式服务器系统的固件更新方法具体实施步骤流程 示意图。参见图1所示,本发明提供一种机架式服务器系统的固件更新方法,适用于通过一 控制芯片模组更新一待更新芯片模组的固件。在本实施例中,所述控制芯片模组为一机架 式服务器系统的一机架管理控制器(Rack Management Controller,简称RMC),以对待更新 芯片模组所具有固件的芯片进行固件更新。所述机架式服务器系统包括连接所述机架管理 控制器的至少一服务器,所述至少一服务器包含所述待更新芯片模组,所述机架管理控制 器可控制所述至少一服务器的开机与关机。所述机架管理控制器具有一 ARM系列芯片(例 如ARM9芯片)且运行着一嵌入式Linux系统,但不以此限定本发明请求保护的范围。在其 他实施例中,所述控制芯片模组也可以为一服务器的一基板管理控制器,所述基板管理控 制器可控制所述服务器的开机与关机,所述服务器包含所述待更新芯片模组。此外,所述待 更新芯片模组是一具有固件的芯片,所述具有固件的芯片设置于一服务器的一主板上。所 述待更新芯片模组可以控制风扇转速的控制芯片,或可以计算功耗的芯片等。所述机架管 理控制器将所取得的供更新使用的固件分解成若干个数据包,以便后续发送给需要更新的 节点。
[0031] 本发明所述机架式服务器系统的固件更新方法包括以下步骤:步骤S101、通过所 述控制芯片模组发送一更新开始命令至所述待更新芯片模组;步骤S103、通过所述控制芯 片模组从所述待更新芯片模组获得一运行状态信息;步骤S105、通过所述控制芯片模组判 断所述运行状态信息是否为一第一运行状态,若不是,则所述待更新芯片模组切换为第一 运行状态;步骤S110、通过所述控制芯片模组发送可形成一更新固件的多个数据包给所述 待更新芯片模组;步骤S120、通过所述控制芯片模组发送一验证所述多个数据包的命令至 所述待更新芯片模组;步骤S130、通过所述控制芯片模组从所述待更新芯片模组获得所述 多个数据包对应的多个验证信息;步骤S140、通过所述控制芯片模组判断所述多个数据包 对应的多个验证信息是否全部正确,以确认所述待更新芯片模组收到的所述多个数据包是 否出错;步骤S151、通过所述控制芯片模组将出错的验证信息所对应的数据包重新发送给 所述待更新芯片模组;步骤S153、通过所述控制芯片模组从所述待更新芯片模组获得重新 发送给所述待更新芯片模组的数据包对应的验证信息;步骤S155、通过所述控制芯片模组 判断重新发送给所述待更新芯片模组的数据包对应的验证信息是否正确;若正确,则所述 控制芯片模组重新发送给所述待更新芯片模组的数据包没有出错,若不正确,循环执行步 骤3151、3153、3155,直到所述控制芯片模组从所述待更新芯片模组获得的验证信息中不存 在错误的验证信息;步骤S161、通过所述控制芯片模组发送一完成更新固件的命令至所述 待更新芯片模组;步骤S163、通过所述控制芯片模组从所述待更新芯片模组获得一完成更 新固件的响应,所述待更新芯片模组已标记为一固件更新成功状态。
[0032] 以下将对上述步骤进一步详细描述。
[0033] 在步骤S101中,所述控制芯片模组发送一更新开始命令至所述待更新芯片模组, 以尝试与所述待更新芯片模组建立一物理链路。其中,所述待更新芯片模组为一具有固件 的芯片,具有固件的芯片设置于一服务器的一主板上。所述更新开始命令中包含更新固件 应用程序的首地址、每一数据包的大小以及数据包的数量等信息。当发送该更新开始命令 后,表示准备开始更新固件,并且等待所述待更新芯片模组的回复。
[0034] 在步骤S103中,在所述待更新芯片模组接收到更新开始命令后,通过所述控制芯 片模组等待接收从所述待更新芯片模组返回的一运行状态信息,所述运行状态信息也就是 设置在待更新芯片模组的芯片所属的主板的当前运行状态,包括bootcode和runtime两种 运行状态,bootcode运行状态用于更新固件操作,而runtime运行状态用于主板正常工作。
[0035] 在步骤S105中,接着,通过所述控制芯片模组判断所述运行状态信息是否为一第 一运行状态(即能够进行更新固件的状态,例如bootcode运行状态),若设置在待更新芯片 模组的芯片所属的主板的当前运行状态为runtime运行状态,则自动切换至bootcode运行 状态,从而为后继的更新固件做好准备。即,bootcode运行状态能够进行更新固件,runtime 运行状态不能够进行更新固件。需注意的是,若所述控制芯片模组判断等待接收的时间超 过一预设的第一时间阈值时,则所述控制芯片模组重新发送一更新开始命令至所述待更新 芯片模组,并且记录重新发送更新开始命令的次数。进一步,所述控制芯片模组判断重新发 送更新开始命令的次数是否大于一预设的重发次数最大值,若是,则停止更新固件的操作。 为了保证更新固件工作的效率,在本发明的实施例中,设有一重发次数最大值,例如3次, 若重新发送更新开始命令的次数超过3次后,停止建立物理链接,即停止更新固件操作。上 述步骤S101?S105是可选步骤,用于使所述控制芯片模组尝试与所述待更新芯片模组建 立物理链接。由于可能受环境因素(例如网络环境)的影响,不能保证所述控制芯片模组 首次就能够与所述待更新芯片模组成功建立物理链接,因此允许所述控制芯片模组多次尝 试与所述待更新芯片模组建立物理链接。
[0036] 在步骤S110中,通过所述控制芯片模组发送可形成一更新固件的多个数据包给 所述待更新芯片模组,并且开始连续不中断的发送多个包含更新固件的数据包给所述待更 新芯片模组,直至所述多个数据包发送完毕。在通过所述控制芯片模组发送可形成一更新 固件的多个数据包给所述待更新芯片模组的步骤之前,进一步包括通过所述控制芯片模组 将更新固件分解成所述多个数据包。当需要更新所述待更新芯片模组(例如服务器机架系 统中任一主板的嵌入式芯片的固件)时,所述控制芯片模组首先读取更新固件,然后将所 述更新固件拆分为多个数据包,以准备之后发送至所述待更新芯片模组。在本发明的实施 例中,所述控制芯片模组会先发送一更新固件的命令(例如,SET FW IMAGE命令)至所述 待更新芯片模组,接着开始连续不中断的发送多个包含更新固件的数据包给所述待更新芯 片模组(即待更新固件的芯片的引导代码bootcode),直至所述多个数据包发送完毕,以保 证所述更新固件的数据包能够被快速且可靠的传输。
[0037] 在步骤S120中,通过所述控制芯片模组发送一验证所述多个数据包的命令至所 述待更新芯片模组,以验证待更新芯片模组所接收的所述多个数据包是否正确(由于在传 送过程中数据包可能会出错)。当更新固件被拆分为多个数据包进行传送时,需要对所传送 的多个数据包进行CRC(即Cyclic Redundancy Check的缩写,循环冗余校验)验证,以保 证所传送的更新固件的完整性和可靠性。在本发明的实施例中,通过发送一验证所述多个 数据包的命令(例如,CHECK FW IMAGE命令)至所述待更新芯片模组,以获取所述多个数 据包的多个验证信息。同时,经研究,发现现有技术造成目前更新芯片固件缓慢和耗时较长 的原因在于,在现有机架式服务器系统的固件更新方法中,控制芯片模组每次发送一个数 据包给待更新芯片模组,都会等待所述待更新芯片模组(即设置在待更新芯片模组中的芯 片)返回单个被传送数据包的CRC信息,然后控制芯片模组再检查该单个数据包的CRC信 息是否正确,若正确才会再依次发送下一个数据包,若不正确则重新发送该单个数据包。由 于每发送完一个数据包后均需要等待所述待更新芯片模组的响应,若数据包较多(即更新 固件较大),于是会花费较长的等待时间,以至造成现有技术更新芯片固件缓慢和耗时较长 的情况。而在本发明的实施例中,所述控制芯片模组将不再每发送一个数据包后等待待更 新芯片模组的响应,而是连续不中断且一次性将所有数据包全部发送完毕,再检验所述多 个数据包的多个CRC信息(包括正确及出错的全部CRC信息)。
[0038] 在步骤S130中,通过所述控制芯片模组接收从所述待更新芯片模组返回的所述 多个数据包的多个验证信息。
[0039] 在步骤S140中,通过所述控制芯片模组判断所述多个数据包对应的多个验证信 息是否全部正确。若其中某个验证信息不正确,则说明其所对应的数据包出错。若不正确, 则控制芯片模组会进一步发送一重新更新固件的命令(例如,RE-SET FW IMAGE命令)至 所述待更新芯片模组,并且将其中出错的数据包重新发送给所述待更新芯片模组,具体步 骤如下文所述。
[0040] 在步骤S140之后进一步包括:步骤S151、通过所述控制芯片模组将出错的验证信 息所对应的所有出错的数据包重新统一发送给所述待更新芯片模组;步骤S153、通过所述 控制芯片模组从所述待更新芯片模组获得重新发送给所述待更新芯片模组的数据包对应 的验证信息;步骤S155、通过所述控制芯片模组判断重新发送给所述待更新芯片模组的数 据包对应的验证信息是否正确;若正确,则所述控制芯片模组重新发送给所述待更新芯片 模组的数据包没有出错,若不正确,循环执行步骤3151、3153、3155,直到所述控制芯片模组 从所述待更新芯片模组获得的验证信息中不存在错误的验证信息(即多个验证信息为全 部正确)。
[0041] 通过循环执行步骤S151、S153和S155,以保证所述多个数据包均正确,即所述芯 片所获得的更新固件是正确的。另外,在将其中所有出错的数据包一次性地重新发送的过 程中,重新发送的数据包个数为当前出错的数据包的最大值,并且等待一次响应。例如总 共出错的数据包为3个,则将该3个出错的数据包再一次统一的发送,并且等待1次响应。 而在现有技术中,重新发送数据包次数为当前出错的数据包个数的累加值,并且等待多次 响应。例如,总共出错的数据包为3个,则第一次将第一个数据包进行重发,并且等待第一 次响应,第二次将第二数据包进行重发,并且等待第二次响应,第三次将第三数据包进行重 发,并且等待第三次响应。因此本发明能够有效地解决在发送多个数据包过程中繁琐地等 待待更新芯片模组响应这一步骤,从而节约大量时间,提升了固件更新速度。
[0042] 在步骤S155之后,可以进一步包括:步骤S161、通过所述控制芯片模组发送一完 成更新固件的命令至所述待更新芯片模组;步骤S163、通过所述控制芯片模组从所述待更 新芯片模组获得一完成更新固件的响应,所述待更新芯片模组已标记为一固件更新成功状 态。
[0043] 当所述多个数据包的多个验证信息全部正确之后,所述控制芯片模组发送一完成 更新固件的命令(例如,COMPLETE命令)至所述待更新芯片模组。所述待更新芯片模组接 收到完成更新固件的命令后,更新固件标识(例如flag = 1,表示固件更新成功,同时该标 识也用于bootcode/runtime运行状态的切换,因此该标识也可以被称为切换模式标识), 并执行固件更新应用程序,之后并返回一完成更新固件的响应至控制芯片模组。在执行固 件更新应用程序过程中,提供两种方式。优选的,一种方式是设置在所述待更新芯片模组中 的芯片先将所有数据包在随机存取内存(即RAM)中收集,然后再写入只读内存(即ROM) 中,以更新固件。另一种方式是所述芯片一边在RAM中收集数据包,一边将其写入至ROM 中,从而完成更新固件的操作。所述控制芯片模组接收到从所述待更新芯片模组返回的一 完成更新固件的响应后,表示所述固件更新已完成。需注意的是,设置在待更新芯片模组的 芯片所属的主板重新启动后,会自动检查更新固件标识,若发现flag = 1时,会自动切换至 runtime运行状态。
[0044] 以下将提供一实施例,并结合图2和图3来进一步说明本发明所述机架式服务器 系统的固件更新方法及现有技术机架式服务器系统的固件更新方法。
[0045] 图2是现有机架式服务器系统的固件更新方法的信息交互示意图。图3是本发明 所述机架式服务器系统的固件更新方法的信息交互示意图。
[0046] 参考图2所示,假设发送一个数据包需要1秒,等待响应需要1S,一共发送10个 包。
[0047] 步骤S211 :通过控制芯片模组发送第一个数据包至待更新芯片模组。
[0048] 步骤S212 :通过控制芯片模组发送数据包验证信息命令至待更新芯片模组。
[0049] 步骤S213 :通过控制芯片模组接收第一个数据包的验证信息。
[0050] 步骤S214 :通过控制芯片模组判断验证信息是否正确,若正确,则发送第二个数 据包。
[0051] 步骤S215 :通过控制芯片模组发送第N个数据包至待更新芯片模组,其中N为小 于10。
[0052] 步骤S216 :通过控制芯片模组发送第N个数据包的验证信息命令至待更新芯片模 组。
[0053] 步骤S217 :通过控制芯片模组接收第N个数据包的验证信息。
[0054] 步骤S218 :通过控制芯片模组判断该第N个数据包的验证信息是否正确,若不正 确,重新发送第N个数据包。
[0055] 步骤S219 :通过控制芯片模组再次判断第N个数据包的验证信息是否正确,若正 确,则发送第N+1个数据包。
[0056] 因此,由上述流程可知,若发送10个数据包过程中,未有出错包的情况下,需花时 间约为20秒。当出错1个数据包的情况下,需花时间约为20秒+1秒+1秒(即22秒)。 当出错2个数据包的情况下,需花时间约为20秒+2秒+2秒(即24秒)。当出错3个数据 包的情况下,需花时间约为20秒+3秒+3秒(即26秒)。当出错N个数据包的情况下,需 花时间约为20秒+N秒+N秒(即20秒+2N秒)。
[0057] 接着,参考图3所示,假设序列式地发送10个数据包需要1秒,等待响应需要1S, 一共发送10个包。
[0058] 步骤S311 :通过控制芯片模组发送10个数据包至待更新芯片模组。
[0059] 步骤S312 :通过控制芯片模组发送10个数据包的验证信息命令至待更新芯片模 组。
[0060] 步骤S313 :通过控制芯片模组接收10个数据包的验证信息。
[0061] 步骤S314 :通过控制芯片模组判断10个数据包的验证信息是否正确,若发现有3 个数据包不正确,则将其中出错的3个数据包进行第一次的重新发送。
[0062] 步骤S315 :通过控制芯片模组再次判断所述出错的3个包的验证信息是否正确, 若正确,则表示完成更新固件的传送,若仍然发现有2个包的验证信息不正确,则将出错的 2个数据包进行第二次的重新发送。
[0063] 步骤S316 :通过控制芯片模组再次判断所述出错的2个包的验证信息是否正确, 若正确,则表示完成更新固件的传送,若仍然发现有1个包的验证信息不正确,则将出错的 1个数据包进行第三次的重新发送。
[0064] 步骤S317 :通过控制芯片模组再次判断所述出错的1个包的验证信息是否正确, 若正确,则表示完成更新固件的传送。
[0065] 因此,由上述流程可知,若发送10个数据包过程中,未有出错包的情况下,需花时 间近似为2秒(假设认为发送1个数据包的时间相当于同时发送10个数据包的时间。在 实务操作中,考虑到数据包自身数据的大小以及网络环境,同时发送10个数据包的时间应 稍大于发送1个数据包的时间)。当第1次有数据包出错的情况下,需花时间约为2秒+1 秒+1秒(即4秒)。当第2次有数据包出错的情况下,需花时间约为4秒+1秒+1秒(即 6秒)。当第3次有数据包出错的情况下,需花时间约为6秒+1秒+1秒(即8秒)。当第 N次有数据包出错的情况下,需花时间约为2N秒+1秒+1秒(即2N+2秒)。
[0066] 因此,上述内容可知,本发明在将所有出错的数据包一次性地重新发送的过程中, 重新发送的数据包个数为当前出错的数据包的最大值,并且等待一次响应。而在现有技术 中,重新发送数据包次数为当前出错的数据包个数的累加值,并且等待多次响应。于是,本 发明能够有效地解决在发送多个数据包过程中繁琐地等待所述待更新芯片模组响应这一 步骤,从而节约大量时间,提升了固件更新速度。
[0067] 图4是本发明一实施例中所述固件更新装置所在服务器的架构示意图。参见图4 所示,根据本发明一实施例,本发明所述一种固件更新装置500,适用于通过一控制芯片模 组410更新一待更新芯片模组420的固件。在本实施例中,所述控制芯片模组410为一机 架式服务器系统400的一机架管理控制器,以对待更新芯片模组420所具有固件的芯片430 进行固件更新。所述机架式服务器系统400包括连接所述机架管理控制器的至少一服务器 (图中未示),所述至少一服务器包含所述待更新芯片模组420,所述机架管理控制器可控 制所述至少一服务器的开机与关机。所述机架管理控制器具有一 ARM系列芯片且运行着一 嵌入式Linux系统,但不以此限定本发明请求保护的范围。在其他实施例中,所述控制芯片 模组410也可以为一服务器(图中未示)的一基板管理控制器,所述基板管理控制器可控 制所述服务器的开机与关机,所述服务器包含所述待更新芯片模组420。此外,所述待更新 芯片模组420是一具有固件的芯片430,所述具有固件的芯片430设置于一服务器的一主板 (图中未示)上。
[0068] 图5是本发明一实施例中所述固件更新装置的架构图。参见图5及图4所示,所 述固件更新装置500包括:一数据包发送模块510、一验证信息请求模块520、一验证信息获 取模块530和一验证信息判断模块540。在本发明一实施例中,所述固件更新装置500可以 设置在控制芯片模组内,用于对一服务器机架系统中的至少一主板的至少一芯片进行固件 更新。而在其他实施例中,所述固件更新装置500也可以设置在服务器机架系统的其他设 备内,以对至少一主板的至少一芯片进行固件更新,当然,所述固件更新装置500也可以是 独立一体的。
[0069] 其中,数据包发送模块510,用以通过所述控制芯片模组410发送可形成一更新固 件的多个数据包给所述待更新芯片模组420。在本发明一实施例中,所述固件更新装置500 会首先发送一更新固件的命令至所述待更新芯片模组420,接着开始连续不中断的发送多 个包含更新固件的数据包给所述待更新芯片模组420。所述控制芯片模组410与所述待更 新芯片模组420之间的传输通道带宽有限,对传输资料的大小具有限制,因此需要将更新 固件拆分为多个数据包后进行发送,直至所述多个数据包发送完毕。
[0070] 所述验证信息请求模块520,与所述数据包发送模块510相连,用以通过所述控制 芯片模组410发送一验证所述多个数据包的命令至所述待更新芯片模组420。由于更新固 件被拆分为多个数据包进行传送,因此需要对所传送的多个数据包进行CRC验证,以保证 所传送的更新固件的完整性和可靠性。
[0071] 所述验证信息获取模块530,与所述验证信息请求模块520相连,用以通过所述控 制芯片模组410从所述待更新芯片模组420获得所述多个数据包对应的多个验证信息。
[0072] 所述验证信息判断模块540,与所述验证信息获取模块530相连,用以通过所述控 制芯片模组410判断所述多个数据包对应的多个验证信息是否全部正确,以确认所述待更 新芯片模组420收到的所述多个数据包是否出错。
[0073] 所述固件更新装置500进一步包括:数据包重发模块551、验证信息重获模块552 和验证信息重判模块553。其中所述数据包重发模块551,与所述验证信息判断模块540相 连,用于在所述多个验证信息中有验证信息不正确,通过所述控制芯片模组410将出错的 验证信息所对应的数据包重新发送给所述待更新芯片模组420。亦即,当所述控制芯片模 组410在获得所述多个数据包的多个验证信息后,若发现所述多个数据包的验证信息存有 错误,所述固件更新装置500会将其中所有出错的数据包统一重新发送至所述待更新芯片 模组420。验证信息重获模块552,与所述数据包重发模块551相连,用于通过所述控制芯 片模组410从所述待更新芯片模组420获得重新发送给所述待更新芯片模组420的数据包 对应的验证信息。验证信息重判模块553,与所述验证信息重获模块552相连,用于通过所 述控制芯片模组410判断重新发送给所述待更新芯片模组420的数据包对应的验证信息是 否正确,当验证信息不正确时,调用所述数据包重发模块。亦即,在将所有出错的数据包统 一重新发送的过程中,若其中所述多个数据包的多个验证信息仍存有错误,则继续将其中 出错的数据包再一次重新发送至所述待更新芯片模组420,直至验证所述多个数据包全部 正确为止。
[0074] 在将其中所有出错的数据包一次性地重新发送的过程中,重新发送的数据包个数 为当前出错的数据包的最大值,并且等待一次响应。而现有技术是重新发送数据包次数为 当前出错的数据包个数的累加值,并且等待多次响应。因此本发明能够有效地解决在发送 多个数据包过程中繁琐地等待响应,从而节约大量时间,提升了固件更新速度。
[0075] 根据本发明一实施例,所述固件更新装置500还可以包括:一更新开始命令发送 模块501、一运行状态获取模块505和一运行状态判断模块506。所述更新开始命令发送模 块501、运行状态获取模块505和运行状态判断模块506为可选组件。
[0076] 其中,所述更新开始命令发送模块501,用以通过所述控制芯片模组410发送一更 新开始命令至所述待更新芯片模组420。通过发送更新开始命令,以尝试与所述待更新芯片 模组420建立一物理链路。同时该更新开始命令中包含更新固件应用程序的首地址、每一 数据包的大小以及数据包的数量等信息。当发送该更新开始命令后,表示准备开始更新固 件,并且等待所述待更新芯片模组420的响应。
[0077] 所述运行状态获取模块505,用以通过所述控制芯片模组410从所述待更新芯片 模组420获得一运行状态信息。在本发明的实施例中,所述运行状态获取模块505与一重 发次数判断模块504 (下文有详述)相连,而在其他实施例中,所述运行状态获取模块505 可以直接与更新开始命令发送模块501相连(如图5中虚线连接所示)。所述运行状态判 断模块506,与所述运行状态获取模块505相连,用以通过所述控制芯片模组410判断所述 运行状态信息是否为一第一运行状态,若不是,则所述待更新芯片模组420切换为第一运 行状态。
[0078] 所述固件更新装置500进一步可以包括以下可选组件:一等待接收模块502、一更 新开始命令重发模块503以及一重发次数判断模块504。
[0079] 其中,所述等待接收模块502,与更新开始命令发送模块501相连,用以通过所述 控制芯片模组410从所述待更新芯片模组420等待接收一运行状态信息。当所述待更新芯 片模组420接收到更新开始命令后,所述待更新芯片模组420返回设置在所述待更新芯片 模组420中的芯片所属的主板的当前运行状态,包括bootcode和runtime两种运行状态, bootcode运行状态用于更新固件操作,而runtime运行状态用于主板正常工作。所述控制 芯片模组410会判断所述运行状态信息是否为一预设的第一运行状态(例如bootcode运 行状态)。若设置在待更新芯片模组420中的芯片所属的主板的当前运行状态为runtime 运行状态,则自动切换至bootcode运行状态,从而为后继的固件更新做好准备。
[0080] 所述更新开始命令重发模块503,与所述等待接收模块502相连,用以若等待接收 的时间超过一预设的第一时间阈值时,则所述控制芯片模组410重新发送一更新开始命令 至所述待更新芯片模组420,并且记录重新发送更新开始命令的次数。
[0081] 所述重发次数判断模块504,与所述更新开始命令重发模块503相连,用以通过所 述控制芯片模组410判断重新发送更新开始命令的次数是否大于一预设的重发次数最大 值,若是,则停止更新固件的操作。所述固件更新装置500尝试与所述待更新芯片模组420 建立物理链接,由于可能受环境因素(例如网络环境)的影响,不能保证所述固件更新装置 500首次就能够与所述待更新芯片模组420成功建立物理链接,因此允许所述固件更新装 置500多次地尝试与所述待更新芯片模组420建立物理链接。为了保证更新固件工作的效 率,设有一重发次数最大值,例如3次,若重新发送更新开始命令的次数超过3次后,停止建 立物理链接,即停止更新固件操作。
[0082] 所述固件更新装置500还可以包括以下可选组件:一完成更新请求模块561和一 完成更新响应模块562。其中,所述完成更新请求模块561,用以通过所述控制芯片模组410 发送一完成更新固件的命令至所述待更新芯片模组420。
[0083] 所述完成更新响应模块562,与所述完成更新请求模块561相连,通过所述控制芯 片模组410从所述待更新芯片模组420获得一完成更新固件的响应,所述待更新芯片模组 420已标记为一固件更新成功状态。亦即,当设置在所述待更新芯片模组420中的芯片接 收到完成更新固件的命令后,所述芯片会更新固件标识(例如flag = 1,表示固件更新成 功,同时该标识也用于bootcode/runtime运行状态的切换,因此该标识也可以被称为切换 模式标识),并且执行固件更新应用程序,之后返回一完成更新固件的响应至所述控制芯片 模组410。
[〇〇84] 以上所述仅是本发明的优选实施方式,应当指出,对于本【技术领域】的普通技术人 员,在不脱离本发明原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也应视为 本发明的保护范围。
【权利要求】
1. 一种机架式服务器系统的固件更新方法,适用于通过一控制芯片模组更新一待更新 芯片模组的固件,其中所述控制芯片模组为一机架式服务器系统的一机架管理控制器,所 述机架式服务器系统包括连接所述机架管理控制器的至少一服务器,所述至少一服务器包 含所述待更新芯片模组,所述机架管理控制器可控制所述至少一服务器的开机与关机,其 特征在于,所述更新方法包括以下步骤: 通过所述控制芯片模组发送可形成一更新固件的多个数据包给所述待更新芯片模 组; 通过所述控制芯片模组发送一验证所述多个数据包的命令至所述待更新芯片模组; 通过所述控制芯片模组从所述待更新芯片模组获得所述多个数据包对应的多个验证 信息; 通过所述控制芯片模组判断所述多个数据包对应的多个验证信息是否全部正确,以确 认所述待更新芯片模组收到的所述多个数据包是否出错。
2. 根据权利要求1所述的机架式服务器系统的固件更新方法,其特征在于,在通过所 述控制芯片模组判断所述多个数据包对应的多个验证信息是否正确的步骤中,包括:若其 中有验证信息不正确,进一步包括: a、 通过所述控制芯片模组将出错的验证信息所对应的数据包重新发送给所述待更新 芯片模组; b、 通过所述控制芯片模组从所述待更新芯片模组获得重新发送给所述待更新芯片模 组的数据包对应的验证信息; c、 通过所述控制芯片模组判断重新发送给所述待更新芯片模组的数据包对应的验证 /[目息是否正确; 若正确,则所述控制芯片模组重新发送给所述待更新芯片模组的数据包没有出错,若 不正确,循环执行步骤a、b、c,直到所述控制芯片模组从所述待更新芯片模组获得的验证信 息中不存在错误的验证信息。
3. 根据权利要求1所述的机架式服务器系统的固件更新方法,其特征在于,在通过所 述控制芯片模组发送可形成一更新固件的多个数据包给所述待更新芯片模组的步骤之前, 进一步包括通过所述控制芯片模组将更新固件分解成所述多个数据包。
4. 根据权利要求1所述的机架式服务器系统的固件更新方法,其特征在于,在通过所 述控制芯片模组判断所述多个数据包对应的多个验证信息是否正确的步骤中,包括:若所 述多个验证信息正确,则待更新芯片模组收到的各数据包没有出错。
5. 根据权利要求1所述的机架式服务器系统的固件更新方法,其特征在于,所述待更 新芯片模组是一具有固件的芯片,所述具有固件的芯片设置于一服务器的一主板上。
6. 根据权利要求1所述的机架式服务器系统的固件更新方法,其特征在于,在通过所 述控制芯片模组发送可形成一更新固件的多个数据包给所述待更新芯片模组的步骤之前 进一步包括: 通过所述控制芯片模组发送一更新开始命令至所述待更新芯片模组; 通过所述控制芯片模组从所述待更新芯片模组获得一运行状态信息; 通过所述控制芯片模组判断所述运行状态信息是否为一第一运行状态,若不是,则所 述待更新芯片模组切换为第一运行状态。
7. 根据权利要求6所述的机架式服务器系统的固件更新方法,其特征在于,在通过所 述控制芯片模组发送一更新开始命令至所述待更新芯片模组的步骤之后进一步包括: 通过所述控制芯片模组从所述待更新芯片模组等待接收一运行状态信息; 若等待接收的时间超过一预设的第一时间阈值时,则所述控制芯片模组重新发送一更 新开始命令至所述待更新芯片模组,并且记录重新发送更新开始命令的次数。
8. 根据权利要求7所述的机架式服务器系统的固件更新方法,其特征在于,在所述控 制芯片模组重新发送一更新开始命令至所述待更新芯片模组,并且记录重新发送更新开始 命令的次数的步骤之后,进一步包括: 通过所述控制芯片模组判断重新发送更新开始命令的次数是否大于一预设的重发次 数最大值; 若是,则停止更新固件的操作。
9. 根据权利要求2所述的机架式服务器系统的固件更新方法,其特征在于,在所述控 制芯片模组从所述待更新芯片模组获得的验证信息中不存在错误的验证信息的步骤之后, 进一步包括: 通过所述控制芯片模组发送一完成更新固件的命令至所述待更新芯片模组; 通过所述控制芯片模组从所述待更新芯片模组获得一完成更新固件的响应,所述待更 新芯片模组已标记为一固件更新成功状态。
10. -种固件更新装置,适用于通过一控制芯片模组更新一待更新芯片模组的固件,所 述控制芯片模组为一机架式服务器系统的一机架管理控制器,所述机架式服务器系统包括 连接所述机架管理控制器的至少一服务器,所述至少一服务器包含所述待更新芯片模组, 所述机架管理控制器可控制所述至少一服务器的开机与关机,其特征在于,所述固件更新 装置包括: 数据包发送模块,用以通过所述控制芯片模组发送可形成一更新固件的多个数据包给 所述待更新芯片模组; 验证信息请求模块,与所述数据包发送模块相连,用以通过所述控制芯片模组发送一 验证所述多个数据包的命令至所述待更新芯片模组; 验证信息获取模块,与所述验证信息请求模块相连,用以通过所述控制芯片模组从所 述待更新芯片模组获得所述多个数据包对应的多个验证信息; 验证信息判断模块,与所述验证信息获取模块相连,用以通过所述控制芯片模组判断 所述多个数据包对应的多个验证信息是否全部正确,以确认所述待更新芯片模组收到的所 述多个数据包是否出错。
11. 根据权利要求10所述固件更新装置,其特征在于,进一步包括: 数据包重发模块,与所述验证信息判断模块相连,用于在所述多个验证信息中有验证 信息不正确,通过所述控制芯片模组将出错的验证信息所对应的数据包重新发送给所述待 更新芯片模组; 验证信息重获模块,与所述数据包重发模块相连,用于通过所述控制芯片模组从所述 待更新芯片模组获得重新发送给所述待更新芯片模组的数据包对应的验证信息; 验证信息重判模块,与所述验证信息重获模块相连,用于通过所述控制芯片模组判断 重新发送给所述待更新芯片模组的数据包对应的验证信息是否正确,当验证信息不正确 时,调用所述数据包重发模块。
12. 根据权利要求10所述固件更新装置,其特征在于,所述待更新芯片模组是一具有 固件的芯片,所述具有固件的芯片设置于一服务器的一主板上。
13. 根据权利要求10所述固件更新装置,其特征在于,进一步包括: 更新开始命令发送模块,用以通过所述控制芯片模组发送一更新开始命令至所述待更 新芯片模组; 运行状态获取模块,与所述更新开始命令发送模块相连,用以通过所述控制芯片模组 从所述待更新芯片模组获得一运行状态信息; 运行状态判断模块,与所述运行状态获取模块相连,用以通过所述控制芯片模组判断 所述运行状态信息是否为一第一运行状态,若不是,则所述待更新芯片模组切换为第一运 行状态。
14. 根据权利要求13所述固件更新装置,其特征在于,进一步包括: 等待接收模块,用以通过所述控制芯片模组从所述待更新芯片模组等待接收一运行状 态息; 更新开始命令重发模块,与所述等待接收模块相连,用以若等待接收的时间超过一预 设的第一时间阈值时,则所述控制芯片模组重新发送一更新开始命令至所述待更新芯片模 组,并且记录重新发送更新开始命令的次数。
15. 根据权利要求14所述固件更新装置,其特征在于,进一步包括: 重发次数判断模块,用以通过所述控制芯片模组判断重新发送更新开始命令的次数是 否大于一预设的重发次数最大值,若是,则停止更新固件的操作。
16. 根据权利要求11所述固件更新装置,其特征在于,进一步包括: 完成更新请求模块,用以通过所述控制芯片模组发送一完成更新固件的命令至所述待 更新芯片模组; 完成更新响应模块,与所述完成更新请求模块相连,用以通过所述控制芯片模组从所 述待更新芯片模组获得一完成更新固件的响应,所述待更新芯片模组已标记为一固件更新 成功状态。
【文档编号】G06F9/445GK104102519SQ201410356833
【公开日】2014年10月15日 申请日期:2014年7月24日 优先权日:2014年7月24日
【发明者】杨浩锐 申请人:英业达科技有限公司, 英业达股份有限公司