一种PCI总线设备枚举方法和装置转让专利

申请号 : CN201810975711.9

文献号 : CN110858184A

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 霍栋博王玉钱

申请人 : 龙芯中科技术有限公司

摘要 :

本发明提供了一种PCI总线设备枚举方法和装置。所述方法包括:在对PCI总线进行扫描时,判断扫描需求是否为扫描全部总线;当判定所述扫描需求为扫描部分总线时,获取连接PCI设备的总线的总线信息和所述PCI设备的设备信息;根据所述总线信息和所述设备信息为所述PCI设备分配空间。本发明实施例提高了扫描效率,解决了PMON无法启动的问题,提升了用户体验,提高了开发人员的工作效率。

权利要求 :

1.一种PCI总线设备枚举方法,其特征在于,所述方法包括:在对PCI总线进行扫描时,判断扫描需求是否为扫描全部总线;

当判定所述扫描需求为扫描部分总线时,获取连接PCI设备的总线的总线信息和所述PCI设备的设备信息;

根据所述总线信息和所述设备信息为所述PCI设备分配空间。

2.根据权利要求1所述的方法,其特征在于,所述判断扫描需求是否为扫描全部总线,包括:判断预设的第一环境变量对应的数据是否为空;

当所述第一环境变量对应的数据为空时,判定所述扫描需求为所述扫描全部总线;

当所述第一环境变量对应的数据不为空时,判定所述扫描需求为所述扫描部分总线。

3.根据权利要求2所述的方法,其特征在于,在所述判定所述扫描需求为所述扫描全部总线之后,所述方法还包括:扫描全部总线;

所述扫描全部总线包括:

对所述PCI总线的每条总线进行扫描,得到所述连接PCI设备的总线的总线信息和所述PCI设备的设备信息;

按照预设格式存储所述总线信息和所述设备信息。

4.根据权利要求3所述的方法,其特征在于,所述方法还包括:当判定所述扫描需求为扫描部分总线时,若未获取到所述连接PCI设备的总线的总线信息和所述PCI设备的设备信息,则执行所述扫描全部总线的步骤。

5.根据权利要求3所述的方法,其特征在于,所述总线信息包括总线编号,所述设备信息包括设备编号,所述按照预设格式存储所述总线信息和所述设备信息,包括:将所述总线编号和所述设备编号按照所述预设格式生成第一数组;

将所述第一数组赋值给第二环境变量;

所述获取连接PCI设备的总线的总线信息和所述PCI设备的设备信息,包括:获取所述第二环境变量;

解析所述第二环境变量,并根据解析结果对应设置第二数组;其中,所述第二数组据包括每条总线的每个端口上是否连接PCI设备的指示信息;

根据所述第二数组,获取连接PCI设备的总线的总线信息和所述PCI设备的设备信息。

6.根据权利要求5所述的方法,其特征在于,所述设备信息还包括设备类型和所需空间;

所述根据所述总线信息和所述设备信息为所述PCI设备分配空间,包括:根据所述总线编号和所述设备编号查找连接的所述PCI设备;

根据所述设备类型和所述所需空间,为查找到的所述PCI设备分配空间。

7.一种PCI总线设备枚举装置,其特征在于,所述装置包括:扫描需求判断模块,用于在对PCI总线进行扫描时,判断扫描需求是否为扫描全部总线;

信息获取模块,用于当判定所述扫描需求为扫描部分总线时,获取连接PCI设备的总线的总线信息和所述PCI设备的设备信息;

空间分配模块,用于根据所述总线信息和所述设备信息为所述PCI设备分配空间。

8.根据权利要求7所述的装置,其特征在于,所述扫描需求判断模块包括:环境变量判断子模块,用于判断预设的第一环境变量对应的数据是否为空;

第一判定子模块,用于当所述第一环境变量对应的数据为空时,判定所述扫描需求为所述扫描全部总线;

第二判定子模块,用于当所述第一环境变量对应的数据不为空时,判定所述扫描需求为所述扫描部分总线。

9.根据权利要求8所述的装置,其特征在于,在所述第一判定子模块之后,所述装置还包括:第一总线扫描模块,用于扫描全部总线;

所述第一总线扫描模块,具体用于对所述PCI总线的每条总线进行扫描,得到所述连接PCI设备的总线的总线信息和所述PCI设备的设备信息;

信息存储模块,用于按照预设格式存储所述总线信息和所述设备信息。

10.根据权利要求9所述的装置,其特征在于,所述装置还包括:第二总线扫描模块,用于当判定所述扫描需求为扫描部分总线时,若未获取到所述连接PCI设备的总线的总线信息和所述PCI设备的设备信息,则执行所述扫描全部总线的步骤。

11.根据权利要求9所述的装置,其特征在于,所述总线信息包括总线编号,所述设备信息包括设备编号,所述信息存储模块包括:数组生成子模块,用于将所述总线编号和所述设备编号按照所述预设格式生成第一数组;

数组存储子模块,用于将所述第一数组赋值给第二环境变量;

所述信息获取模块包括:

环境变量获取子模块,用于获取所述第二环境变量;

环境变量解析子模块,用于解析所述第二环境变量,并根据解析结果对应设置第二数组;其中,所述第二数组包括每条总线的每个端口上是否连接PCI设备的指示信息;

信息获取子模块,用于根据所述第二数组,获取连接PCI设备的总线的总线信息和所述PCI设备的设备信息。

12.根据权利要求11所述的装置,其特征在于,所述设备信息还包括设备类型和所需空间;

所述空间分配模块包括:

设备查找子模块,用于根据所述总线编号和所述设备编号查找连接的所述PCI设备;

空间分配子模块,用于根据所述设备类型和所述所需空间,为查找到的所述PCI设备分配空间。

说明书 :

一种PCI总线设备枚举方法和装置

技术领域

[0001] 本发明涉及总线技术领域,特别是涉及一种PCI总线设备枚举方法和装置。

背景技术

[0002] MIPS(Microprocessor without interlocked piped stages,无内部互锁流水级的微处理器)架构是一种通用的RISC(Reduced Instruction Set Computer,精简指令集计算机)架构,基于MIPS架构的CPU(Central Processing Unit,中央处理器单元)具有高性能、低功耗的特点,在服务器、高性能计算机、低能耗数据中心、个人高性能计算机、高端桌面应用、高吞吐计算应用、工业控制、数字信号处理、高端嵌入式应用等产品中均有广阔的市场应用前景。
[0003] PMON(Prom Monitor)应用于MIPS架构处理器上的BIOS(Basic Input Output System,基本输入输出系统),PMON具有强大的功能,包括硬件初始化、操作系统引导和软硬件测试等功能。
[0004] 目前,PMON的PCI(Peripheral Component Interconnect,外部设备互连)总线设备枚举存在扫描时间长,PMON无法启动的问题,严重影响了用户体验,开发人员在当前基础上进行进一步的开发难度很大。

发明内容

[0005] 鉴于上述问题,本发明实施例提供一种PCI总线设备枚举方法和装置,以解决PCI总线设备枚举扫描时间长,PMON无法启动的问题。
[0006] 依据本发明实施例的一个方面,提供了一种PCI总线设备枚举方法,所述方法包括:
[0007] 在对PCI总线进行扫描时,判断扫描需求是否为扫描全部总线;
[0008] 当判定所述扫描需求为扫描部分总线时,获取连接PCI设备的总线的总线信息和所述PCI设备的设备信息;
[0009] 根据所述总线信息和所述设备信息为所述PCI设备分配空间。
[0010] 可选地,所述判断扫描需求是否为扫描全部总线,包括:
[0011] 判断预设的第一环境变量对应的数据是否为空;
[0012] 当所述第一环境变量对应的数据为空时,判定所述扫描需求为所述扫描全部总线;
[0013] 当所述第一环境变量对应的数据不为空时,判定所述扫描需求为所述扫描部分总线。
[0014] 可选地,在所述判定所述扫描需求为所述扫描全部总线之后,所述方法还包括:
[0015] 扫描全部总线;
[0016] 所述扫描全部总线包括:
[0017] 对所述PCI总线的每条总线进行扫描,得到所述连接PCI设备的总线的总线信息和所述PCI设备的设备信息;
[0018] 按照预设格式存储所述总线信息和所述设备信息。
[0019] 可选地,所述方法还包括:
[0020] 当判定所述扫描需求为扫描部分总线时,若未获取到所述连接PCI设备的总线的总线信息和所述PCI设备的设备信息,则执行所述扫描全部总线的步骤。
[0021] 可选地,所述总线信息包括总线编号,所述设备信息包括设备编号,所述按照预设格式存储所述总线信息和所述设备信息,包括:
[0022] 将所述总线编号和所述设备编号按照所述预设格式生成第一数组;
[0023] 将所述第一数组赋值给第二环境变量;
[0024] 所述获取连接PCI设备的总线的总线信息和所述PCI设备的设备信息,包括:
[0025] 获取所述第二环境变量;
[0026] 解析所述第二环境变量,并根据解析结果对应设置第二数组;其中,所述第二数组据包括每条总线的每个端口上是否连接PCI设备的指示信息;
[0027] 根据所述第二数组,获取连接PCI设备的总线的总线信息和所述PCI设备的设备信息。
[0028] 可选地,所述设备信息还包括设备类型和所需空间;
[0029] 所述根据所述总线信息和所述设备信息为所述PCI设备分配空间,包括:
[0030] 根据所述第二数组的所述指示信息查找连接的所述PCI设备;
[0031] 根据所述设备类型和所述所需空间,为查找到的所述PCI设备分配空间。
[0032] 本发明实施例还提供了一种PCI总线设备枚举装置,所述装置包括:
[0033] 扫描需求判断模块,用于在对PCI总线进行扫描时,判断扫描需求是否为扫描全部总线;
[0034] 信息获取模块,用于当判定所述扫描需求为扫描部分总线时,获取连接PCI设备的总线的总线信息和所述PCI设备的设备信息;
[0035] 空间分配模块,用于根据所述总线信息和所述设备信息为所述PCI设备分配空间。
[0036] 可选地,所述扫描需求判断模块包括:
[0037] 环境变量判断子模块,用于判断预设的第一环境变量对应的数据是否为空;
[0038] 第一判定子模块,用于当所述第一环境变量对应的数据为空时,判定所述扫描需求为所述扫描全部总线;
[0039] 第二判定子模块,用于当所述第一环境变量对应的数据不为空时,判定所述扫描需求为所述扫描部分总线。
[0040] 可选地,在所述第一判定子模块之后,所述装置还包括:
[0041] 第一总线扫描模块,用于扫描全部总线;
[0042] 所述第一总线扫描模块,具体用于对所述PCI总线的每条总线进行扫描,得到所述连接PCI设备的总线的总线信息和所述PCI设备的设备信息;
[0043] 信息存储模块,用于按照预设格式存储所述总线信息和所述设备信息。
[0044] 可选地,所述装置还包括:
[0045] 第二总线扫描模块,用于当判定所述扫描需求为扫描部分总线时,若未获取到所述连接PCI设备的总线的总线信息和所述PCI设备的设备信息,则执行所述扫描全部总线的步骤。
[0046] 可选地,所述总线信息包括总线编号,所述设备信息包括设备编号,所述信息存储模块包括:
[0047] 第一数组生成子模块,用于将所述总线编号和所述设备编号按照所述预设格式生成第一数组;
[0048] 数组存储子模块,用于将所述第一数组赋值给第二环境变量;
[0049] 所述信息获取模块包括:
[0050] 环境变量获取子模块,用于获取所述第二环境变量;
[0051] 环境变量解析子模块,用于解析所述第二环境变量,并根据解析结果对应设置第二数组;其中,所述第二数组据包括每条总线的每个端口上是否连接PCI设备的指示信息;
[0052] 信息获取子模块,根据所述第二数组,获取连接PCI设备的总线的总线信息和所述PCI设备的设备信息。
[0053] 可选地,所述设备信息还包括设备类型和所需空间;
[0054] 所述空间分配模块包括:
[0055] 设备查找子模块,用于根据所述第二数组的所述指示信息查找连接的所述PCI设备;
[0056] 空间分配子模块,用于根据所述设备类型和所述所需空间,为查找到的所述PCI设备分配空间。
[0057] 依据本发明实施例,在对PCI总线进行扫描时,判断扫描需求是否为扫描全部总线;当判定扫描需求为扫描部分总线时,获取连接PCI设备的总线的总线信息和PCI设备的设备信息,即在分配空间前无需每次都对全部总线进行扫描,因此提高了扫描效率。在获取总线信息和设备信息后,根据总线信息和设备信息为PCI设备分配空间。由于特定PCI设备对空间资源有特定要求,因此根据总线信息和设备信息分配空间,可以解决PCI总线上扩展设备较多时,未给特定PCI设备分配空间,或者为特定PCI设备分配的空间不正确而造成PMON无法启动的问题,提升了用户体验,提高了开发人员的工作效率。
[0058] 上述说明仅是本发明技术方案的概述,为了能够更清楚了解本发明的技术手段,而可依照说明书的内容予以实施,并且为了让本发明的上述和其它目的、特征和优点能够更明显易懂,以下特举本发明的具体实施方式。

附图说明

[0059] 通过阅读下文优选实施方式的详细描述,各种其他的优点和益处对于本领域普通技术人员将变得清楚明了。附图仅用于示出优选实施方式的目的,而并不认为是对本发明的限制。而且在整个附图中,用相同的参考符号表示相同的部件。在附图中:
[0060] 图1是本发明实施例一提供的一种PCI总线设备枚举方法的步骤流程图;
[0061] 图2是本发明实施例二提供的一种PCI总线设备枚举方法的步骤流程图;
[0062] 图3是本发明实施例三提供的一种PCI总线设备枚举装置的结构示意图。

具体实施方式

[0063] 下面将参照附图更详细地描述本公开的示例性实施例。虽然附图中显示了本公开的示例性实施例,然而应当理解,可以以各种形式实现本公开而不应被这里阐述的实施例所限制。相反,提供这些实施例是为了能够更透彻地理解本公开,并且能够将本公开的范围完整的传达给本领域的技术人员。
[0064] PCI枚举是PCI总线设备初始化中不可缺少的一个步骤,它为了动态查询系统的PCI总线设备,并为查询到的PCI总线设备分配资源,以及通过加载相应的驱动来完成PCI总线设备的初始化,进而使能PCI总线设备。
[0065] 实施例一
[0066] 详细介绍本发明实施例提供的一种PCI总线设备枚举方法。
[0067] 参照图1,示出了本发明实施例中的一种PCI总线设备枚举方法的步骤流程图。所述方法包括:
[0068] 步骤101,在对PCI总线进行扫描时,判断扫描需求是否为扫描全部总线。
[0069] 本实施例中,PCI总线设备枚举包括PCI扫描和分配空间两个阶段,现有技术中,PCI扫描通常是扫描全部总线,由于PCI总线共有256条总线、每条总线可接32个PCI设备,因此当扫描全部总线时,存在扫描时间很长、扫描效率较低的问题。本发明实施例中,根据PCI总线的扫描需求(即实际情况)进行扫描,在需要扫描全部总线时,对全部总线进行扫描,在不需要扫描全部总线时,只对部分总线进行扫描,也就是只针对设定总线进行扫描。例如,在PMON第一次启动时,需要获知每条总线的情况,即需要对全部总线进行扫描,此时扫描需求为扫描全部总线;在PMON再次启动时,由于已获知全部总线的情况,此时扫描需求为扫描部分总线。又比如,在新添加了PCI设备时,需要扫描全部总线,重新获知全部总线的情况,包括新添加的PCI设备的情况,此时扫描需求为扫描全部总线。扫描需求可以设置为一个环境变量,通过对环境变量进行赋值,将扫描需求设置为扫描全部总线或者是扫描部分总线,以及通过获取对该环境变量的赋值,确定扫描需求为扫描全部总线或者扫描部分总线。本发明实施例对此不作详细限定,可以根据实际情况进行设置。
[0070] 步骤102,当判定所述扫描需求为扫描部分总线时,获取连接PCI设备的总线的总线信息和所述PCI设备的设备信息。
[0071] 本实施例中,当无需扫描全部总线时,即扫描需求为扫描部分总线,可以从存储设备中获取已连接PCI设备的总线的总线信息,以及连接在总线上的PCI设备的设备信息。由于扫描需求为扫描部分总线时,只需直接获取总线信息和设备信息,而无需对全部总线进行扫描,因此可以节省扫描时间,提高扫描效率。上述存储设备可以是Flash,也可以是其他设备。总线信息可以包括总线编号,比如第1条总线的总线编号为001;也可以包括其他信息,比如总线的数据宽度、总线速度等等。设备信息可以包括PCI设备的设备编号,比如PCI设备为002号设备;也可以包括设备类型,比如PCI设备是独立显示设备,还可以包括其他信息,比如设备优先级。本发明实施例对存储设备、总线信息和设备信息均不作详细限定,可以根据实际情况进行设置。
[0072] 步骤103,根据所述总线信息和所述设备信息为所述PCI设备分配空间。
[0073] 本实施例中,根据总线信息和设备信息,可以确定待分配空间的PCI设备,并且根据PCI设备的实际情况分配空间,PCI设备的实际情况可以根据PCI设备的设备信息来确定。例如,设备信息包括设备类型,可以按照设备类型对应的优先级进行空间分配,先为独立显示设备分配IO空间,再为集成显示设备分配IO空间,最后为其他PCI设备分配IO空间,并且其他PCI设备的IO空间的启始地址为0x4000+0x2000。此外,设备信息还可以包含PCI设备的空间需求,可以根据PCI设备实际空间需求进行分配,避免为特定PCI设备分配的空间不正确而造成PMON无法启动的问题。空间可以包括IO(In Out,输入输出)空间和MEM(Memory,存储)空间。本发明实施例对此不作详细限定,可以根据实际情况进行设置。
[0074] 由于初次启动PMON或者添加新的PCI设备时,执行的是扫描全部总线的步骤,记录了总线信息和设备信息,而重启PMON并不会导致总线信息和设备信息的丢失,但是会造成为每个PCI设备分配的空间收回,因此,当扫描需求为部分总线时,无需重新扫描,仅需要分配空间即可。
[0075] 综上所述,本发明实施例中,在对PCI总线进行扫描时,判断扫描需求是否为扫描全部总线;当判定扫描需求为扫描部分总线时,获取连接PCI设备的总线的总线信息和PCI设备的设备信息,即在分配空间前无需每次都对全部总线进行扫描,因此提高了扫描效率。在获取总线信息和设备信息后,根据总线信息和设备信息为PCI设备分配空间。由于特定PCI设备对空间有特定要求,因此根据设备信息分配空间,可以解决PCI总线上扩展设备较多时,未给特定PCI设备分配空间,或者为特定PCI设备分配的空间不正确而造成PMON无法启动的问题,提升了用户体验,提高了开发人员的工作效率。
[0076] 实施例二
[0077] 参照图2,示出了本发明实施例中的一种PCI总线设备枚举方法的步骤流程图。所述方法包括:
[0078] 步骤201,判断预设的第一环境变量对应的数据是否为空。
[0079] 本实施例中,可以在BIOS首次启动进入内核时,预先设置第一环境变量;后续可以根据第一环境变量是否被定义,判断第一环境变量对应的数据是否为空。例如,预设的第一环境变量为fastboot,通过getenv函数返回第一环境变量fastboot对应的数据,当第一环境变量已被定义时,getenv函数返回第一环境变量fastboot对应的数据不为空;当第一环境变量未被定义时,getenv函数返回第一环境变量fastboot对应的数据为空。
[0080] 可选的,当PMON初次启动时,第一环境变量并不被定义,即第一环境变量对应的数据为空;当PMON再次启动时,第一环境变量已经被定义,即第一环境变量对应的数据并不为空;相应的,当PCI总线上增加新的PCI设备时,第一环境变量对应的数据将为空。
[0081] 步骤202,当所述第一环境变量对应的数据为空时,判定所述扫描需求为所述扫描全部总线。
[0082] 本实施例中,当未对第一环境变量进行定义时,第一环境变量对应的数据为空,判定扫描需求是扫描全部总线。例如,在PMON第一次启动时,不定义第一环境变量,第一环境变量对应的数据为空,从而判定扫描需求是扫描全部总线。又比如,PCI总线上新添加了PCI设备,也不定义第一环境变量,第一环境变量对应的数据为空,从而判定扫描需求是扫描全部总线。本发明实施例对此不作详细限定,可以根据实际情况进行设置。
[0083] 步骤203,扫描全部总线。
[0084] 本实施例中,PCI总线共有256条总线,每条总线上可接32个PCI设备。当扫描需求为扫描全部总线时,对PCI总线的每条总线进行扫描,判断各总线是否已连接PCI设备,得到连接PCI设备的总线的总线信息,以及连接在总线上的PCI设备的设备信息。比如,扫描全部总线后,得到第1条总线上连接有PCI设备,PCI设备的设备编号为002,设备类型为独立显示设备,所需空间为16k。本发明实施例对总线信息和设备信息不作详细限定,可以根据实际情况进行设置。
[0085] 步骤204,按照预设格式存储所述总线信息和所述设备信息。
[0086] 本实施例中,总线信息至少包括总线编号,设备信息至少包括设备编号。预设格式可以是在总线编号和设备编号之间采用“.”隔开,在不同设备之间采用“;”隔开。例如,存储的总线信息和设备信息格式为bus1.dev2;bus2.dev3。其中,bus1和bus2为总线编号,dev2和dev3分别为连接在不同总线上的PCI设备的设备编号。本发明实施例对预设格式不作详细限定,可以根据实际情况进行设置。
[0087] 可选地,存储总线编号和设备编号的过程具体可以包括如下步骤:
[0088] 子步骤一,将所述总线编号和所述设备编号按照所述预设格式生成第一数组。
[0089] 例如,可以基于总线编号“bus1”和设备编号“dev2”生成第一数组busrecordtmp,第一数组是字符串数组。
[0090] 子步骤二,将所述第一数组赋值给第二环境变量。
[0091] 例如,预先设置第二环境变量devrecord,将第一数组busrecordtmp赋值给第二环境变量devrecord,再将第二环境变量devrecord存储到Flash中。
[0092] 设备信息还可以包括设备类型和所需空间,将设备类型和所需空间按照预设格式存储在预设链表中,或者是存储在Flash中,本发明实施例不作详细限定,可以根据实际情况进行设置。
[0093] 步骤205,当所述第一环境变量对应的数据不为空时,判定所述扫描需求为所述扫描部分总线。
[0094] 本实施例中,当第一环境变量已被定义时,第一环境变量对应的数据不为空,判定扫描条件为扫描部分总线。
[0095] 步骤206,当所述扫描需求为扫描部分总线时,获取已连接PCI设备的总线的总线信息和各所述总线连接的PCI设备的设备信息。
[0096] 本实施例中,当扫描需求为扫描部分总线时,从存储设备中获取总线编号和设备编号。具体地,可以包括如下步骤:
[0097] 子步骤一,获取所述第二环境变量。
[0098] 具体地,从存储设备Flash中获取第二环境变量devrecord。
[0099] 子步骤二,解析所述第二环境变量,并根据解析结果对应设置第二数组;其中,所述第二数组据包括每条总线的每个端口上是否连接PCI设备的指示信息。
[0100] 具体地,由于总线编号和设备编号是按照预设格式赋值给第二环境变量的,因此可以按照预设格式从第二环境变量中解析出总线编号和设备编号。例如,从第二环境变量devrecord中解析出总线编号为“bus1”、设备编号为“dev2”。解析出总线编号和设备编号后,可以根据总线编号和设备编号将第二数组busrecord中“bus1.dev2”的对应元素设置为1,以表征总线bus1上已连接PCI设备dev2。如果总线bus2上第一个接口未连接PCI设备,可以将第二数组busrecord中“bus2.dev1”的对应元素设置为0。进一步的,当第一数组发生变化时,第二数组对应第一数组的变化而改变。
[0101] 子步骤三,根据所述第二数组,获取连接PCI设备的总线的总线信息和所述PCI设备的设备信息。
[0102] 具体地,第二数组包括每条总线的每个端口上是否连接PCI设备的指示信息,因此可以根据第二数组确定连接PCI设备的总线,以及总线上连接的PCI设备,从而可以获取总线信息和设备信息。
[0103] 当判定所述扫描需求为扫描部分总线时,若未获取到所述连接PCI设备的总线的总线信息和所述PCI设备的设备信息,则执行步骤203,即重新扫描全部总线。
[0104] 步骤207,根据所述总线编号和所述设备编号查找连接的所述PCI设备。
[0105] 本实施例中,由于第二数组包括每条总线的每个端口上是否连接PCI设备的指示信息,因此可以根据指示信息确定连接PCI设备的总线的总线编号和已连接的PCI设备的设备编号,从而可以根据总线编号以及设备编号查找连接的PCI设备。例如,根据设置为“1”的bus1.dev2,查找第1条总线上编号为02的PCI设备。采用上述技术方案,利用第二数组记录每条总线的每个端口上是否连接PCI设备,当扫描需求为扫描部分总线时,第二数组中仅保存1或0的标识,直接从第二数组查找设置为“1”的总线编号和设备编号即可,无需遍历第一数组,有效节约了系统功耗,提高了扫描PCI总线设备的效率。
[0106] 步骤208,根据所述设备类型和所述所需空间,为查找到的所述PCI设备分配空间。
[0107] 本实施例中,在查找到PCI设备后,根据PCI设备的设备类型和所需空间为PCI设备分配空间。例如,查找到第1总线上编号为02的PCI设备,从预设链表中获取到PCI设备的设备类型为独立显示设备,所需IO空间为16k,则优先为该PCI设备分配16k的IO空间。
[0108] 综上所述,本发明实施例中,判断扫描需求是否为扫描全部总线;当扫描需求为扫描部分总线时,获取连接PCI设备的总线的总线信息和PCI设备的设备信息,即在分配空间前无需每次都对全部总线进行扫描,因此提高了扫描效率。在获取总线信息和设备信息后,根据总线信息和设备信息为PCI设备分配空间。由于特定PCI设备对空间有特定要求,因此根据设备信息分配空间,可以解决PCI总线上扩展设备较多时,未给特定PCI设备分配空间,或者为特定PCI设备分配的空间不正确而造成PMON无法启动的问题,提升了用户体验,提高了开发人员的工作效率。
[0109] 实施例三
[0110] 详细介绍本发明实施例提供的一种PCI总线设备枚举装置。
[0111] 参照图3,示出了本发明实施例中的一种PCI总线设备枚举装置的结构示意图。所述装置包括:
[0112] 扫描需求判断模块301,用于在对PCI总线进行扫描时,判断扫描需求是否为扫描全部总线;
[0113] 信息获取模块302,用于当判定所述扫描需求为扫描部分总线时,获取连接PCI设备的总线的总线信息和所述PCI设备的设备信息;
[0114] 空间分配模块303,用于根据所述总线信息和所述设备信息为所述PCI设备分配空间。
[0115] 可选地,所述扫描需求判断模块301包括:
[0116] 环境变量判断子模块,用于判断预设的第一环境变量对应的数据是否为空;
[0117] 第一判定子模块,用于当所述第一环境变量对应的数据为空时,判定所述扫描需求为所述扫描全部总线;
[0118] 第二判定子模块,用于当所述第一环境变量对应的数据不为空时,判定所述扫描需求为所述扫描部分总线。
[0119] 可选地,在所述第一判定子模块之后,所述装置还包括:
[0120] 第一总线扫描模块,用于扫描全部总线;
[0121] 所述第一总线扫描模块,具体用于对所述PCI总线的每条总线进行扫描,得到所述连接PCI设备的总线的总线信息和所述PCI设备的设备信息;
[0122] 信息存储模块,用于按照预设格式存储所述总线信息和所述设备信息。
[0123] 可选地,所述装置还包括:
[0124] 第二总线扫描模块,用于当判定所述扫描需求为扫描部分总线时,若未获取到所述连接PCI设备的总线的总线信息和所述PCI设备的设备信息,则执行所述扫描全部总线的步骤。
[0125] 可选地,所述总线信息包括总线编号,所述设备信息包括设备编号,所述信息存储模块包括:
[0126] 数组生成子模块,用于将所述总线编号和所述设备编号按照所述预设格式生成第一数组;
[0127] 第一数组存储子模块,用于将所述第一数组赋值给第二环境变量;
[0128] 所述信息获取模块302包括:
[0129] 环境变量获取子模块,用于获取所述第二环境变量;
[0130] 环境变量解析子模块,用于解析所述第二环境变量,并根据解析结果对应设置第二数组;其中,所述第二数组据包括每条总线的每个端口上是否连接PCI设备的指示信息;
[0131] 信息获取子模块,根据所述第二数组,获取连接PCI设备的总线的总线信息和所述PCI设备的设备信息。
[0132] 可选地,所述设备信息还包括设备类型和所需空间;
[0133] 所述空间分配模块303包括:
[0134] 设备查找子模块,用于根据所述第二数组的所述指示信息查找连接的所述PCI设备;
[0135] 空间分配子模块,用于根据所述设备类型和所述所需空间,为查找到的所述PCI设备分配空间。
[0136] 综上所述,本发明实施例中,判断扫描需求是否为扫描全部总线;当扫描需求为扫描部分总线时,获取连接PCI设备的总线的总线信息和PCI设备的设备信息,即在分配空间前无需每次都对全部总线进行扫描,因此提高了扫描效率。在获取总线信息和设备信息后,根据总线信息和设备信息为PCI设备分配空间。由于特定PCI设备对空间有特定要求,因此根据设备信息分配空间,可以解决PCI总线上扩展设备较多时,未给特定PCI设备分配空间,或者为特定PCI设备分配的空间不正确而造成PMON无法启动的问题,提升了用户体验,提高了开发人员的工作效率。
[0137] 需要说明的是,对于前述的方法实施例,为了简单描述,故将其都表述为一系列的动作组合,但是本领域技术人员应该知悉,本发明并不受所描述的动作顺序的限制,因为依据本发明,某些步骤可以采用其他顺序或者同时进行。其次,本领域技术人员也应该知悉,说明书中所描述的实施例均属于优选实施例,所涉及的动作并不一定是本发明所必需的。
[0138] 本说明书中的各个实施例均采用递进的方式描述,每条实施例重点说明的都是与其他实施例的不同之处,各个实施例之间相同相似的部分互相参见即可。
[0139] 本领域技术人员易于想到的是:上述各个实施例的任意组合应用都是可行的,故上述各个实施例之间的任意组合都是本发明的实施方案,但是由于篇幅限制,本说明书在此就不一一详述了。
[0140] 在此提供的PCI总线设备枚举方案不与任何特定计算机、虚拟系统或者其它设备固有相关。各种通用系统也可以与基于在此的示教一起使用。根据上面的描述,构造具有本发明方案的系统所要求的结构是显而易见的。此外,本发明也不针对任何特定编程语言。应当明白,可以利用各种编程语言实现在此描述的本发明的内容,并且上面对特定语言所做的描述是为了披露本发明的最佳实施方式。
[0141] 在此处所提供的说明书中,说明了大量具体细节。然而,能够理解,本发明的实施例可以在没有这些具体细节的情况下实践。在一些实例中,并未详细示出公知的方法、结构和技术,以便不模糊对本说明书的理解。
[0142] 类似地,应当理解,为了精简本公开并帮助理解各个发明方面中的一个或多个,在上面对本发明的示例性实施例的描述中,本发明的各个特征有时被一起分组到单个实施例、图、或者对其的描述中。然而,并不应将该公开的方法解释成反映如下意图:即所要求保护的本发明要求比在每个权利要求中所明确记载的特征更多的特征。更确切地说,如权利要求书所反映的那样,发明方面在于少于前面公开的单个实施例的所有特征。因此,遵循具体实施方式的权利要求书由此明确地并入该具体实施方式,其中每个权利要求本身都作为本发明的单独实施例。
[0143] 本领域那些技术人员可以理解,可以对实施例中的设备中的模块进行自适应性地改变并且把它们设置在与该实施例不同的一个或多个设备中。可以把实施例中的模块或单元或组件组合成一个模块或单元或组件,以及此外可以把它们分成多个子模块或子单元或子组件。除了这样的特征和/或过程或者单元中的至少一些是相互排斥之外,可以采用任何组合对本说明书(包括伴随的权利要求、摘要和附图)中公开的所有特征以及如此公开的任何方法或者设备的所有过程或单元进行组合。除非另外明确陈述,本说明书(包括伴随的权利要求、摘要和附图)中公开的每个特征可以由提供相同、等同或相似目的的替代特征来代替。
[0144] 此外,本领域的技术人员能够理解,尽管在此所述的一些实施例包括其它实施例中所包括的某些特征而不是其它特征,但是不同实施例的特征的组合意味着处于本发明的范围之内并且形成不同的实施例。例如,在权利要求书中,所要求保护的实施例的任意之一都可以以任意的组合方式来使用。
[0145] 本发明的各个部件实施例可以以硬件实现,或者以在一个或者多个处理器上运行的软件模块实现,或者以它们的组合实现。本领域的技术人员应当理解,可以在实践中使用微处理器或者数字信号处理器(DSP)来实现根据本发明实施例的PCI总线设备枚举方案中的一些或者全部部件的一些或者全部功能。本发明还可以实现为用于执行这里所描述的方法的一部分或者全部的设备或者装置程序(例如,计算机程序和计算机程序产品)。这样的实现本发明的程序可以存储在计算机可读介质上,或者可以具有一个或者多个信号的形式。这样的信号可以从因特网网站上下载得到,或者在载体信号上提供,或者以任何其他形式提供。
[0146] 应该注意的是上述实施例对本发明进行说明而不是对本发明进行限制,并且本领域技术人员在不脱离所附权利要求的范围的情况下可设计出替换实施例。在权利要求中,不应将位于括号之间的任何参考符号构造成对权利要求的限制。单词“包含”不排除存在未列在权利要求中的元件或步骤。位于元件之前的单词“一”或“一个”不排除存在多个这样的元件。本发明可以借助于包括有若干不同元件的硬件以及借助于适当编程的计算机来实现。在列举了若干装置的单元权利要求中,这些装置中的若干个可以是通过同一个硬件项来具体体现。单词第一、第二、以及第三等的使用不表示任何顺序。可将这些单词解释为名称。