本节介绍 pci.conf 文件及其用法和语法。
引入 pci.conf 是为了保存 PCI 配置,如系统上的某个特定 PF(Physical Function,物理功能)的 VF(Virtual Function,虚拟功能)的数目。该文件具有以下几个用途:
持久保留 PCI 配置,以便在引导时可以自动创建 VF。
由于配置文件是 boot_archive 的一部分,因此在引导过程中可以使用 VF。
在裸机系统上使用 VF 时,该文件还可以供非 IOV 系统配置使用。当前,该文件只包含与 VF 相关的配置。将来,更多特定于 PCI 总线的配置甚至特定于设备的解决方法可能会包含到该文件中。VF 配置的数目保存在 "[System_Configuration]" 部分中,类似于以下示例:
[System_Configuration] [[path=<pf_device_path>]] num-vf=<num_of_vf>
文件的 [System_Configuration] 部分由 Oracle Solaris PCIe 框架进行解释。无法识别的关键字将被标记为错误。整个文件中只有一个 [System_Configuration] 部分,并且它必须位于文件的开头。
[System_Configuration] 部分由一系列子部分组成。每个子部分必须有一个唯一的文本标签,后跟一个括在方括号中的过滤器列表(与要关注的设备相匹配)。每个子部分的内容都是一个操作列表,框架将针对每个匹配的设备执行这些操作。例如:
[System_Configuration] new_e1kg_driver [[id=0x8086,0x1000,,0x108e,]] [[classcode=0x020000]] num-vf=4
双括号中的过滤器将匹配系统中具有设备 ID 0x1000、Sun 子系统供应商 ID 以及网络控制器类别代码的所有 Intel 设备。Oracle Solaris 将设备的 VF 数设置为 4。
[Device_Configuration] 部分包含与 [System_Configuration] 部分相同类型的子部分,不同之处是它的内容仅由与过滤器匹配的设备的驱动程序进行解释。
Device Configuration] # label must be file-globally unique igbe-sriov-test [[path=/pci@0,0/network@2]] # number of rx/tx ring pairs for each VF dma-channel-distribution=2,2,8,4
/etc/pci.conf = <system section><device section> <system section> = "[System_Configuration]" {<framework subsection>}* <device section> = "[Device_Configuration]" {<device subsection>}* <framework subsection> = <label> [ {filter>}* ] [ {<framework action>}+ ] <device subsection> = <label> [ {<filter>}+* ] <devicenvlist> <filter> = [ "[[" "id" "=" (vendorid>) "," (<deviceid>) "," (<revisionid>) "," (<subsystem-vendorid>) "," (<subsystemid>)"]]"] | ["[[" "classcode" "=" <classcode> (,<mask>) "]]" ] | [ "[[" "path" "=" ,devpath> "]]"] <framework action> = [ "num-vf" "=" <val>] <deice nvlist> = [ {name string> "=" <value string>} +]
另请参见 pci_param_get(9F)。