mmap PCIe BAR 和 addr 的打印内容是 ffffffff

问题描述

我尝试在linux用户模式下使用mmap()映射sysfs中的resource2文件来获取pcie设备的BAR。代码如下所示。

char *devname = "/sys/bus/pci/devices/0000:04:00.2/resource2";
res_fd = open(devname,O_RDWR);
if (res_fd < 0)
    goto fail;
map_addr = mmap(NULL,pci->mem_resource[i].len,PROT_READ | PROT_WRITE,MAP_SHARED,res_fd,0);
if (map_addr == MAP_FAILED)
    goto fail;
printf ("%x\n",((unsigned char*)map_addr)[0x100]);

最后,这段代码的输出是ffffffff。

我很确定这是不正常的。我查了一下设备的datasheet,它的输出应该是一个固定的常量,比如0x37e3cf5。

实际上,我在 ubuntu 18.04 内核 4.19+ 上得到了 ffffffff,但在 ubuntu 18.04 内核 5.4+ 上得到了正确的 0x37e3cf5。

我想知道是什么导致了sysfs中pcie的源文件的差异。折磨我好久了

谢谢!

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)