Я знаю, что PCI имеет функцию под названием ATS для преобразования виртуального адреса в физический адрес, но я не уверен, включен ли он по умолчанию на текущей платформе x86.
Если это так, как мне создавать виртуальные адреса?адрес и соответствующая таблица страниц в системе Linux?
Это то, что я думаю сейчас.Во-первых, DMA API, такой как pci_map_ *, вызовет драйвер intel iommu для настройки таблицы страниц и получения виртуального адреса io.Во-вторых, устройство PCI будет использовать этот виртуальный адрес io для запуска транзакции, а vt-d преобразует этот виртуальный адрес io в физический адрес.Я прав в этом?