linux中用lspci 命令查看到有的PCIE设备基地址信息中 [virtual] ,这是什么意义呢?
Memory at a4200000 (64-bit, non-prefetchable) [virtual] [size=4K]
实际对应bar0的配置空间中的值为0,而信息中bar0基地址为a4200000 [virtual]
查询得的具体详细信息如下:
$ sudo lspci -s 02:00.0 -vxx
02:00.0 Unassigned class [ff00]: Alcor Micro AU6625 PCI-E Flash card reader controller
Subsystem: Hewlett-Packard Company AU6625 PCI-E Flash card reader controller
Flags: bus master, fast devsel, latency 0, IRQ 16
Memory at a4200000 (64-bit, non-prefetchable) [virtual] [size=4K]
Capabilities: [40] Power Management version 3
Capabilities: [50] MSI: Enable- Count=1/1 Maskable- 64bit+
Capabilities: [80] Express Endpoint, MSI 00
Capabilities: [100] Latency Tolerance Reporting
Kernel driver in use: alcor_pci
Kernel modules: alcor_pci
00: ea 1a 25 66 04 00 18 00 00 00 00 ff 00 00 00 00
10: 04 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
20: 00 00 00 00 00 00 00 00 00 00 00 00 3c 10 aa 83
30: 00 00 00 00 40 00 00 00 00 00 00 00 ff 01 00 00
当使用 lspci 命令查看 PCIe 设备的信息时,如果在基地址信息中看到 [virtual] 标识,意味着该 PCIe 设备是一个虚拟设备,例如虚拟网卡、虚拟磁盘控制器等。
PCIe 设备的基地址信息会告诉系统该设备的物理地址范围,以及与该设备相关联的中断号和内存映射等信息。而虚拟设备没有真实的物理地址,其基地址信息更多的是指向虚拟内存地址和中断号等信息,这些信息最终会转换为真实物理地址和中断号。
因此,当看到基地址信息中有 [virtual] 标识时,说明该设备是虚拟设备,其地址和中断等信息可能不是真实的物理地址和中断,而是被虚拟化管理软件(如虚拟机软件)转换的虚拟地址和中断号。这对于系统管理员和开发人员了解 PCIe 设备的真实地址和性能特征等信息非常有帮助。