首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

Linux 2.6.10内核下PCI Express Native热插拔框架的实现机制(1)

Linux 2.6.10内核下PCI Express Native热插拔框架的实现机制(1)

一 相关技术与研究1997年,PCI SIG制定了第一个PCI热插拔规范,其中定义了支持热插拔所必需的平台、板卡和软件元素。PCI SIG推出了标准热插拔控制器规范(SHPC SPEC),其中明确了热插拔的标准使用模式和严格的寄存器组要求,并且允许操作系统提供商在平台特定的软件之外提供热插拔支持,逐步完成了热插拔标准制定工作,进入技术的全面推广阶段。 2002年以后,Intel把热插拔作为一种天然属性赋予新推出的PCI Express规范,PCI Express热插拔总结了五年来工业标准的经验,具有如下特点:
  • 基于SHPC模式并对其进行了功能扩展;
  • PCI Express从设计上就把热插拔寄存器集成进入了其标准的性能寄存器组(而在SHPC 1.0中,热插拔寄存器是附加的);
  • 提供给操作系统一个统一的热插拔硬件寄存器接口,赋予了操作系统进行原生热插拔(绕过了传统基于BIOS的热插拔方法)的能力;
  • 通过在基本的体系机构层次定义热插拔必须的硬件要求,完善了一种标准的使用模式;
  • 提供了规格参数来保证OEM产品的低成本而高平台可靠性。
具有完整功能的PCI Express热插拔系统在平台硬件和固件支持之外,还必须有操作系统以及设备驱动程序的支持。
在各大芯片厂商纷纷推出支持PCI热插拔的产品的同时,Microsoft,Novell,SCO等公司在他们相关的操作系统中也都包括了支持热插拔的技术, Novell NetWare 4.11&5和SCO UnixWare 7以及更新版本支持完整PCI热插拔(热替换和热添加)。Microsoft Windows NT 4.0利用Compaq 服务器支持盘(SSD) for NT 4.0,提供了PCI热替换支持,进入2000年后,Microsoft Windows 2000也内建了对PCI热插拔技术的全面软件支持。对于GNU/Linux,从2001年1月份的内核2.4版本开始,PCI 热插拔开始成为其标准特性之一,到2.6 版本,热插拔功能已经被整合进入核心设备模型。现在,几乎所有的Linux发行版本,包括RedHat, Debian和 United Linux,都对PCI 热插拔提供了良好支持,并分别有所扩展。BSD分支在这方面起步较晚,OpenBSD在2004年三月份的3.6版本中才出现了不含设备驱动的设备热插拔参考框架,而FreeBSD 到5.3版本为止,尚未提供对PCI 热插拔的支持。
作为2002年出现的规范,各个通用操作系统对PCI Express的支持才刚刚起步。在微软公司的 Windows 2000, Windows XP, and Windows Server 2003中,PCI Express设备被当作PCI设备进行热插拔,其他PCI Express的高级功能可以由固件激活。在Windows Longhorn中,才提供对PCI Express高级特性的原生支持。GNU/Linux在内核版本2.6.9中开始专门提供对于PCI Express 热插拔的支持,中间历经软件架构的改动,逐渐发展为以内核版本2.6.10以及内核版本2.6.12下两种不同的PCI Express热插拔驱动架构。本文主要讨论2.6.10所采用的PCI Express热插拔驱动架构,并在最后给出2.6.12的新特性。
三 PCI Express 热插拔的软件支持根据规范,一个完整的 Native PCI Express 热插拔系统需要几方面的相互配合,分别为硬件元素、固件元素和软件元素。硬件元素是指主板总线系统的电气特性方面的支持,包括热插拔控制器(Hot-Plug Controller)、卡槽电源切换逻辑(Card Slot Power Switching Logic)、板卡重置逻辑(Card Reset Logic)、电源指示灯(Power Indicator)、提示按钮(Attention Button)和板卡存在检测引脚(Card Present Detect Pins)等等;固件元素是指主板BIOS必须对热插拔提供的支持,要实现Native PCI Express热插拔,固件必须提供OSHP方法或ACPI _OSC方法之一;软件元素是指操作系统操综合使用PCI Express 热插拔所必须提供的功能组件。
软件元素为了操纵平台的硬件元素,提供PCI Express热插拔服务,我们必须实现表1所示的主要热插拔软件元素。
PCI Express服务模型PCIE热插拔(PCIEHP)子系统中的标准热插拔系统驱动程序通过检查PCI Express性能数据结构中的插槽性能寄存器(Slot Capabilities register),来获取硬件的热插拔部件信息。这些寄存器所能反映的信息如下:
  • 插槽是否支持热插拔
  • 设备是否支持不通知软件的突然拔出操作
  • 提示灯、控制器等硬件元素是否存在
一旦软件完成了PCI Express设备热插拔功能的开启和配置工作,热插拔行为(例如移出或插入请求,电源故障)就可以向系统热插拔处理机制提交系统中断和电源管理事件。这种热插拔处理机制由操作系统独立提供,图1展示了PCI Express Native热插拔的服务模型,并展示了它与传统的基于ACPI的模型之间的区别。
图1 PCI Express热插拔服务模型比较
返回列表