Ввод/вывод с отображением памяти QEMU PCI

Я пытаюсь понять 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);.


person d123    schedule 01.12.2020    source источник


Ответы (1)


outl() записывает данные. В вашем коде никакая другая функция не записывает ввод-вывод, кроме outl()

https://linux.die.net/man/2/outl

Если вы хотите узнать больше о outl, используйте gdb и разберите его https://gist.github.com/jarun/ea47cc31f1b482d5586138472139d090

https://man7.org/linux/man-pages/man2/iopl.2.html

person ralf htp    schedule 09.12.2020