【发布时间】:2020-12-01 11:52:25
【问题描述】:
我正在尝试了解 USB PCI MMIO 并将 QEMU 用作游戏场地。
以下设备在我的虚拟机上,
00:1d.0 USB controller: Intel Corporation 82801I (ICH9 Family) USB UHCI Controller #1 (rev 03) (prog-if 00 [UHCI])
Subsystem: Red Hat, Inc. QEMU Virtual Machine
Flags: bus master, fast devsel, latency 0, IRQ 16
I/O ports at c0a0 [size=32]
Kernel driver in use: uhci_hcd
00:1d.1 USB controller: Intel Corporation 82801I (ICH9 Family) USB UHCI Controller #2 (rev 03) (prog-if 00 [UHCI])
Subsystem: Red Hat, Inc. QEMU Virtual Machine
Flags: bus master, fast devsel, latency 0, IRQ 17
I/O ports at c0c0 [size=32]
Kernel driver in use: uhci_hcd
00:1d.2 USB controller: Intel Corporation 82801I (ICH9 Family) USB UHCI Controller #3 (rev 03) (prog-if 00 [UHCI])
Subsystem: Red Hat, Inc. QEMU Virtual Machine
Flags: bus master, fast devsel, latency 0, IRQ 18
I/O ports at c0e0 [size=32]
Kernel driver in use: uhci_hcd
00:1d.7 USB controller: Intel Corporation 82801I (ICH9 Family) USB2 EHCI Controller #1 (rev 03) (prog-if 20 [EHCI])
Subsystem: Red Hat, Inc. QEMU Virtual Machine
Flags: bus master, fast devsel, latency 0, IRQ 19
Memory at fc072000 (32-bit, non-prefetchable) [size=4K]
Kernel driver in use: ehci-pci
还有下面的代码,
int fd = open("/sys/devices/pci0000:00/0000:00:1d.7/resource0", O_RDWR | O_SYNC);
int mmio = mmap(0, 0x100, PROT_READ | PROT_WRITE, MAP_SHARED, fd, 0);
iopl(3);
outl(0, 0xc0a0);
如果我不包含outl(0, 0xc0a0);,似乎对MMIO 地址空间的任何写入都不会触发任何事情。
希望尝试了解outl(0, 0xc0a0); 究竟实现了什么。
【问题讨论】: