gpt4 book ai didi

linux - 如何解读/proc/bus/pci/devices的内容?

转载 作者:IT王子 更新时间:2023-10-28 23:59:28 25 4
gpt4 key购买 nike

'cat/proc/bus/pci/devices'的前几个字段是可以理解的。

字段 1 - BusDevFunc
字段 2 - 供应商 ID + 设备 ID
字段 3 - 中断线
字段 4 - BAR 0
之后是其余的 BAR 寄存器 (0 - 5)。

BAR寄存器打印出来后,其他字段是什么?具体来说,打印出哪些 PCI 配置空间寄存器(偏移量)?

最佳答案

这是内核中对应的代码:

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);
/* Here should be 7 and not PCI_NUM_RESOURCES as we need to preserve compatibility */
for (i=0; i<7; 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<7; 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;
}

在 IRQ 之后,它似乎是起始地址与前 6 个资源区域的标志相结合,然后是这些资源区域的长度,然后是声明该设备的驱动程序的名称。

关于linux - 如何解读/proc/bus/pci/devices的内容?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2790637/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com