При написании собственного VT-d монитора (или вируса), стартующего
11 Авг 2014 - 22:39 Случайный_Гость
При написании собственного VT-d монитора (или вируса), стартующего до или вместо ОС, чтобы организовать DMA-remapping для заданного устройства, делать нужно так:
1) Локализовать ACPI-таблицу DMAR (DMA Remapping Table).
2) Проверить поддерживается ли DMA remapping для PCIe порта, используемого устройством (по адресу устройства - Bus/Device/Function).
3) Извлечь из таблицы DMAR базовый адрес блока регистров управления блока Remapping Unit.
4) Подготовить в оперативной памяти таблицы трансляции, постранично описывающие виртуальное адресное пространство, создаваемое для bus-master устройства.
5) Настроить блок Remapping Unit, используя memory-mapped i/o регистры, локализованные на шаге 3. А именно - установить указатель на корневую таблицу трансляции, созданную на шаге 4 и включить трансляцию, установить бит TE(Translation Enable)=1.
Начиная с этого момента, выдача bus-master устройством адреса X будет приводить к появлению на шине памяти адреса F(X), где функция F(X) определяется содержимым страниц, созданных на шаге 4.
Сказанное справедливо как для On-Board устройства, так и устройства в слоте PCIe.
При написании собственного VT-d монитора (или вируса), стартующего до или вместо ОС, чтобы организовать DMA-remapping для заданного устройства, делать нужно так:
1) Локализовать ACPI-таблицу DMAR (DMA Remapping Table).
2) Проверить поддерживается ли DMA remapping для PCIe порта, используемого устройством (по адресу устройства - Bus/Device/Function).
3) Извлечь из таблицы DMAR базовый адрес блока регистров управления блока Remapping Unit.
4) Подготовить в оперативной памяти таблицы трансляции, постранично описывающие виртуальное адресное пространство, создаваемое для bus-master устройства.
5) Настроить блок Remapping Unit, используя memory-mapped i/o регистры, локализованные на шаге 3. А именно - установить указатель на корневую таблицу трансляции, созданную на шаге 4 и включить трансляцию, установить бит TE(Translation Enable)=1.
Начиная с этого момента, выдача bus-master устройством адреса X будет приводить к появлению на шине памяти адреса F(X), где функция F(X) определяется содержимым страниц, созданных на шаге 4.
Сказанное справедливо как для On-Board устройства, так и устройства в слоте PCIe.