我正在使用以下代码来测试通过 VFIO_PCI API 写入的 PCIe BAR 寄存器。
` struct vfio_group_status group_status = { .argsz = sizeof(group_status) };
struct vfio_device_info device_info = { .argsz = sizeof(device_info) };
struct vfio_region_info reg = { .argsz = sizeof(reg) };
int container = open("/dev/vfio/vfio", O_RDWR);
int group = open("/dev/vfio/17", O_RDWR);
/* Add the group to the container */
ioctl(group, VFIO_GROUP_SET_CONTAINER, &container);
/* Enable the IOMMU model we want */
ioctl(container, VFIO_SET_IOMMU, VFIO_TYPE1_IOMMU);
int dev = ioctl(group, VFIO_GROUP_GET_DEVICE_FD, "0000:02:00.0");
void* ptr;
ptr = mmap(0, 4096, PROT_READ | PROT_WRITE, MAP_SHARED, dev, ( 0UL << 40));
cout << *((unsigned int *)ptr + 0x202) << endl; //this always print out 0
*((unsigned int *)ptr + 0x202) = 4; //write 4
cout << *((unsigned int *)ptr + 0x202) << endl;` //this always print out 4
但是,只有程序还在运行时,写入才会生效。程序执行完成后,该值总是回落。
我已经验证这不是因为缓存,因为我可以在程序仍在运行时看到FPGA中寄存器值的变化。
我的问题是:我该怎么做才能让我的写持久化?