/sys/bus/pci/device/0000:xx:xx.x/resource下的资源文件包含哪些信息?

时间:2014-05-15 05:27:51

标签: linux pci

我正在做一个从pci配置空间读取设备寄存器的项目,为此我需要mmap空间,为此我必须读取资源文件。但是这个文件包含什么数据。通过查看它,它看起来保存某种地址。 我搜索并读取了某些地方这些是BAR的但是最多只有6个BAR,所以其他领域是什么? 文件内容为:

0x000000000000fc00 0x000000000000fcff 0x0000000000020101
0x00000000dcff0000 0x00000000dcffffff 0x0000000000120204
0x0000000000000000 0x0000000000000000 0x0000000000000000
0x00000000dcf80000 0x00000000dcfbffff 0x0000000000120204
0x0000000000000000 0x0000000000000000 0x0000000000000000
0x0000000000000000 0x0000000000000000 0x0000000000000000
0x00000000dc000000 0x00000000dc0fffff 0x0000000000027200
0x00000000dc500000 0x00000000dc5fffff 0x0000000000120204
0x0000000000000000 0x0000000000000000 0x0000000000000000
0x00000000dc100000 0x00000000dc4fffff 0x0000000000120204
0x0000000000000000 0x0000000000000000 0x0000000000000000
0x0000000000000000 0x0000000000000000 0x0000000000000000
0x0000000000000000 0x0000000000000000 0x0000000000000000

2 个答案:

答案 0 :(得分:3)

这些特殊文件记录在Documentation/filesystems/sysfs-pci.txt

resource文件包含PCI资源的主机地址。然后,您有resource1resource2等文件,其中包含每个地区的内容。那些可以被捣碎。

答案 1 :(得分:1)

我知道这是一个老问题,但我的谷歌搜索也把我带到了这里,我一开始没有意识到它得到了回答,@duanev 似乎是正确的。相关代码可以在pci-sysfs.c中的resource_show(...)中找到

struct resource *res =  &pci_dev->resource[i];
pci_resource_to_user(pci_dev, i, res, &start, &end);
str += sprintf(str, "0x%016llx 0x%016llx 0x%016llx\n",
           (unsigned long long)start,
           (unsigned long long)end,
           (unsigned long long)res->flags);