一种可信操作系统调试更新方法及系统与流程

文档序号:23790736发布日期:2021-01-30 05:44阅读:181来源:国知局
一种可信操作系统调试更新方法及系统与流程

[0001]
本发明涉及trustzone架构技术领域,尤其涉及一种可信操作系统调试更新方法及系统。


背景技术:

[0002]
trustzone是一种基于软硬件架构的系统安全设计方法,它将soc的硬件和软件资源划分为安全(secure world)和非安全世界(normal world),所有需要保护的操作在安全世界执行,如数据加解密、安全认证等,其余操作则在非安全世界中执行,可信操作系统trust-os(trusted os)运行在安全世界中,为非安全世界用户环境提供包括身份验证、授权管理、drm(digital rights management,数字版权管理)认证等可信任应用。
[0003]
trustzone架构中,系统上电复位后,先从安全世界开始执行,安全世界会对非安全世界进行验证,确保非安全世界执行的代码经过授权而没有被篡改,非安全世界再加载非安全世界的os,完成系统的启动,同时在非安全系统中加载os时,由安全世界对os的代码进行验证以确保没有被篡改。其中启动基础固件时,在基础固件(trust firmware)启动流程中,会由相应的接口引导进入可信操作系统trust-os,在完成可信操作系统trust-os初始化后返回对外的函数调用接口并继续启动流程,此时可信操作系统trust-os为固定不可更改,并在固件启动完成之后为ree(rich execution environment,通用执行环境)提供可信服务。
[0004]
可信操作系统trust-os在开发阶段需要进行反复调试,trust-os镜像通常是包括在启动固件镜像中,也就是说,若要更换trust-os镜像也就意味着需要同时重新烧写启动固件。针对可信操作系统trust-os的调试,目前通常都是直接在需要更新可信操作系统时重新烧写启动固件,即每次对新的trust-os调试时均重新烧写一次启动固件,若在调试过程中需要频繁地更换新的操作系统进行调试,会使得需要频繁的烧写启动固件。而对于启动固件的存储,目前通常是使用以下两种方式:一种是使用flash仿真器启动;另一种是烧写flash芯片,其中使用flash仿真器的方式烧录时间快,但需要板级提供特定接口以及上位机执行烧录程序,实现复杂且成本高,仅几m大小的flash仿真器大多都价格昂贵,若频繁烧录会大大增加实现成本,而采用flash芯片的方式虽然成本低,但每一次烧写都需要花费较长的时间,实现效率较低,尤其是若需要频繁烧录,则需要耗费大量的时间,非常不便于调试的执行。


技术实现要素:

[0005]
本发明要解决的技术问题就在于:针对现有技术存在的技术问题,本发明提供一种且实现操作简单、成本低、调试过程中系统更新效率高且灵活性强的可信操作系统调试更新方法及系统,能够适用于trustzone架构下实现可信操作系统的调试更新。
[0006]
为解决上述技术问题,本发明提出的技术方案为:
[0007]
一种基于trustzone架构的可信操作系统调试更新方法,步骤包括:
[0008]
s1.更新启动:在trustzone架构中可信操作系统的调试过程中,当需要更新可信操作系统时,转入步骤s2;
[0009]
s2.操作系统替换:将待更新系统t-os1从目的启动地址重定位至一个新的安全地址空间,并在启动通用固件时从外部获取用于替换待更新系统t-os1的目的系统t-os2,将所述目的系统t-os2存储至一个非安全内存地址空间并将参数信息传递给所述待更新系统t-os1,由所述待更新系统t-os1根据接收到的参数信息将所述目的系统t-os2的镜像拷贝至目的启动地址,以由目的系统t-os2替换待更新系统t-os1。
[0010]
进一步的,还包括预先在基础固件中设置初始化完成接口步骤,步骤s2中当所述待更新系统t-os1重定位至一个新的安全地址空间后,对所述待更新系统t-os1进行初始化,当所述待更新系统t-os1初始化完成时,将所述待更新系统t-os1的信息返回给所述初始化完成接口,由所述初始化完成接口处理所述待更新系统t-os1返回的信息。
[0011]
进一步的,还包括预先在基础固件中设置搬移完成接口步骤,步骤s2中当将所述目的系统t-os2的镜像拷贝至目的启动地址时,将所述待更新系统t-os1的信息返回到所述搬移完成接口,由所述搬移完成接口检查所述目的系统t-os2的拷贝是否完成,如果完成则调用基础固件中可信操作系统进入接口,以进入目的启动地址中对所述目的系统t-os2进行初始化。
[0012]
进一步的,所述目的系统t-os2进行初始化后,将所述目的系统t-os2的信息返回至基础固件中操作系统返回接口,由所述操作系统返回接口处理所述目的系统t-os2返回的信息,并在处理完成后返回到通用固件。
[0013]
进一步的,所述步骤s2的具体步骤包括:
[0014]
s21.将所述待更新系统t-os1从目的启动地址a重定位至新的安全地址空间b;
[0015]
s22.对处于所述安全地址空间b中的所述待更新系统t-os1进行初始化,初始化完成后,返回信息给基础固件;
[0016]
s23.在通用固件中初始化驱动完成后,向所述待更新系统t-os1发起操作系统搬移请求,并从外部获取所述目的系统t-os2存储到内存非安全地址c;
[0017]
s24.将所述目的系统t-os2的参数信息传递给所述待更新系统t-os1;
[0018]
s25.所述待更新系统t-os1响应所述搬移请求,根据接收的参数信息将所述目的系统t-os2的镜像拷贝至目的启动地址a,拷贝完成后启动基础固件对目的系统t-os2进行初始化并返回信息,处理完成返回信息后返回到通用固件,完成替换。
[0019]
进一步的,所述步骤s22中所述待更新系统t-os1初始化完成后,具体返回信息给基础固件中的初始化完成接口,由所述初始化完成接口处理所述待更新系统t-os1返回的信息,处理完成后启动通用固件。
[0020]
进一步的,所述步骤s25的步骤包括:
[0021]
s251.所述待更新系统t-os1响应所述搬移请求,将所述目的系统t-os2的镜像拷贝至目的启动地址a;
[0022]
s252.当所述待更新系统t-os1拷贝完成后,返回信息给基础固件中的搬移完成接口,由所述搬移完成接口检查所述目的系统t-os2是否拷贝完成,如果是转入步骤s253;
[0023]
s253.调用基础固件中可信操作系统进入接口,进入目的启动地址中对所述目的系统t-os2进行初始化;
[0024]
s254.所述目的系统t-os2初始化完成后,携带对外函数接口进入基础固件中操作系统返回接口,由所述操作系统返回接口处理所述目的系统t-os2返回信息,处理完成后返回至通用固件,完成操作系统替换。
[0025]
一种基于trustzone架构的可信操作系统调试更新系统,包括trustzone架构,在所述trustzone架构中包括安全空间、非安全空间以及基础固件、通用固件,还包括:
[0026]
更新启动模块,用于在可信操作系统trusted os的调试过程中,当需要更新可信操作系统trusted os时,转入操作系统替换模块;
[0027]
操作系统替换模块,用于将待更新系统t-os1从目的启动地址重定位至一个新的安全地址空间,并在启动通用固件时从外部获取用于替换待更新系统t-os1的目的系统t-os2,将所述目的系统t-os2初始存储至一个非安全内存地址空间并将参数信息传递给所述待更新系统t-os1,由所述待更新系统t-os1根据接收到的参数信息将所述目的系统t-os2的镜像拷贝至目的启动地址,以由目的系统t-os2替换待更新系统t-os1。
[0028]
进一步的,所述基础固件中设置有初始化完成接口,用于当所述待更新系统t-os1重定位至一个新的安全地址空间后且所述待更新系统t-os1初始化完成时,接收所述待更新系统t-os1返回的信息,以及处理所述待更新系统t-os1返回的信息。
[0029]
进一步的,所述基础固件中设置有搬移完成接口,用于当将所述目的系统t-os2的镜像拷贝至目的启动地址时,接收所述待更新系统t-os1返回的信息,并检查所述目的系统t-os2的拷贝是否完成,如果完成则调用基础固件中可信操作系统进入接口,以进入目的启动地址中对所述目的系统t-os2进行初始化。
[0030]
与现有技术相比,本发明的优点在于:
[0031]
1、本发明针对trustzone架构下可信操作系统trust-os的调试,在调试过程中若需要更新操作系统,通过将待更新系统重定位至一个新的安全地址空间,由通用固件获取替换的目的系统到一个非安全地址,再由待更新系统拷贝目的系统镜像到目的启动地址,可以实现可信操作系统trust-os的更新替换,使得可以在调试过程中更新操作系统时直接获取单独更新的trust-os部分,而避免如传统方法需要烧录更新整个启动固件,可以大大提高可信操作系统trust-os的调试效率,便于提高可信操作系统trust-os的开发效率。
[0032]
2、本发明通过实现可信操作系统trust-os的更新替换,能够减少所需成本以及降低实现复杂程度,整个更新过程中无需使用flash或仿真器等额外硬件设备,也无需使用上位机程序辅助或特定板级接口等。
[0033]
3、本发明在可信操作系统trust-os更新替换过程中,实现拷贝目的系统动作只在待更新系统中完成,能够避免正常trust-os启动后误操作或恶意操作导致trust-os被破坏的可能。
[0034]
4、本发明通过在基础固件中进一步设置初始化完成接口,以接收待更新系统在新的安全地址空间完成初始化后的信息进行处理,可以避免对后续替换的目的系统初始化后返回造成影响,确保系统的正常运行。
[0035]
5、本发明通过在基础固件中进一步设置搬移完成接口,使得在拷贝完成替换的目的操作系统到启动地址后再进入基础固件中原操作系统进入接口,确保目的操作系统初始化调用接口和返回配置流程与正常启动trust-os相同,使得被调试的trust-os输入输出路径不会引入其他的调试问题。
[0036]
6、本发明通过在基础固件中设置初始化完成接口、搬移完成接口两个接口,该两个接口在编译阶段直接编入的trust-os启动过程中无法被主动调用,同时在启动完成之后,trust-os无法触发进入基础固件的该两个接口,从而使得能够兼容正常启动trust-os的流程。
附图说明
[0037]
图1是本实施例可信操作系统调试更新方法的实现流程示意图。
[0038]
图2是本实施例中实现操作系统替换的流程示意图。
[0039]
图3是本发明在具体应用实施例中实现操作系统替换的原理及流程示意图。
具体实施方式
[0040]
以下结合说明书附图和具体优选的实施例对本发明作进一步描述,但并不因此而限制本发明的保护范围。
[0041]
如图1所示,本实施例可信操作系统调试更新方法的步骤包括:
[0042]
s1.更新启动:在可信操作系统的调试过程中,当需要更新可信操作系统时,转入步骤s2;
[0043]
s2.操作系统替换:将待更新系统t-os1从目的启动地址重定位至一个新的安全地址空间,并在启动通用固件时从外部获取用于替换待更新系统t-os1的目的系统t-os2,将目的系统t-os2存储至一个非安全内存地址空间并将参数信息传递给待更新系统t-os1,由待更新系统t-os1根据接收到的参数信息将目的系统t-os2的镜像拷贝至目的启动地址,以对目的系统t-os2进行调试。
[0044]
本实施例针对trustzone架构下可信操作系统trust-os的调试,在调试过程中若需要更新操作系统,通过将待更新系统t-os1重定位至一个新的安全地址空间,由于trust-os的启动地址为安全地址,通用固件处于非安全态,因此无法直接拷贝目的系统t-os2到启动地址,由通用固件获取替换的目的系统t-os2先存储到一个非安全地址,再由待更新系统t-os1拷贝目的系统t-os2镜像到目的启动地址,实现可信操作系统trust-os的替换,使得可以在调试过程中更新操作系统时直接获取单独更新的trust-os部分,而避免如传统方法需要烧录更新整个启动固件,可以大大提高可信操作系统trust-os的调试效率,便于提高可信操作系统trust-os的开发效率,且能够兼容可信操作系统trust-os的正常启动过程,不会影响原系统的调试过程,同时能够减少所需成本以及降低实现复杂程度,整个更新过程中无需使用flash或仿真器等额外硬件设备,也无需使用上位机程序辅助或特定板级接口等。
[0045]
上述待更新系统t-os1即为打包在基础固件中的初始的可信操作系统。本实施例在待更新系统t-os1初始化之前配置将该t-os1重定位到其他地址空间(具体可根据实际需求配置),以及配置使得能够实现功能1:接收及处理从通用固件传递过来目的系统t-os2的参数信息,该参数信息包括地址、大小等;功能2:将目的系统t-os2镜像拷贝到trust-os启动地址。
[0046]
本实施例中,还包括预先在基础固件(trust firmware)中设置初始化完成接口步骤,步骤s2中当待更新系统t-os1重定位至一个新的安全地址空间后,对待更新系统t-os1
进行初始化,当待更新系统t-os1初始化完成时,将待更新系统t-os1的信息返回给初始化完成接口,由初始化完成接口处理待更新系统t-os1返回的信息。
[0047]
如图2所示,在基础固件中通常设置有可信操作系统进入接口(原有接口1)以及可信操作系统返回接口(原有接口2),由可信操作系统进入接口在固件启动过程中进入启动地址的可信操作系统进行初始化,即固件启动过程中调用该操作系统进入接口,在不改变基础固件框架的情况下此接口只会跳转到约定的trust-os启动地址,并进入此时处于该启动地址的可信操作系统,由可信操作系统返回接口在可信操作系统初始化完成后接收返回的信息并进行处理。本实施例通过在基础固件中进一步设置初始化完成接口(新增接口1),以接收待更新系统t-os1在新的安全地址空间完成初始化后的信息进行处理,可以避免对后续替换的目的系统t-os2初始化后返回造成影响,确保系统的正常运行。
[0048]
在具体应用实施例中,可采用具有上述操作系统进入接口、操作系统返回接口的基础固件,并在该基础固件的基础上新增上述初始化完成接口,同时配置该初始化完成接口接收待更新系统t-os1初始化完成后返回的信息并对返回的信息进行处理。
[0049]
本实施例中上述通用固件具体可以是u-boot(universal boot loader,通用启动引导)或uefi(unified extensible firmware interface,统一可扩展固件接口),通用固件初始化驱动后,将目的系统t-os2先从u盘、硬盘等其他存储介质拷贝到一个非安全内存空间,并将包括该内存地址以及目的系统t-os2的大小等参数信息传递给待更新系统t-os1,同时向待更新系统t-os1发起搬移请求。以u-boot为例,启动到通用固件从外部获取目的系统t-os2时,具体从硬盘拷贝镜像到可用地址c:0x80000000,使用对应命令为:ext4load scsi 0:10x80000000t-os2.bin;然后发起t-os1发起搬移请求,例如使用系统调用(通用固件中相关接口)smc(secure monitor call,安全监视器调用),调用指令为smc(smc_id0,addr_c,size,0,0,0,0,0),其中参数0为进入t-os1拷贝程序的smc_id0,参数1为c地址,参数2为系统t-os的大小。
[0050]
上述将参数信息传递给待更新系统t-os1以及向待更新系统t-os1发起搬移请求两个步骤,具体可根据实际需求集成在一个命令中实现。
[0051]
上述目的系统t-os2也可以从网络中获取,即远程从网络中获取替换的操作系统来替换初始操作系统,可以进一步实现远程调试替换。
[0052]
本实施例中,还包括预先在基础固件中设置搬移完成接口(新增接口2)步骤,步骤s2中当将目的系统t-os2的镜像拷贝至目的启动地址时,将待更新系统t-os1的信息返回到搬移完成接口,由搬移完成接口检查目的系统t-os2的拷贝是否完成,如果完成则调用基础固件中可信操作系统进入接口,以进入目的启动地址中对目的系统t-os2进行初始化。通过在基础固件中进一步设置搬移完成接口,使得在拷贝完成目的t-os2到启动地址后再进入基础固件中原可信操作系统进入接口,使得目的t-os2拷贝到启动地址后再以同样的接口(即原接口1)进入初始化流程,并最终返回通用固件以完成操作系统的替换,确保t-os2初始化调用接口和返回配置流程与正常启动可信操作系统trust-os相同,使得被调试的trust-os输入输出路径不会引入其他的调试问题。
[0053]
本实施例中,目的系统t-os2进行初始化后,将目的系统t-os2的信息返回至基础固件中可信操作系统返回接口,由可信操作系统返回接口处理目的系统t-os2返回的信息,并在处理完成后返回到通用固件。
[0054]
上述配置的初始化完成接口只能被待更新系统t-os1调用,且拷贝目的系统t-os2动作只在待更新系统t-os1中完成,还能够避免正常trust-os启动后误操作或恶意操作导致trust-os被破坏的可能。
[0055]
本发明通过在基础固件中设置初始化完成接口、搬移完成接口两个接口,该两个接口在编译阶段直接编入的trust-os启动过程中无法被主动调用,同时在启动完成之后,由于对此时的trust-os而言没有对应的处理程序,也无法触发进入基础固件的新增接口,使得能够兼容正常启动trust-os的流程。
[0056]
如图2所示,本实施例中步骤s2的具体步骤包括:
[0057]
s21.将待更新系统t-os1从目的启动地址a重定位至新的安全地址空间b;
[0058]
s22.对处于安全地址空间b中的待更新系统t-os1进行初始化,初始化完成后,返回信息给基础固件;
[0059]
s23.在通用固件中初始化驱动完成后,向待更新系统t-os1发起操作系统搬移请求,并从外部获取目的系统t-os2存储到内存非安全地址c;
[0060]
s24.将目的系统t-os2的参数信息传递给待更新系统t-os1;
[0061]
s25.待更新系统t-os1响应搬移请求,根据接收的参数信息将目的系统t-os2的镜像拷贝至目的启动地址a,拷贝完成后启动基础固件对目的系统t-os2进行初始化并返回信息,处理完成返回信息后返回到通用固件,完成替换。
[0062]
通过上述步骤,可以直接将在原在目的启动地址a的待更新系统t-os1方便、高效的替换为目的系统t-os2,再由基础固件中原接口进入目的启动地址a对目的系统t-os2进行初始化等操作,直接实现可信操作系统更新,而无需如传统方法需要更新整个启动固件。
[0063]
本实施例中,步骤s22中待更新系统t-os1初始化完成后,具体返回信息给基础固件中的初始化完成接口,由初始化完成接口处理待更新系统t-os1返回的信息,处理完成后启动通用固件。具体可配置为待更新系统t-os1在b地址初始化完成后携带对外函数调用接口返回到初始化完成接口,初始化完成接口处理t-os1的返回信息,处理完成后继续启动过程,即先返回操作系统进入接口(原接口1)。
[0064]
本实施例中,步骤s25的步骤具体包括:
[0065]
s251.待更新系统t-os1响应搬移请求,将目的系统t-os2的镜像拷贝至目的启动地址a;
[0066]
s252.当待更新系统t-os1拷贝完成后,返回信息给基础固件中的搬移完成接口,由搬移完成接口检查目的系统t-os2是否拷贝完成,如果是转入步骤s253;
[0067]
s253.调用基础固件中可信操作系统进入接口,进入目的启动地址中对目的系统t-os2进行初始化;
[0068]
s254.目的系统t-os2初始化完成后,携带对外函数接口进入基础固件中操作系统返回接口,由操作系统返回接口处理目的系统t-os2返回信息,处理完成后返回至通用固件,完成操作系统替换。
[0069]
以下以在具体应用实施例中采用本发明上述方法实现trustzone架构下可信操作系统调试更新为例,对本发明上述方法进行进一步说明。
[0070]
本实施例中先对待更新系统t-os1进行配置,具体包括:
[0071]
(1)配置新的接口:即后续替换时拷贝t-os2的程序,由该程序验证传入参数后复
制目的系统t-os2到目的启动地址a,并返回到基础固件中的(新增接口2)。
[0072]
(2)在入口添加搬移程序,由该程序将需要搬移的t-os1部分拷贝到新的地址b,然后跳转到b地址进行t-os初始化;
[0073]
进一步还可以在正常能启动的trust-os中去除所有不必要的调用内容,尽量减少t-os1的大小。
[0074]
以及配置基础固件,具体包括:
[0075]
1)在基础固件中添加初始化完成接口(新增接口1)的代码,以实现以下功能:接收第一次初始化返回的待更新系统t-os1进行处理,以及去除会影响目的系统t-os2初始化返回的设置,一般是中断注册,trust-os参与的电源管理部分;
[0076]
2)在基础固件中添加搬移完成接口(新增接口2)的代码,以实现以下功能:在待更新系统t-os1拷贝目的系统t-os2后,调用(原有接口1)进入启动地址a的目的系统t-os2进行初始化,调用返回后恢复非安全上下文,返回到通用固件。
[0077]
完成上述配置后,在固件编译时将待更新系统t-os1作为trust-os编入基础固件。
[0078]
如图3所示,本实施例中实现可信操作系统调试时可信操作系统替换的详细步骤如下:
[0079]
步骤1:固件启动过程中,调用可信操作系统进入接口(原有接口1),在不改变基础固件框架的情况下此接口只会跳转到约定的trust-os启动地址a,并进入此时处于a地址的t-os1;
[0080]
步骤2:为启动目的系统t-os2,待更新系统t-os1首先重定位自身到b地址,让出原启动地址a空间。
[0081]
步骤3:待更新系统t-os1在b地址初始化完成后携带对外函数调用接口返回到初始化完成(新增接口1)。
[0082]
步骤4:初始化完成(新增接口1)处理待更新系统t-os1的返回信息,处理完成后继续启动过程(先返回原有接口1)至通用固件。
[0083]
步骤5:在通用固件中初始化驱动完成后,获取目的系统t-os2到内存非安全地址c。
[0084]
步骤6:通过系统调用smc或中断方式进入待更新系统t-os1中的功能接口,传递目的系统t-os2的地址、大小等参数信息给处于b地址空间的待更新系统t-os1。
[0085]
步骤7:待更新系统t-os1根据参数信息将c地址的目的系统t-os2镜像拷贝到安全地址a。
[0086]
步骤8:待更新系统t-os1拷贝完成后返回到搬移完成接口(新增接口2)。
[0087]
步骤9:搬移完成接口(新增接口2)检查t-os2拷贝完成后,调用可信操作系统进入接口(原有接口1);
[0088]
步骤10:可信操作系统进入接口(原有接口1)进入a地址的trust-os t-os2,系统t-os2进行初始化。
[0089]
步骤11:系统t-os2初始化完成后,携带对外函数接口进入返回到可信操作系统返回接口(原有接口2)。
[0090]
步骤12:可信操作系统返回接口(原有接口2)处理t-os2返回信息,至此系统t-os1生命周期结束,系统t-os1的对外接口被覆盖,处理完成后(经由原有接口1、新增接口2)返
回到通用固件,整个替换过程结束。
[0091]
本实施例还包括一种可信操作系统调试更新系统,该系统包括trustzone架构,在trustzone架构中包括安全空间、非安全空间以及基础固件、通用固件,还包括:
[0092]
更新启动模块,用于在可信操作系统trusted os的调试过程中,当需要更新可信操作系统trusted os时,转入操作系统替换模块;
[0093]
操作系统替换模块,用于将待更新系统t-os1从目的启动地址重定位至一个新的安全地址空间,并在启动通用固件时从外部获取用于替换待更新系统t-os1的目的系统t-os2,将目的系统t-os2初始存储至一个非安全内存地址空间并将参数信息传递给待更新系统t-os1,由待更新系统t-os1根据接收到的参数信息将目的系统t-os2的镜像拷贝至目的启动地址,以由目的系统t-os2替换待更新系统t-os1。
[0094]
本实施例更新启动模块与上述更新启动方法对应,操作系统替换模块与上述操作系统替换步骤对应,在此不再一一赘述。
[0095]
本实施例中,基础固件中设置有初始化完成接口,用于当待更新系统t-os1重定位至一个新的安全地址空间后且待更新系统t-os1初始化完成时,接收待更新系统t-os1返回的信息,以及处理待更新系统t-os1返回的信息。初始化完成接口原理及配置如上述可信操作系统调试更新方法中所述,在此不再赘述。
[0096]
本实施例中,基础固件中设置有搬移完成接口,用于当将目的系统t-os2的镜像拷贝至目的启动地址时,接收待更新系统t-os1返回的信息,并检查目的系统t-os2的拷贝是否完成,如果完成则调用基础固件中可信操作系统进入接口,以进入目的启动地址中对目的系统t-os2进行初始化。搬移完成接口原理及配置如上述可信操作系统调试更新方法中所述,在此不再赘述。
[0097]
上述只是本发明的较佳实施例,并非对本发明作任何形式上的限制。虽然本发明已以较佳实施例揭露如上,然而并非用以限定本发明。因此,凡是未脱离本发明技术方案的内容,依据本发明技术实质对以上实施例所做的任何简单修改、等同变化及修饰,均应落在本发明技术方案保护的范围内。
当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1