Board logo

标题: Linux 2.6.10内核下PCI Express Native热插拔框架的实现机制(3) [打印本页]

作者: look_w    时间: 2018-5-18 20:41     标题: Linux 2.6.10内核下PCI Express Native热插拔框架的实现机制(3)

热插拔PCI板卡可以使用提示按钮或用户界面来进行,下面我们介绍使用用户界面来启动热插入和热拔出的操作过程,以及Fedora C4T2下所采用的方式。
设备的热插入
1.        操作员安装卡,闭合插槽保护锁,保护锁感应器通知热插拔控制器把连接信号接通到插槽。
2.        然后,操作员通知热插拔服务程序:卡已经被安装并可以激活。软件提示用户对此进行确认。
3.        在操作员请求连接后,热插拔服务程序向控制着热插拔控制器的热插拔系统驱动程序下达命令,闪烁插槽的电源指示灯,提示操作员此时不可以拔动适配卡。
4.  在热插拔软件对此请求进行确认期间内,电源指示灯继续闪烁。注意此时软件可能会拒绝这个安装请求(例如,安全策略此刻禁止插槽被激活)。另外,如果请求没有生效,软件拒绝请求并对热插拔控制器发出命令关闭电源指示灯。规范建议软件通过一条消息通知操作员请求被拒绝的原因。
5.        如果请求被确认,热插拔服务程序对热插拔系统驱动发出请求,为插槽加电。
6.        加电后,软件发出命令完全打开电源指示灯。
7.        当link training完成后,操作系统指示平台配置程序赋予适配卡必需的资源,来配置适配卡的功能。
8.        操作系统为PCI Express设备中的功能寻找恰当的驱动程序,并加载之。
9.        接着系统调用驱动程序的初始化入口,并执行驱动的初始化代码。这些代码完成设备的设置,并填写设备的PCI 配置命令寄存器的相关标志位来激活设备。
热移出设备1.        操作员通过指定适配卡所在物理插槽号码来初始化移出请求。
2.        软件弹出窗口要求操作员确认请求。注意,此时电源指示灯保持开启状态。
3.        操作员确认请求后,热插拔服务程序向热插拔系统驱动发出请求,要求热插拔控制器闪烁电源指示灯。注意此时软件可能会拒绝这个移出请求(例如,适配卡目前正被关键系统功能所使用)。另外,如果请求没有被确认,软件将拒绝请求并对热插拔控制器发出命令,重新开启电源指示灯。规范建议软件通过一条消息通知操作员请求被拒绝的原因。
4.        如果请求被确认,热插拔服务程序将命令适配卡的设备驱动保持静默,也就是说驱动一方面必须停止向适配卡发出请求,另一方面必须完成或者终止所有已经发出的请求,并禁止适配卡产生新的事务(包括中断)。
5.        软件发出命令,通过在插槽所连接的根端口或交换端口中的链接控制寄存器禁掉适配卡的链接。这使得链接两侧的端口均被禁止。
6.        软件指示热插拔控制器禁掉插槽。
7.        成功切断电源后,软件发出关闭电源指示灯命令。指示灯熄灭后,操作员可以开始安全地从插槽移出适配卡。打开插槽安全锁,热插拔控制器从插槽上撤除所有的信号(例如SMBus 和Vaux),此时卡可以被移出。
8.        操作系统释放内存空间,I/O空间,中断线等曾经属于该设备的系统资源。
Fedora下所采用热插拔实现的方式如果在最近一次编译中选择了PCI Express 热插拔功能,而且驱动是以模块方式存在,那么,可以在命令行下键入以下内容:
modprobe pciehp
如果驱动成功,则可以在/sys/bus/pci/slots/下面发现以可热插拔插槽编号命名的目录,进入相关目录,可以进行下一步操作。
echo 1 >power开启某个插槽上的电源 ,进行热插入
echo 0 >power关闭某个插槽上的电源,执行热拔出
若不能加载pciehp驱动,一般是由于硬件不支持或者固件缺少OSHP方法或ACPI _OSC方法之一。




欢迎光临 电子技术论坛_中国专业的电子工程师学习交流社区-中电网技术论坛 (http://bbs.eccn.com/) Powered by Discuz! 7.0.0