每个PCI设备一行:
总共18个字段,每个字段之间是\t。
第一个字段是,总线设备功能,总线是前8位,后8位是设备(前5位)和功能(后3位)。
第二个字段是,vendor(前16位)和device(后16位)。
第三个字段是,中断号
第4-10个字段是bar0-bar6以及flag信息。
第11-17个字段是bar0-bar6的长度。
第18个字段是设备名称,optional
内核代码更准确:
static int show_device(struct seq_file *m, void *v)
{
const struct pci_dev *dev = v;
const struct pci_driver *drv;
int i;
if (dev == NULL)
return 0;
drv = pci_dev_driver(dev);
seq_printf(m, "%02x%02x\t%04x%04x\t%x",
dev->bus->number,
dev->devfn,
dev->vendor,
dev->device,
dev->irq);
/* only print standard and ROM resources to preserve compatibility */
for (i = 0; i <= PCI_ROM_RESOURCE; i++) {
resource_size_t start, end;
pci_resource_to_user(dev, i, &dev->resource[i], &start, &end);
seq_printf(m, "\t%16llx",
(unsigned long long)(start |
(dev->resource[i].flags & PCI_REGION_FLAG_MASK)));
}
for (i = 0; i <= PCI_ROM_RESOURCE; i++) {
resource_size_t start, end;
pci_resource_to_user(dev, i, &dev->resource[i], &start, &end);
seq_printf(m, "\t%16llx",
dev->resource[i].start < dev->resource[i].end ?
(unsigned long long)(end - start) + 1 : 0);
}
seq_putc(m, '\t');
if (drv)
seq_printf(m, "%s", drv->name);
seq_putc(m, '\n');
return 0;
}
参考
https://stackoverflow.com/questions/2790637/how-to-interpret-the-contents-of-proc-bus-pci-devices