固件损坏恢复的制作方法

文档序号:31754411发布日期:2022-10-11 23:49阅读:85来源:国知局
固件损坏恢复


背景技术:

1.固件可以为计算设备的硬件中的一些或全部提供低级控制。计算设备可以包括利用固件的固件组件(例如,控制器、处理器、传感器、相机等)。在固件更新、功率浪涌、断电、来自计算设备的电源单元的不适当电压和/或其他电事件期间,固件组件可能会被损坏。
附图说明
2.图1示出与本公开一致的用于固件损坏恢复的计算设备的一个示例。
3.图2示出与本公开一致的适用于固件损坏恢复的计算设备的框图。
4.图3示出与本公开一致的用于固件损坏恢复的方法的一个示例。
具体实施方式
5.计算设备可以利用基本输入输出系统(bios)来执行某些动作。如在此所使用的,术语“bios”指的是在计算设备的启动序列期间执行硬件初始化并为操作系统(os)和/或其它程序提供运行时服务的非易失性固件组件。例如,当计算设备被启动(例如,引导)时,bios可以初始化计算设备的硬件。
6.如本文所使用的,术语“计算设备”指的是传输或修改能量以执行或辅助人类任务的执行的机械或电气设备。除其他类型的计算设备外,示例性计算设备包括膝上型计算机、笔记本计算机、台式计算机和/或移动设备(例如,智能电话、平板电脑、个人数字助理、智能眼镜、腕戴式设备等)。如本文所使用的,移动设备可以包括由用户携带和/或佩戴的(或者可以由用户携带和/或佩戴的)计算设备。例如,除其它类型的移动设备外,移动设备可以是电话(例如,智能电话)、平板电脑、个人数字助理(pda)、智能眼镜和/或腕戴式设备(例如,智能手表)。如在此所使用的,术语“操作系统”(os)是指支持计算设备的基本功能的软件,所述基本功能诸如调度任务、执行应用和/或控制外围设备。如本文所使用的,术语“固件”是指提供对计算设备的特定硬件的控制的软件。如这里所使用的,术语“固件组件”指的是包含固件和/或利用(例如,由其控制)固件的设备。例如,电力输送控制器、雷电控制器、相机、读卡器、指纹读取器等可以各自包括其自己的固件。可以更新固件组件的固件。
7.在一些示例中,固件和与固件相关联的固件组件在被更新时可能会有固件破坏。如本文所使用的,术语“固件损坏”或“被损坏的固件”是指传输和/或处理的失败,其可能会引入对原始数据的非故意的改变,并且可能会导致计算设备崩溃和/或永久地被破坏。这种损坏会对固件组件造成永久性破坏,并使替换很昂贵。在一些示例中,固件损坏可以使计算设备运行缓慢和/或可以使计算设备不响应。可以使用os来检测被损坏的固件组件,和/或客户服务可以检测并恢复计算设备的被损坏的固件组件。例如,在一些方法中,终端用户识别出固件损坏并使恢复工程师参与恢复损坏的固件。这种过程可能是耗时且昂贵的。
8.在其它方法中,可以手动地检测和恢复固件组件的固件损坏。例如,用户可以从事件日志和/或windows设备管理器(wdm)接收错误通知。基于该通知,用户可以从服务台寻求帮助和/或自诊断固件被损坏并且下载固件更新包以恢复固件组件。然而,这样的方法可能
是耗时的,涉及需要成本高的恢复工程师来检测和恢复损坏。另外,这样的方法可能会导致对固件组件的额外损坏。
9.在一些先前的方法中,用户可以手动地使用os级固件更新和恢复(fur)应用来更新、下载和/或恢复固件组件的固件。在更新之前,fur应用可以将bios和固件组件的固件映像备份到计算设备的存储设备中。如果bios在计算设备的上电自检(post)序列期间检测到固件组件映像,则bios就可以读出固件组件映像的备份版本以恢复该固件组件。如在此所使用的,术语“post序列”指在计算设备上电之后由固件和/或软件例程执行的过程,以确定计算设备的硬件是否正确地工作。如果bios在post序列期间没有检测到固件组件映像,则可以重新引导计算设备的os。然而,在这种恢复系统中,存储设备中的备份映像不能被用于恢复固件组件的固件。
10.在一些其它方法中,冗余固件组件的固件映像可以被集成在bios映像区域中,并且当bios被更新时被保存在闪速只读存储器(rom)中。在固件组件被损坏的情况下,bios可以使用集成的冗余固件映像来恢复固件组件。然而,这样的恢复系统可能是昂贵的,因为它可能包括使用较大的闪速rom。
11.根据本公开,固件组件恢复可以使用bios来检测固件被损坏的固件组件,从bios本身中的框架检测恢复代理,确定固件组件的备份映像的位置,基于备份映像的位置确定恢复序列,以及恢复固件组件。在一些示例中,由于用户没有识别哪个固件组件被破坏了,所以可以自动化这样的固件组件恢复过程。另外,由于恢复代理被集成在bios中,所以新安装的干净的os可以由固件组件恢复过程支持,如本文进一步描述的。
12.在一些示例中,计算设备的固件损坏恢复过程可由计算设备的bios检测损坏,并基于固件损坏的检测到的固件损坏来生成恢复代理。如本文所使用的,术语“恢复代理”指的是包括高级配置和电力接口(acpi)以及windows平台二进制表(wpbt)的表,以基于bios检测到的损坏来生成算法,如本文进一步描述的。恢复代理可以确定固件组件的备份映像的位置,基于备份映像的位置确定恢复序列,并恢复固件组件。如在此使用的,术语“备份映像”指的是能够创建固件组件的固件的副本的计算机文件。统一且自动化的损坏检测和恢复过程在有限的用户干预下可以是成本有效的。
13.图1示出了与本公开一致的用于固件损坏恢复的计算设备101的一个示例。计算设备101可以包括处理资源105,其通信地耦合到可以在其上存储指令的存储器资源107,所述指令诸如指令102、104、106、108和110。如本文所使用,术语“处理资源”是指中央处理单元(cpu)、微处理器和/或适合于提取和执行存储在存储器资源中的指令的其它硬件设备。处理资源105可以是cpu、微处理器和/或适于提取和执行存储在存储器资源107中的指令的其它硬件设备。处理资源105可检测、生成、确定和恢复所存储的指令以执行与固件损坏恢复有关的动作。
14.如本文所使用的,“通信地耦合”可以包括经由设备之间的各种有线和/或无线连接进行耦合,使得数据可以在设备之间的各种方向上传输。尽管以下描述涉及处理资源和存储器资源,但是这些描述也可应用于具有多个处理资源和多个存储器资源的系统和/或计算设备。在这样的示例中,指令可以跨多个非暂态机器可读存储介质分布(例如,存储),并且指令可以跨多个处理资源分布(例如,由其执行)。
15.存储器资源107可以是存储可执行指令102、104、106、108和110的任何电子、磁、光
或其他物理存储设备。因此,存储器资源107可以是例如随机存取存储器(ram)、电可擦除可编程只读存储器(eeprom)、存储驱动器、光盘等。存储器资源105可以被设置在计算设备101内,如图1所示。另外,存储器资源107可以是例如使计算设备101从便携式/外部/远程存储介质下载指令102、104、106、108和110的便携式、外部或远程存储介质。
16.指令102在由诸如处理资源105的处理资源执行时可以使计算设备101通过计算设备的bios检测计算设备的固件组件中的固件损坏。计算设备101的bios可以是能够在计算设备101启动期间执行硬件初始化的非易失性固件组件。在一些示例中,如果计算设备101没有被初始化,则计算设备的bios可以检测到固件组件(例如,功率输送控制器、传感器、相机等)的固件被损坏。在一些示例中,使用bios,固件组件的固件损坏可以经由os接口来恢复,如本文进一步描述的。
17.在一些示例中,当计算设备101在启动序列期间被初始化时,bios可以控制计算设备101。bios可以包括efi前初始化(pei)阶段。在pei阶段期间,bios可检测固件、存储空间的损坏,并提供重启计算设备101的原因。在一些示例中,bios可以转到驱动器执行环境(dxe)阶段。在这个阶段,计算设备101的bios可以发现并以正确的顺序执行dxe驱动器。除计算设备101的其他部分外,dxe驱动器可以负责初始化固件组件。在一些示例中,在dxe阶段,如果计算设备101的bios没有检测到固件组件的固件损坏,则计算设备101可以通过引导设备选择(bds)来引导计算设备101的os。在一些示例中,如果bios检测到固件损坏,则bios可以在计算设备101存储器系统中输入关于检测到的固件损坏的信息。
18.指令104在由诸如处理资源105之类的处理资源执行时可以使计算设备101基于固件组件的检测到的固件损坏来生成恢复代理。在一些示例中,恢复代理可以集成在bios中。在一些示例中,计算设备101可包括恢复代理,该恢复代理可以是包括acpi和wpbt的表。如本文所使用的,术语“表”是指恢复代理的数据的布置。
19.计算设备101可以在post序列期间由bios生成该表。post序列可以在计算设备101上电之后执行固件例程,以确定计算设备的硬件是否正确地工作。例如,计算设备101可以在上电时运行post序列,以确定计算设备101的某些硬件(例如,随机存取存储器(ram)、固件组件和/或其他硬件)是否正确地工作或已经被损坏。响应于确定固件组件的固件损坏,计算设备101可以生成恢复代理。
20.在一些示例中,基于计算设备101的固件损坏的原因,恢复代理的数据布置可以是不同的。例如,恢复代理可以包括针对由电源浪涌、断电和/或其他电事件引起的固件损坏的第一数据布置,并且可以具有针对由固件更新期间的关闭引起的固件损坏的第二数据布置。
21.计算设备101的恢复代理可包括acpi和wpbt表。acpi可以使计算设备101的功率管理处于os的控制之下。在一些示例中,acpi可以使用通过固件提供的指令列表将可用的固件组件及其功能通告给os。在一些示例中,acpi可以指定计算设备101的bios、os和固件组件如何能够关于功率使用而彼此通信。在一些示例中,acpi接口可以在acpi os下被提供给计算设备101。换句话说,计算设备101可以经由acpi接口从bios接收恢复代理。
22.恢复代理的wpbt可以使固件能够向os提供os可以执行的平台二进制。二进制切换介质可以是物理存储器,允许固件提供平台二进制而不修改本地存储装置和/或服务器中的固件映像。在一些示例中,wpbt可包括指向已被复制到本地存储器的平面、便携式可执行
(pe)固件映像的物理地址指针。
23.在一些示例中,计算设备101的bios可以发布包括acpi和wpbt的恢复代理表,如本文进一步讨论的。如本文所使用的,术语“发布”可以指bios完成数据的准备以建立acpi和wpbt表。
24.指令106在由诸如处理资源105之类的处理资源执行时可以使计算设备101基于所生成的恢复代理来确定固件组件的备份映像的位置。如在此所描述的,备份映像可以是固件组件的固件的副本。在一些示例中,固件组件的备份映像的位置可以在计算设备的第一位置中。在一些示例中,第一位置可以是计算设备101的本地存储器。
25.在一些示例中,基于所生成的恢复代理,固件组件的固件的备份映像的位置可以是不同的。例如,与bios集成的恢复代理可以建立定制acpi表。如在此所使用的,术语“定制acpi”指的是已经被修改以指示哪个固件组件损坏的acpi数据。定制acpi表可以在uefi/bios post时间期间创建。在一些示例中,定制acpi表可以包括具有基于从恢复代理接收的提示的定制信息的acpi表头。
26.基于定制acpi表的存在,指令106在由处理资源105执行时可以使计算设备101确定损坏固件组件的备份映像的位置是在计算设备101的第一位置中。
27.在一些示例中,固件组件的备份映像的位置可以在与计算设备相关联的服务器中。响应于定制acpi表不存在,指令106在由处理资源105执行时可以使计算设备101确定备份映像的位置是在第二位置中。在一些示例中,第二位置可以是计算设备101的服务器。如这里所使用的,术语“服务器”指的是为被称为客户端的其它程序或设备提供功能的计算机程序和/或设备。在一些示例中,第二位置可以是除了计算设备101之外的计算设备的服务器。
28.在一些示例中,计算设备101可以确定固件组件的备份映像在本地存储装置中和/或在计算设备101的服务器中。如果确定备份映像不存在,则可以生成警告以通知固件组件的固件损坏。在一些示例中,警告可以由用户接收。在一些示例中,警报可以由计算机接口接收。
29.指令108当被诸如处理资源105的处理资源执行时可以使计算设备101基于固件组件的备份映像的位置的确定来确定恢复序列。如这里所讨论的,术语“恢复序列”是指为了恢复固件组件的损坏固件而采取的一系列选择性动作。固件组件的固件的恢复序列可以基于备份映像的位置、是否存在定制acpi的确定、wpbt命令行参数等,如这里进一步讨论的。
30.在一些示例中,恢复序列可以包括恢复损坏的固件组件(例如,立即恢复)和重新引导os。在一些示例中,恢复序列可以包括通知用户联系恢复工程师。在一些示例中,恢复序列可以包括触发事件日志以初始化bios的固件恢复。
31.指令110在由诸如处理资源105之类的处理资源执行时可以使计算设备101通过执行所确定的恢复序列来恢复固件组件的固件。当固件损坏的恢复完成时,可以生成通知。
32.根据本公开,固件损坏恢复可允许bios恢复计算设备中的固件组件并使恢复过程流线化。bios可以支持组件固件恢复,并且可以避免在用户升级系统时包括冗余固件映像。恢复代理可以确定损坏的固件组件的备份映像的位置,并基于备份映像的位置确定恢复序列。这可以帮助消除存储每个组件的冗余固件映像的附加rom,并且有助于成本降低。
33.图2示出了与本公开一致的适用于固件损坏恢复的计算设备221的框图。计算设备
221可以包括处理资源205,其通信地耦合到其上可以存储指令的非暂时性机器可读存储介质207,所述指令诸如指令222、224、226、228、232和234。处理资源205可以类似于参考图1描述的处理资源105。非暂时性机器可读存储介质207可以类似于参考图1描述的存储器资源107。机器可读存储介质207可以是例如允许计算设备221从便携式/外部/远程存储介质下载指令的便携式、外部或远程存储介质。在这种情况下,可执行指令可以是“安装包”的一部分。如本文所述,机器可读存储介质207可用与固件损坏恢复相关联的可执行指令来编码。
34.指令222在由诸如处理资源205等处理资源执行时可使计算设备221基于计算设备221的固件组件的检测到的固件损坏来生成包括acpi和wpbt接口的恢复代理。在一些实例中,恢复代理可以经由bios被放置在诸如非暂时性机器可读存储介质207的存储器资源中。在这样的一个示例中,wpbt可指示os关于恢复代理的位置,并且可指示os如何运行恢复代理。在一些示例中,定制acpi可以提供关于固件组件的损坏固件的信息,包括关于固件组件的恢复是否有保证的指示。在一些实例中,当os识别出wpbt时,os可使用wpbt中的信息来搜索恢复代理的存储器资源和/或系统存储器地址,然后运行恢复代理。一旦恢复运行代理,恢复代理就可以尝试定位定制acpi表以确定应该修复哪个固件组件。响应于该确定,可以发起恢复过程。
35.换言之,在一些示例中,计算设备221可检测固件损坏并恢复该损坏。计算设备221的固件损坏恢复过程可以由计算设备221的bios检测固件损坏,并基于检测到的固件损坏来生成恢复代理。恢复代理可以集成在计算设备221的bios中。
36.在一些示例中,计算设备221可包括恢复代理,该恢复代理可以是包括acpi和wpbt的表。acpi可以使计算设备201的功率管理处于os的控制之下。在一些示例中,acpi可以使用通过固件提供的指令列表将可用的固件组件及其功能通告给os。在一些示例中,acpi可以指定计算设备201的bios、os和固件组件可以如何针对功率使用而彼此通信。
37.恢复代理的wpbt可以使固件能够向os提供os可以执行的平台二进制。二进制切换介质可以是物理存储器,允许固件提供平台二进制而不修改本地存储装置和/或服务器中的固件映像。在一些示例中,wpbt可包括指向已被复制到本地存储器的扁平pe固件映像的物理地址指针。
38.在一些示例中,计算设备221的bios可以发布包括acpi和wpbt的恢复代理表。如本文所使用的,术语“发布”可以指bios完成数据的准备以建立acpi和wpbt表。例如,bios可以完成相关数据以在本地存储器中建立wpbt表。在一些示例中,bios可以完成相关数据以在本地存储器中建立定制acpi表。定制acpi可以指示固件组件的哪个固件被损坏。在一些示例中,指令222可以包括可由处理资源205执行以确定要使用恢复代理恢复的固件组件的参数的指令。固件组件的参数例如可以包括计算设备的存储器和/或服务器的物理位置。
39.指令224在由诸如处理资源205之类的处理资源执行时可以使计算设备221基于所生成的恢复代理来确定固件组件的备份映像的第一位置。计算设备221可以基于生成的恢复代理确定固件组件的备份映像的第一位置。
40.在一些示例中,固件组件的备份映像的第一位置可以在计算设备221的第一位置中。例如,与bios集成的恢复代理可以建立定制acpi表。基于定制acpi表的存在,指令224在由处理资源205执行时可使计算设备221确定损坏固件组件的备份映像的第一位置处于计算设备221的第一位置。在一些示例中,第一位置可以是计算设备221的本地存储器。
41.指令226当由诸如处理资源205的处理资源执行时可以使计算设备221基于固件组件的备份映像处于第一位置而执行第一恢复序列。基于确定备份映像位于第一位置,计算设备221可以执行第一恢复序列。
42.第一恢复序列可以包括要采取的第一和第二选择性动作,以恢复固件组件的损坏固件。在一些示例中,第一恢复序列可以基于定制acpi在第一位置处的存在来确定。在一些示例中,如果确定存在定制acpi,则第一恢复序列可以包括第一选择性动作和第二选择性动作。第一选择性动作可以是例如经由统一可扩展固件接口(uefi)封装体更新来准备恢复固件组件。第二选择性动作可以是例如向用户发送通知以接收是否同意立即或稍后继续进行重新引导和恢复固件组件的动作。
43.指令228在由诸如处理资源205的处理资源执行时可以使计算设备221响应于确定在第一位置处不存在固件组件的备份映像而确定固件组件的备份映像的第二位置。如果恢复代理确定不存在定制acpi表,则指令228可以使计算设备221确定备份映像的位置。
44.在一些示例中,备份映像可以被确定为在第二位置中。在一些示例中,第二位置可以是计算设备221的服务器。在一些示例中,第二位置可以是除了计算设备221之外的计算设备的服务器。
45.指令232当由诸如处理资源205的处理资源执行时可以使计算设备221基于固件组件的备份映像处于第二位置来执行第二恢复序列。如本文所讨论的,除了第一和第二选择性动作之外,第二恢复序列可以包括第三选择性动作。第三选择性动作可以包括,例如,将备份映像从第二位置复制到第一位置。
46.在一些示例中,第二恢复序列可以包括触发事件日志。如在此所使用的,术语“事件日志”指的是记录系统的事件。在一些示例中,第二恢复序列可以触发记录固件损坏事件。事件日志可提供可用于理解损坏背后的原因、与固件组件的先前固件损坏事件相比较等的审核跟踪。在一些示例中,第二恢复序列可以包括bios以控制计算设备221。
47.指令234当由诸如处理资源205的处理资源执行时可以使计算设备221基于固件组件的备份固件映像在第二位置不存在而生成警告,以通知固件组件的固件损坏。在一些示例中,计算设备221可以确定固件组件的备份映像在第一位置和第二位置处不存在。在这样的备份映像不存在的确定中,可以生成警告以通知固件组件的固件损坏。在一些示例中,警告可以由用户接收。在一些示例中,警报可以由计算机接口接收。示例性警报包括例如在计算设备上弹出通知、接收电子消息、在移动设备上接收警报消息等。
48.图3示出了与本公开一致的用于固件损坏恢复的方法330的一个示例。例如,方法330可以由计算设备(例如,如先前分别结合图1和2描述的计算设备101、221)执行。
49.在331,方法330包括由计算设备的bios检测计算设备的固件组件中的固件损坏。在一些示例中,使用bios,可以经由os接口恢复固件组件的固件损坏。如果计算设备没有被初始化,则计算设备的bios可以检测固件组件的固件被损坏。在一些示例中,使用bios,可以经由os接口恢复固件组件的固件损坏。
50.在333,方法330包括基于固件组件的检测到的固件损坏来生成恢复代理。在一些示例中,恢复代理可以集成在bios中。在一些示例中,计算设备可以包括恢复代理,该恢复代理可以是包括acpi和wpbt的表。
51.acpi可以使计算设备的功率管理处于os的控制之下。在一些示例中,acpi可以指
定计算设备的bios、os和固件组件可以如何针对功率使用而彼此通信。恢复代理的wpbt可以使固件能够向os提供os可以执行的平台二进制。
52.在335,方法330包括基于生成的恢复代理确定固件组件的备份映像的第一位置。例如,在335,所述方法可以确定固件组件的固件的副本在第一位置。在一些示例中,第一位置可以是计算设备的本地存储器。
53.在一些示例中,与计算设备的bios集成的恢复代理可以构建定制acpi表。基于定制acpi的存在,计算设备可以确定损坏的固件的备份映像在本地存储器/第一位置。
54.在337,方法330包括基于固件组件的备份映像处于第一位置来执行第一恢复序列。基于确定备份映像位于第一位置,方法330可以执行第一恢复序列,其可以包括一组选择性动作。该组选择性动作可以包括例如经由uefi封装体更新准备恢复固件组件,以从用户接收关于用户重新引导计算设备的同意等。
55.在339,方法330包括响应于确定固件组件的备份映像在第一位置不存在,确定固件组件的备份映像的第二位置。例如,如果计算设备确定备份映像在第一位置中不存在,那么计算设备就可以搜索第二位置(例如,服务器)以确定备份映像是否在第二位置。
56.在一些示例中,第二位置的确定是基于确定定制acpi表不存在于第一位置处而是存在于第二位置的。如果备份映像位于第二位置,则可以生成第二恢复序列。
57.在341,方法330包括基于固件组件的备份映像处于第二位置而执行第二恢复序列并从接口接收同意。例如,恢复代理可以基于确定备份映像在第二位置来确定第二恢复序列。在一些示例中,第二恢复序列可以包括将备份映像从第二位置复制到第一位置,并且在备份映像的复制完成时自动引导os。在一些示例中,第二恢复序列可以包括询问在第一时间段还是在第二时间段引导os的用户同意。第一时间段可以是备份映像的复制已经完成的时间段。在一些示例中,第二时间段可以是比第一时间段晚的时间段。
58.在343,方法330包括响应于执行第一和第二恢复序列而重新引导计算设备以恢复固件组件。在一些示例中,os可以基于所确定的恢复序列来重新引导。在一些示例中,重新引导可以是正常的bios序列。
59.在345,方法330包括基于在第二位置处不存在固件组件的备份固件映像而生成警报。在一些示例中,固件的备份映像可以在第一位置和第二位置不存在。如果备份映像在第一位置和第二位置不存在,则该方法可以生成警报以通知接口。
60.例如,用户可以经由通知被警告,该通知是备份映像不存在并且不能生成恢复序列。基于该通知,用户可以确定恢复固件组件的固件所必须采取的下一步骤。例如,用户可以决定调用恢复管理器和/或强制引导以恢复固件组件的固件。
61.在本公开的前述详细描述中,参考了形成本公开的一部分的附图,并且在附图中通过图示示出了可以如何实践本公开的示例。充分详细地描述这些示例以使得本属领域普通技术人员能够实践本发明的示例,并且,应当理解,可利用其它示例且可在不脱离本发明范围的情况下作出过程、电和/或结构上的改变。此外,如本文所使用的,“一个”可以指一个这样的事物或多于一个这样的事物。
62.本文中的附图遵循编号惯例,其中,第一数位对应于附图的图号而其余数位则标识附图中的元件或组件。例如,附图标记105可以指图1中的元件105,并且类似的元件可以由图2中的附图标记205来标识。可以添加、交换和/或消除在本文的各个附图中示出的元件
以提供本公开的附加示例。另外,附图中提供的元件的比例和相对尺度旨在说明本公开的示例,而不应以限制意义来理解。
63.可以理解,当一个元件被称为在另一元件“上”、“连接到”、“耦合到”另一元件或“与另一元件耦合”时,它可以直接在另一元件上、连接另一元件或与另一元件耦合,或者可以存在中间元件。相反,当一个目标“直接耦合到”另一元件或“与另一元件直接耦合”时,应当理解,其中没有中间元件(粘合剂、螺钉、其它元件)等。
64.以上说明书、示例和数据提供了对本公开的方法和应用以及系统和方法的用途的描述。由于在不脱离本公开的系统和方法的精神和范围的情况下可以做出许多示例,因此本说明书仅阐述了许多可能的示例性配置和实施方式中的一些。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1