Introduction about libpciaccess
当用户态程序需要使用pci设备的相关接口时,可借助于libpciaccess这一库函数。
1.source code
2.how to use it?
passthrough.c
可以从该文件中学习libpciaccess的使用方法。
1 |
|
3.demo
3.1 pci_device_map_range
Map the specified memory range so that it can be accessed by the CPU.
已知IGD(Intel Graphix Device) bar0的前2MB空间为mmio。当需要在用户态程序读写mmio寄存器时,可以借助于pci_device_map_range
,将物理上的2MB mmio空间映射到2MB的用户虚拟地址空间。最终,通过读写用户虚拟地址空间,就可以操作真实的mmio寄存器了。
具体用法可以参考passthrough.c中init_msix_table
。其中,msix_table_read
与msix_table_write
需要重点关注。