基于Linux实现PCIE设备热插拔的方法及装置制造方法及图纸

技术编号:12900972 阅读:180 留言:0更新日期:2016-02-24 11:14
本发明专利技术公开了一种基于Linux实现PCIE设备热插拔的方法及装置,该方法包括:Linux系统启动后,运行应用程序,加载扫描PCIE设备的驱动,初始化PCIE SWITCH,预先为PCIE SWITCH的每个下行口分配地址空间,扫描FPGA;创建线程,通过轮询FPGA的寄存器检测到PCIE插槽有子卡插入后,为子卡供电;扫描子卡,通过访问子卡的配置空间获取其所需地址空间,并为其分配地址空间;加载子卡的驱动,启动访问程序,通过轮询FPGA的寄存器检测到PCIE插槽有子卡被拔出后,退出访问程序,并卸载拔出的子卡的驱动,为相应的PCIE插槽断电。本发明专利技术,在Linux系统启动后,预先为PCIE SWITCH的每个下行口分配地址空间,每次扫描到插入的PCIE设备时,可直接为其分配地址空间,实现了PCIE设备的热插拔功能。

【技术实现步骤摘要】

本专利技术涉及通信
,具体涉及基于Linux实现PCIE设备热插拔的方法及装置
技术介绍
随着处理器技术的发展,对外部设备的访问速率和可靠性要求越来越高,目前,PCIE接口成为了处理器普遍支持的接口之一,PCIE的热插拔技术包含了支持热插拔的系统硬件和系统软件,在硬件方面需要有热插拔控制器、接口卡电源开关逻辑线、接口卡复位线、提不按钮(Attent1n Button)、指不器(Power Indicator/Attent1n Indicator)和接口卡检测脚(PRSNT1#、PRSNT2#信号)等,在软件方面需要系统支持热插拔的操作,能对设备的插拔作出相应的响应。当要移除接口卡的时候,需要预先通知系统,包括两种方式,通过提示按钮或软件程序的“用户界面”来实现,当按下按钮或操作软件程序的“用户界面”时,热插拔控制器获得该信息,并向PCIE控制器发出中断信号,系统进行处理,中止驱动程序,关闭插槽电源,释放接口卡所分配的系统资源等,当系统处理完成后,就会控制指示灯来指示操作者可以移除接口卡。当要插入接口卡的时候,热插拔控制器根据接口卡检测管脚获得该信息,向PCIE控制器发出中断信号,系统进行处理,使能接口卡电源,扫描接口卡的PCIE设备,分配系统资源,加载驱动等。虽然PCIE设备具有热插拔功能,但是不同的处理器和系统对PCIE设备的热插拔功能支持不同,例如对于PowerPc处理器,只能在Linux系统启动过程中对整个PCIE控制器下的设备进行扫描时,对PowerPc处理器下挂的PCIE设备进行扫描,并分配地址空间,在Linux系统启动后,无法单独对PowerPc处理器下挂的PCIE设备进行扫描,并分配地址空间。具体地,在Linux系统扫描PCIE设备的过程中,对于总线号的分配采用自上而下的顺序分配,但是对于地址空间的分配采用自下而上的顺序分配,如图1所示,图1为PCIE设备外设的结构图,由PCIE控制器、PCIE SWITCH和PCIE设备组成,其中,PCIE控制器的总线号为0,PCIE SWITCH有一个上行口和四个下行口,在Linux系统扫描PCIE设备过程中,分配总线号由上往下依次分配,即PCIE SWITCH的上行口总线号为1,四个下行口的总线号为2,四个下行口下挂的四个PCIE设备的总线号从左往右依次为3、4、5、6,而地址空间的分配则由下往上依次分配,首先会访问四个PCIE设备来确定四个PCIE设备所需地址空间的大小,然后通过四个PCIE设备所需地址空间的大小来决定PCIE SWITCH的四个下行口所需地址空间的大小,最终通过PCIE SWITCH的四个下行口所需地址空间的大小来决定PCIE控制器给PCIE SWITCH的上行口分配的地址空间的大小。由上可知,PowerPc处理器无法在Linux系统启动后实现PCIE设备热插拔功能。
技术实现思路
本专利技术所要解决的技术问题是解决PowerPc处理器无法在Linux系统启动后实现PCIE设备热插拔功能的问题。为了解决上述技术问题,本专利技术所采用的技术方案是提供一种基于Linux实现PCIE设备热插拔的方法,包括以下步骤:Linux系统启动后,运行应用程序,加载具有扫描PCIE设备功能的驱动,初始化PCIE SWITCH,预先为PCIE SWITCH的每个下行口分配地址空间,然后扫描母卡上的FPGA ;创建线程,通过轮询FPGA的寄存器检测到PCIE插槽有子卡插入后,为插入的子卡供电;扫描插入的子卡,通过访问插入的子卡的配置空间来获取其所需地址空间,并为其分配地址空间;加载插入的子卡的驱动,启动访问插入的子卡的程序,通过轮询FPGA的寄存器检测到PCIE插槽有子卡被拔出后,退出访问程序,并卸载拔出的子卡的驱动,通过访问FPGA的寄存器为相应的PCIE插槽断电。在上述技术方案中,在所述PCIE插槽断电后,所述Linux系统删除相应的子卡的总线号,同时释放相应的地址空间。在上述技术方案中,所述PCIE设备包括所述母卡和所述子卡。本专利技术还提供了一种基于Linux实现PCIE设备热插拔的装置,包括:PCIE SWITCH分配地址模块,预先为PCIE SWITCH的每个下行口分配地址空间;检测PCIE设备插入模块,通过轮询母卡上的FPGA的寄存器来检测PCIE插槽中子卡的插入;PCIE设备供电模块,检测到子卡插入时,Linux系统通过访问FPGA的寄存器为插入的子卡供电;扫描PCIE设备模块,扫描插入的子卡,通过访问插入的子卡的配置空间,获取插入的子卡所需地址空间,并为其分配地址空间;加载PCIE设备驱动模块,加载插入的子卡的驱动;检测PCIE设备拔出模块,通过轮询FPGA的寄存器来检测PCIE插槽的状态,判断插入的子卡是否被拔出;卸载PCIE设备驱动模块,在检测到PCIE插槽有子卡被拔出后,退出访问拔出的子卡程序,并卸载拔出的子卡的驱动;PCIE设备断电模块,卸载完拔出的子卡的驱动后,Linux系统通过访问FPGA的寄存器为相应的PCIE插槽断电。在上述技术方案中,还包括删除PCIE设备模块,在所述PCIE插槽断电后,所述Linux系统删除相应的子卡的总线号,同时释放相应的地址空间。在上述技术方案中,所述PCIE设备包括所述母卡和所述子卡,所述FPGA连接所述PCIE SWITCH的第一下行口,两个所述子卡分别通过两个所述PCIE插槽连接所述PCIESWITCH的第二下行口和第三下行口,同时,两个所述子卡分别通过两个所述PCIE插槽与所述母卡相连。本专利技术,在Linux系统启动后,预先为PCIE SWITCH的每个下行口分配地址空间,在每次扫描插入的PCIE设备并为其分配地址空间时,由于PCIE SWITCH的下行口已有地址空间,可以直接为插入的PCIE设备分配地址空间,不需要将整个PCIE控制器下的设备重新扫描一次,避免了对正在访问插入的PCIE设备的程序产生影响,实现了 PCIE设备的热插拔功能。【附图说明】图1为本专利技术实施例提供的PCIE设备外设的结构图;图2为本专利技术实施例提供的PCIE设备的热插拔示意图;图3为本专利技术实施例提供的基于Linux实现PCIE设备热插拔的装置结构图;图4为本专利技术实施例提供的基于Linux实现PCIE设备热插拔的方法流程图。【具体实施方式】下面结合说明书附图和【具体实施方式】对本专利技术做出详细的说明。本专利技术实施例提供了一种基于Linux实现PCIE设备热插拔的装置,本实施例针对其中一种应用场景进行说明,本实施例中处理器为FreeScale的P2020处理器,操作系统为Linux系统,本专利技术提供的PCIE设备的热插拔示意图如图2所示,PCIE控制器(P2020处理器)通过PCIE SWITCH进行扩展,PCIE设备分为一个母卡和两个子卡,母卡上设有FPGA,FPGA连接PCIE SWITCH的第一下行口,两个PCIE插槽分别连接第二下行口和第三下行口,第四下行口未使用,并且两个子卡分别通过PCIE插槽与母卡相连。PCIE插槽还与其它的控制信号线连接,这些控制信号线由FPGA控制,主要用来检测PCIE插槽的状态,以及控制子卡的电源。同时,为实现PCIE设备可随时插拔功能,对PCIE设备和处理器也有相关要求本文档来自技高网
...

【技术保护点】
基于Linux实现PCIE设备热插拔的方法,其特征在于,包括以下步骤:Linux系统启动后,运行应用程序,加载具有扫描PCIE设备功能的驱动,初始化PCIE SWITCH,预先为PCIE SWITCH的每个下行口分配地址空间,然后扫描母卡上的FPGA;创建线程,通过轮询FPGA的寄存器检测到PCIE插槽有子卡插入后,为插入的子卡供电;扫描插入的子卡,通过访问插入的子卡的配置空间来获取其所需地址空间,并为其分配地址空间;加载插入的子卡的驱动,启动访问插入的子卡的程序,通过轮询FPGA的寄存器检测到PCIE插槽有子卡被拔出后,退出访问程序,并卸载拔出的子卡的驱动,通过访问FPGA的寄存器为相应的PCIE插槽断电。

【技术特征摘要】

【专利技术属性】
技术研发人员:鄢来明尹淇刘勇刚陈垦
申请(专利权)人:烽火通信科技股份有限公司
类型:发明
国别省市:湖北;42

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1