本发明主要涉及设备加载技术领域,具体涉及一种在uboot中支持多路pcierc的方法、装置及存储介质。
背景技术:
当前很多系统采用了uefibios作为加载系统的固件程序,但是uefibios存在加载系统的总耗时比较长的情况,在一些对上电到进系统的耗时比较敏感的场合,往往采用uboot替换uefibios。
uefibios的pcie驱动程序采用一个pcierc和下挂的pcieswitch和pcieep构成一颗pcie设备树,多个pcierc组成pcie设备森林的模式来解决访问系统中任何pcie设备的问题。
uboot的pcie设备模型为单一的pcie设备树,这样就使得系统仅仅支持单路pcierc的访问。在嵌入式系统很多情况下是单路pcierc。在桌面级和服务器系统级大量的是多路pcierc的系统。uboot当前的单一pcierc支持,使得uboot在桌面级和服务器级系统的支持不完善。
技术实现要素:
本发明所要解决的技术问题是针对现有技术的不足,提供一种在uboot中支持多路pcierc的方法、装置及存储介质。
本发明解决上述技术问题的技术方案如下:一种在uboot中支持多路pcierc的方法,包括如下步骤:
在uboot中调用初始化函数;
通过所述初始化函数在uboot中创建虚拟pcierc设备;
通过所述初始化函数将待处理设备中待挂载pcierc设备作为子设备并挂载在所述虚拟pcierc设备中。
本发明解决上述技术问题的另一技术方案如下:一种在uboot中支持多路pcierc的装置,包括:
函数创建模块,用于在uboot中调用初始化函数;
处理模块,用于通过所述初始化函数在uboot中创建虚拟pcierc设备;
通过所述初始化函数将待处理设备中待挂载pcierc设备作为子设备并挂载在所述虚拟pcierc设备中。
本发明解决上述技术问题的另一技术方案如下:一种在uboot中支持多路pcierc的装置,包括存储器、处理器以及存储在所述存储器中并可在所述处理器上运行的计算机程序,当所述处理器执行所述计算机程序时,实现如上所述的在uboot中支持多路pcierc的方法。
本发明解决上述技术问题的另一技术方案如下:一种计算机可读存储介质,所述计算机可读存储介质存储有计算机程序,当所述计算机程序被处理器执行时,实现如上所述的在uboot中支持多路pcierc的方法。
本发明的有益效果是:通过构造一个虚拟的pcierc根设备,将真实的pcierc作为该虚拟设备的子设备,在uboot中调用pcie驱动的接口代码不需要做任何改动就达到了多路pcie设备的访问支持。
附图说明
图1为本发明实施例提供的在uboot中支持多路pcierc的方法示意性流程图;
图2为本发明实施例提供的在uboot中支持多路pcierc的装置的功能模块框图;
图3为本发明实施例提供的在uboot中支持多路pcierc的整个挂载过程的方法流程图;
图4为本发明实施例提供的在uboot中多路pcierc驱动的拓扑图。
具体实施方式
以下结合附图对本发明的原理和特征进行描述,所举实例只用于解释本发明,并非用于限定本发明的范围。
图1为本发明实施例提供的在uboot中支持多路pcierc的方法示意性流程图。
实施例1:
如图1所示,一种在uboot中支持多路pcierc的方法,包括如下步骤:
s1:在uboot中调用初始化函数;
s2:通过所述初始化函数在uboot中创建虚拟pcierc设备;
s3:通过所述初始化函数将待处理设备中待挂载pcierc设备作为子设备并挂载在所述虚拟pcierc设备中。
上述实施例中,通过构造一个虚拟的pcierc根设备,将真实的pcierc作为该虚拟设备的子设备,uboot中调用pcie驱动的接口代码不需要做任何改动就达到了多路pcie设备的访问支持。
uboot,即dasu-boot是一个主要用于嵌入式系统的引导加载程序,可以支持多种不同的计算机系统结构。
具体地,所述通过所述初始化函数在uboot中创建虚拟pcierc设备的过程包括:
在uboot中通过pci_driver_init初始化函数调用device_bind_driver函数,通过所述device_bind_driver函数创建虚拟pcierc设备的驱动程序,通过所述驱动程序在uboot中创建所述虚拟pcierc设备。
能够通过初始化函数在uboot中添加虚拟根pcierc设备,通过虚拟根pcierc设备既可以支持单路pcierc也可以支持多路pcierc的系统。
当创建虚拟pcierc设备完成时,还包括步骤:
在uboot中通过所述pci_driver_init初始化函数调用device_probe函数,通过所述device_probe函数初始化所述虚拟pcierc设备。
能够初始化及探测虚拟pcierc设备,防止虚拟pcierc设备未启动的情形,提高准确性。
具体地,所述通过所述初始化函数将待处理设备中待挂载pcierc设备作为子设备并挂载在所述虚拟pcierc设备中的过程包括:
在uboot中通过所述pci_driver_init初始化函数调用device_bind_driver函数,通过所述device_bind_driver函数创建待挂载pcierc设备的驱动程序,通过所述驱动程序将所述待挂载pcierc设备挂载在所述虚拟pcierc设备中。
当待挂载pcierc设备挂载完成时,还包括步骤:
在uboot中通过所述初始化函数调用device_probe函数,通过所述device_probe函数初始化所述待挂载pcierc设备。
能够初始化及探测待挂载pcierc设备,防止待挂载pcierc设备未启动的情形,提高准确性。
如图3所示,在uboot中支持多路pcierc的整个挂载过程为:
s201:设待挂载pcierc设备的数量为rcnumber,并创建索引index,将所述索引index对应的值初始化为0;
s202:判断索引index对应的值是否小于rcnumber,若是,则执行s203,否则执行s205;
s203:将待挂载pcierc设备作为子设备挂载在所述虚拟pcierc设备中;
s204:在uboot中通过pci_driver_init初始化函数调用device_probe函数,通过所述device_probe函数初始化所述待挂载pcierc设备,将所述索引index对应的值加1,并进行下一待挂载pcierc设备的挂载处理,并返回s202;
s205:结束挂载。
实施例2:
如图2所示,一种在uboot中支持多路pcierc的装置,包括:
函数创建模块,用于在uboot中调用初始化函数;
处理模块,用于通过所述初始化函数在uboot中创建虚拟pcierc设备;
通过所述初始化函数将待处理设备中待挂载pcierc设备作为子设备并挂载在所述虚拟pcierc设备中。
上述实施例中,通过构造一个虚拟的pcierc根设备,将真实的pcierc作为该虚拟设备的子设备,在uboot中调用pcie驱动的接口代码不需要做任何改动就达到了多路pcie设备的访问支持。
具体地,所述处理模块中,通过所述初始化函数在uboot中创建虚拟pcierc设备的过程包括:
在uboot中通过pci_driver_init初始化函数调用device_bind_driver函数,通过所述device_bind_driver函数创建虚拟pcierc设备的驱动程序,通过所述驱动程序在uboot中创建所述虚拟pcierc设备。
实施例3:一种在uboot中支持多路pcierc的装置,包括存储器、处理器以及存储在所述存储器中并可在所述处理器上运行的计算机程序,当所述处理器执行所述计算机程序时,实现如上所述的在uboot中支持多路pcierc的方法。
实施例4:一种计算机可读存储介质,所述计算机可读存储介质存储有计算机程序,当所述计算机程序被处理器执行时,实现如上所述的在uboot中支持多路pcierc的方法。
图4为本发明实施例提供的在uboot中多路pcierc驱动的拓扑图。
图中,虚拟pcierc设备下挂载了多个真实pcierc设备,即rc0……rcn,每个rc下可以挂载switch,也可以挂接ep作为pcie设备。
需要说明的是,在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。
所属领域的技术人员可以清楚地了解到,为了描述的方便和简洁,上述描述的装置和单元的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。
在本申请所提供的几个实施例中,应该理解到,所揭露的装置和方法,可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。
作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本发明实施例方案的目的。
另外,在本发明各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以是两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。
集成的单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分,或者该技术方案的全部或部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例方法的全部或部分步骤。而前述的存储介质包括:u盘、移动硬盘、只读存储器(rom,read-onlymemory)、随机存取存储器(ram,randomaccessmemory)、磁碟或者光盘等各种可以存储程序代码的介质。
以上所述仅为本发明的较佳实施例,并不用以限制本发明,凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。