PCIe设备的身份证
ID资源是一个PCIe设备的最基本资源,每一个ID号都是独一无二的。分析ID资源前,我们需要先了解Function(功能)的概念。对于一个PCIe设备,如果它只具有一个功能,我们称之为Single FunctionDevice;如果它有多个功能,则称之为Multi Function Device。举个例子,在我的电脑上,有这么一个AMD的显卡,位于01号总线,00号设备,它具有两个功能,功能0是显示用的Radeon HD 6750,功能1是音频用的Radeon HD 5700。
ID是由总线号、设备号和功能号共同组成的。因为有多功能设备,所以ID实际是一个功能的名字和地址。在Linux系统中,表示ID的方式是[Bus:Device.Function],如上的显示用的6750的ID号是01:00.0。音频用的5700的ID号是01:00.1。
说到地址,举个很形象的例子。总线号类似于街道的名字,设备号类似于这条街道上的某栋房子,而功能号类似于某一栋房子里的某个房间。
PCIeEP的设备号(Device Number)都是0,PCIe Switch则不大一样。在PCIe Switch内部,实际是由多个PCIe-To-PCIe的桥组成,对于每一个桥的设备号可能是0、1、2.。。。如下图:
当然,这些桥的Function可能也有多个,上图仅示意了Function0。
关于ID号,PCIe Spec定义了如下规则:
• 总线号由8bit表示,因此,最大总线号为256。
• 设备号由5bit表示,因此,最大设备号为32。
• 功能号由3bit表示,因此,最大功能号为8。