启动PCIE设备扫描的方法与流程

文档序号:18463741发布日期:2019-08-17 02:16阅读:1808来源:国知局
启动PCIE设备扫描的方法与流程

本申请涉及计算机通信技术领域,尤其是涉及一种启动pcie设备扫描的方法。



背景技术:

linux操作系统下高速外围元件接口(peripheralcomponentinterfaceexpress,pcie)设备进行初始化和扫描识别,只发生在linux操作系统正常开机后进行。即linux操作系统正常开机后只对pcie总线树进行一次初始化扫描与枚举,如需在linux操作系统运行过程中对pcie设备重新扫描与枚举,就要重新开机启动以重新加载linux操作系统。

在linux操作系统运行过程中,若pcie设备掉电再重新上电后,linux操作系统运无法对pcie设备进行重新枚举扫描,进而无法正常使用。



技术实现要素:

基于此,有必要针对在linux操作系统运行过程中,无法对pcie设备进行扫描识别的问题,提供一种启动pcie设备扫描的方法。

一种启动pcie设备扫描的方法,所述pcie设备与主设备通过pcie总线连接,且所述主设备运行linux操作系统,所述主设备主板设有bios芯片,所述bios芯片内置bios程序,所述方法包括:

当所述linux操作系统启动时,所述主设备对所述pcie设备进行初始化扫描;

获取所述pcie设备的身份信息;

加载与所述身份信息对应的电源管理驱动,所述电源管理驱动用于向所述linux操作系统提供对pcie设备供电的控制方法的接口函数;

当linux操作系统需要对目标pcie设备进行重新扫描识别时,获取所述目标pcie设备的身份信息;

调用所述接口函数以使所述电源管理驱动查找所述bios程序的io节点;

利用所述io节点使所述bios程序对所述目标pcie设备执行对应的控制策略,所述控制策略至少包括枚举扫描。

在其中一个实施例中,所述获取所述pcie设备的身份信息,包括:

利用所述bios程序获取所述pcie设备的身份信息,并保存至所述linux操作系统和所述bios程序之间的抽象层;

控制sysfs文件系统从所述抽象层中获取所述身份信息,并保存所述身份信息至存储链表中;其中,所述linux操作系统包括所述sysfs文件系统和所述存储链表。

在其中一个实施例中,当所述linux操作系统支持高级配置和电源管理接口功能时,所述抽象层包括高级配置和电源管理接口。

在其中一个实施例中,所述调用所述接口函数以使所述电源管理驱动查找所述bios程序的io节点,包括:调用所述接口函数向所述电源管理驱动发送控制请求,所述控制请求用于指示所述电源管理驱动查找所述bios程序的io节点。

在其中一个实施例中,所述利用所述io节点使所述bios程序对目标pcie设备执行对应的控制策略,包括:

利用所述io节点发送通知信号至所述bios程序,以使所述bios程序对所述目标pcie设备执行对应的控制策略,其中,所述通知信号携带所述目标pcie设备的身份信息及对应的控制策略。

在其中一个实施例中,所述以使所述bios程序对所述目标pcie设备执行对应的控制策略,包括:控制所述目标pcie设备的硬件管脚以执行对应的控制策略。

在其中一个实施例中,在控制所述目标pcie设备枚举扫描之前,所述控制策略还包括:控制所述目标pcie设备掉电,之后重新上电。

在其中一个实施例中,所述身份信息包括所述pcie设备的标识信息和寄存器地址信息。

在其中一个实施例中,所述获取所述pcie设备的身份信息之前,所述方法还包括:利用深度优先算法对多个所述pcie总线进行遍历,以查找多个所述pcie总线连接的所述pcie设备。

在其中一个实施例中,所述利用深度优先算法对所述pcie总线进行遍历,包括:检测pcie插槽内是否插置有所述pcie设备。

上述启动pcie设备扫描的方法,方法包括:当所述linux操作系统启动时,所述主设备对所述pcie设备进行初始化扫描;获取所述pcie设备的身份信息;加载与所述身份信息对应的电源管理驱动,所述电源管理驱动用于向所述linux操作系统提供对pcie设备供电的控制方法的接口函数;当linux操作系统需要对目标pcie设备进行重新扫描识别时,获取所述目标pcie设备的身份信息;调用所述接口函数以使所述电源管理驱动查找所述bios程序的io节点;利用所述io节点使所述bios程序对所述目标pcie设备执行对应的控制策略,所述控制策略至少包括枚举扫描。通过调用电源管理驱动提供的接口函数,实现对目标pcie设备执行对应的包括枚举扫描控制策略,克服了在linux操作系统运行过程中,无法对pcie设备进行扫描识别的问题。

附图说明

图1为本申请一实施例的启动pcie设备扫描方法的应用环境示意图;

图2为本申请一实施例的启动pcie设备扫描方法的流程图;

图3为本申请一实施例的步骤获取pcie设备的身份信息的流程图。

具体实施方式

为了便于理解本申请,为使本申请的上述目的、特征和优点能够更加明显易懂,下面结合附图对本申请的具体实施方式做详细的说明。在下面的描述中阐述了很多具体细节以便于充分理解本申请,附图中给出了本申请的较佳实施方式。但是,本申请可以以许多不同的形式来实现,并不限于本文所描述的实施方式。相反地,提供这些实施方式的目的是使对本申请的公开内容理解的更加透彻全面。本申请能够以很多不同于在此描述的其它方式来实施,本领域技术人员可以在不违背本申请内涵的情况下做类似改进,因此本申请不受下面公开的具体实施例的限制。

此外,在本申请的描述中,“多个”的含义是至少两个,例如两个,三个等,除非另有明确具体的限定。

除非另有定义,本文所使用的所有的技术和科学术语与属于本申请的技术领域的技术人员通常理解的含义相同。本文中所使用的术语只是为了描述具体的实施方式的目的,不是旨在于限制本申请。本文所使用的术语“和/或”包括一个或多个相关的所列项目的任意的和所有的组合。

本申请实施例提供一种启动pcie设备扫描的方法,其在如图1所示系统框架下执行,系统框架由主设备10、bios芯片20和pcie设备30组成。其中,主设备10与pcie设备30通过pcie总线连接,且主设备10运行linux操作系统,且主设备10主板设有bios芯片20,bios芯片20内置bios程序。

外设部件互连标准(peripheralcomponentinterconnectexpress,pcie)是一种高速串行计算机扩展总线标准,它的主要优势就是数据传输速率高,被广泛用于通信领域。主设备10运行linux操作系统,并通过pcie总线外接的pcie设备30。pcie设备30指的是支持pcie的外部设备。在主设备10上电后,linux操作系统开机阶段,处理器将对外接的所有的pcie设备30进行初始化配置以及枚举,并对pcie总线树进行遍历查找,以分配相关的总线号和总线的地址资源,最终完成对pcie设备30的识别。linux操作系统对pcie设备30的硬件控制需要由bios芯片20实现。

基本输入输出系统(basicinputoutputsystem,bios)芯片20是设在计算机主板上的一块芯片,储存着bios设置程序,保存着计算机最重要的基本输入输出的程序、系统设置信息、开机后自检程序和系统自启动程序。bios芯片20主要功能是为计算机提供最底层的、最直接的硬件设置和控制。

本申请实施例提供一种启动pcie设备扫描的方法,如图2所示,该方法包括:

步骤201、当linux操作系统启动时,主设备对pcie设备进行初始化扫描;

在主设备上电后,运行的linux操作系统处于开机阶段,处理器将对外接的所有的pcie设备进行初始化配置以及枚举,并对pcie总线树进行遍历查找,以分配相关的总线号和总线的地址资源,最终完成对pcie设备的识别。

步骤202、获取pcie设备的身份信息;

遍历当前处理器系统中的所有pcie设备,获取pcie设备的身份信息,其中,身份信息可以是由字母、数字、下划线和/或特殊符号组成的用于标识pcie设备的序列,对于序列的长度由工程师根据实际需求自行设置。

在其中一个实施例中,身份信息包括:pcie设备的标识信息和寄存器地址信息。

标识信息指的是pcie设备硬件用于标识身份的信息,如由字母、数字、下划线和/或特殊符号组成序列。寄存器地址通常是指cpu用来查找通用寄存器在计算机所在的位置的地址。。

步骤203、加载与身份信息对应的电源管理驱动,电源管理驱动用于向linux操作系统提供对pcie设备供电的控制方法的接口函数;

电源管理驱动对外提供控制pcie设备的接口函数,该接口函数可以供linux操作系统或其它程序调用,如主设备的外接设备操作系统也可以调用该接口函数,以实现对pcie设备进行重新扫描。

步骤204、当linux操作系统需要对目标pcie设备进行重新扫描识别时,获取目标pcie设备的身份信息;

当linux操作系统需要对pcie设备进行重新扫描识别时候,如pcie设备掉电或linux操作系统休眠被唤醒,将无法对pcie设备进行重新扫描。linux操作系统自动对所有的外接pcie设备,或linux操作系统内载程序设定的部分外接pcie设备,或者根据用户指令对指定的外接pcie设备,进行重新枚举扫描。其中,需要重新进行枚举扫描的设备称为目标pcie设备,目标pcie设备的身份信息为目标身份信息。

步骤205、调用接口函数以使电源管理驱动查找bios程序的io节点;

linux操作系统、其它程序调用、或外设的操作系统调用接口函数,将使得电源管理驱动查找bios程序的io节点,io节点包括bios程序控制对象信息和输入输出信息,电源管理驱动找到io节点可以驱动bios程序对目标pcie设备执行对应的操作。

在其中一个实施例中,调用接口函数以使电源管理驱动查找bios程序的io节点,包括:调用接口函数向电源管理驱动发送控制请求,控制请求用于指示电源管理驱动查找bios程序的io节点。

加载pcie设备的电源管理驱动程序。电源管理驱动加载完成后根据保存的目标pcie设备的目标身份信息查找对该目标pcie设备进行控制的bios程序的io节点。

步骤206、利用io节点使bios程序对目标pcie设备执行对应的控制策略,控制策略至少包括枚举扫描。

当电源管理驱动查找bios程序的io节点后,io节点包括bios程序控制对象信息和输入输出信息,电源管理驱动找到io节点将能够获取外接的pcie设备,进而可以驱动bios程序对目标pcie设备执行对应的控制操作。

在其中一个实施例中,利用io节点使bios程序对目标pcie设备执行对应的控制策略,包括:利用io节点发送通知信号至bios程序,以使bios程序对目标pcie设备执行对应的控制策略,其中,通知信号携带目标pcie设备的身份信息及对应的控制策略。

电源管理驱动查找bios程序的io节点,io节点包括bios程序控制对象信息和输入输出信息。电源管理驱动能够根据io节点发送通知信号至bios程序,通知信号携带目标pcie设备的身份信息及对应的控制策略。bios程序接收到通知信号,将根据目标身份信息找到对应的目标pcie设备,且对该目标pcie设备执行对应的控制策略。

在其中一个实施例中,以使bios程序对目标pcie设备执行对应的控制策略,包括:控制目标pcie设备的硬件管脚以执行对应的控制策略。

通过控制目标pcie设备的硬件管脚,例如控制硬件管脚的输入信号,或者是使能端的电平控制,进而实现对目标pcie设备的控制。

在其中一个实施例中,在控制目标pcie设备枚举扫描之前,控制策略还包括:控制目标pcie设备掉电并上电。

先控制目标pcie设备掉电,然后使其上电,保证目标pcie设备处于上电重启状态,再控制目标pcie设备进行扫描。

在其中一个实施例中,提供获取pcie设备的身份信息的方法,如图3所示,该方法包括:

步骤301、利用bios程序获取pcie设备的身份信息,并保存至linux操作系统和bios程序之间的抽象层;

bios芯片是设在计算机主板上的一块芯片,储存着bios设置程序,基本输入输出系统保存着计算机最重要的基本输入输出的程序、系统设置信息、开机后自检程序和系统自启动程序。其主要功能是为计算机提供最底层的、最直接的硬件设置和控制。bios芯片是连接操作系统与硬件设备的一座桥梁,负责解决硬件的即时要求。linux操作系统获取pcie设备的身份信息需要通过bios程序获取并保存至linux操作系统和bios程序之间的抽象层中。其中,抽象层是位于操作系统内核与硬件之间的接口层,其目的在于将硬件抽象化。它隐藏了特定平台的硬件接口细节,为操作系统提供虚拟硬件平台,使其具有硬件无关性,可在多种平台上进行移植。

在其中一个实施例中,当linux操作系统支持高级配置和电源管理接口(advancedconfigurationandpowermanagementinterface,acpi)功能时,抽象层包括acpi。

当linux操作系统支持acpi功能时,如intel的主板,抽象层为acpi。acpi定义了操作系统、bios程序和系统硬件之间的新型工作接口。这些新接口包括允许操作系统控制电源管理和设备配置的机制。

在其中一个实施例中,抽象层为板级支持包。

当linux操作系统不支持acpi功能时,如arm的主板,抽象层为板级支持包(boardsupportpackage,bsp)。bsp是介于主板硬件和操作系统中驱动层程序之间的一层,一般认为它属于操作系统一部分,主要是实现对操作系统的支持,为上层的驱动程序提供访问硬件设备寄存器的函数包,使之能够更好的运行于硬件主板。

步骤302、控制sysfs文件系统从抽象层中获取身份信息,并保存身份信息至存储链表中;其中,linux操作系统包括sysfs文件系统和存储链表。

当系统正常开机上电,完成pcie设备扫描后,通过sysfs文件系统搜索pcie总线上所有设备硬件识别id信息和/或寄存器地址信息,并将获取的身份信息存储在链表数据结果中。sysfs文件系统是一个特殊文件系统,用于将系统中的设备组织成层次结构,并向用户模式程序提供详细的内核数据结构信息,sysfs文件系统向用户空间展示了驱动设备的层次结构。我们都知道设备和对应的驱动都是由内核管理的,这些对于用户空间是不可见的。现在通过sysfs文件系统可以在用户空间直观的了解设备驱动的层次结构。

在其中一个实施例中,获取pcie设备的身份信息之前,方法还包括:利用深度优先算法对多个pcie总线进行遍历,以查找多个pcie总线连接的pcie设备。

pcie设备的初始化通常是在linux操作系统初始化阶段,它主要工作是遍历当前处理器系统中的所有pcie设备,并对这些设备进行初始化配置。在遍历过程中,通常使用了深度优先(depthfirstsearch,dfs)算法对pcie总线树进行遍历查找,并分配相关的总线号和总线的地址资源。其中,深度优先搜索,是图论中的经典算法。其利用深度优先搜索算法可以产生目标图的相应拓扑排序表,利用拓扑排序表可以方便的解决很多相关的图论问题,如最大路径问题等。

在其中一个实施例中,利用深度优先算法对pcie总线进行遍历,包括:检测pcie插槽内是否插置有所述pcie设备。

pcie插槽的功能比较单一,给使用pcie通道的设备提供一个接口,但是使用pcie通道的设备不只有显卡。在很多电脑主板上,并没有标配无线模块,可以通过pcie插槽另外接一块无线网卡,即可让电脑使用wifi和蓝牙功能。相比于usb无线网卡,pcie无线网卡带宽更大,性能更好更稳定。

应该理解的是,虽然图2和图3的流程图中的各个步骤按照箭头的指示依次显示,但是这些步骤并不是必然按照箭头指示的顺序依次执行。除非本文中有明确的说明,这些步骤的执行并没有严格的顺序限制,这些步骤可以以其它的顺序执行。而且,图2和图3中的至少一部分步骤可以包括多个子步骤或者多个阶段,这些子步骤或者阶段并不必然是在同一时刻执行完成,而是可以在不同的时刻执行,这些子步骤或者阶段的执行顺序也不必然是依次进行,而是可以与其它步骤或者其它步骤的子步骤或者阶段的至少一部分轮流或者交替地执行。

上述启动pcie设备扫描的方法,方法包括:linux操作系统启动时,主设备对pcie设备进行初始化扫描;获取pcie设备的身份信息;加载与身份信息对应的电源管理驱动,电源管理驱动用于向linux操作系统提供对pcie设备供电的控制方法的接口函数;当linux操作系统需要对目标pcie设备进行重新扫描识别时,获取所述目标pcie设备的身份信息;调用接口函数以使电源管理驱动查找bios程序的io节点;利用所述io节点使所述bios程序对所述目标pcie设备执行对应的控制策略,所述控制策略至少包括枚举扫描。通过调用电源管理驱动提供的接口函数,实现对目标pcie设备执行对应的包括枚举扫描控制策略,克服了在linux操作系统运行过程中,无法对pcie设备进行扫描识别的问题。

以上所述实施例的各技术特征可以进行任意的组合,为使描述简洁,未对上述实施例中的各个技术特征所有可能的组合都进行描述,然而,只要这些技术特征的组合不存在矛盾,都应当认为是本说明书记载的范围。需要说明的是,本申请的“一实施例中”、“例如”、“又如”等,旨在对本申请进行举例说明,而不是用于限制本申请。

以上所述实施例仅表达了本申请的几种实施方式,其描述较为具体和详细,但并不能因此而理解为对申请专利范围的限制。应当指出的是,对于本领域的普通技术人员来说,在不脱离本申请构思的前提下,还可以做出若干变形和改进,这些都属于本申请的保护范围。因此,本申请专利的保护范围应以所附权利要求为准。

当前第1页1 2 
网友询问留言 已有1条留言
  • 访客 来自[中国] 2023年03月14日 17:41
    您好,你所说的重启是指硬重启吗?软重启电脑主机会不会重新扫描pcie设备?
    0
1