usb - QEMU PCI 内存映射 I/O
问题描述
我试图了解 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);
实现了什么。
解决方案
outl()
写入数据。在您的代码中,没有其他函数写入 I/O,除了outl()
https://linux.die.net/man/2/outl
如果您想了解有关outl
使用gdb的更多内部信息并对其进行反汇编https://gist.github.com/jarun/ea47cc31f1b482d5586138472139d090
推荐阅读
- javascript - 从 API 产生多个结果
- javascript - 在 socket.io 事件上更新组件 - ReactJS,Socket.io
- jpa - 向 JPA 实体添加业务逻辑
- sql-server - 复制和同步数据库 MSSQL
- react-native - 在运行 `yarn start` 二维码不可见,相反我得到以下信息
- django - 从 django 模板标签获取属性
- c++ - 在这种情况下如何正确使用std forward
- javascript - 我可以使用过滤器从对象数组中提取值吗?
- c - 长到 size_t 的类型转换安全吗?
- while-loop - AutoHotkey:按住键而为真