Я пытаюсь сделать какую-то симуляцию. В реальном случае x86-based
Промышленный ПК соединяется с сетевой платой с помощью ПК / 104. Сетевая плата рассматривается как устройство ввода-вывода. Код работает на IPC
использует инструкции по сборке, такие как IN, OUT для доступа к портам ввода / вывода. Я хочу смоделировать все это на своем ноутбуке.
c++
программа работает на IPC
может быть перенесен на мой ноутбук, так как они оба основаны на архитектуре x86. Но из-за инструкций IN / OUT я столкнулся с проблемами, поскольку к моему ноутбуку не подключена настоящая сетевая плата. Я смоделировал логику сетевой платы, используя SystemC
, Мне интересно, есть ли способ перехватить доступ через порт ввода / вывода (IN / OUT) к реальному оборудованию и позволить логике виртуализированного оборудования вступить во владение.
Я ценю любую помощь или совет от вас.
Если ваш код с инструкциями IN / OUT находится в пользовательской программе, вам необходимо выяснить, как перехватывать и обрабатывать эти инструкции либо в этой же программе (возможно, с помощью сигналов?), Либо в ядре. IN и OUT являются привилегированными инструкциями, и по умолчанию они вызывают исключение (#GP) в коде пользовательского режима, и затем ядро обрабатывает это исключение. Вы должны иметь свой собственный обработчик для этого случая. В Windows это можно сделать с помощью так называемой структурированной обработки исключений (AKA SEH).
Если код уже находится в ядре, это сложно, потому что IN / OUT там не вызывает #GP.
Не могли бы вы просто заменить подпрограммы, выполняющие IN и OUT, чем-то другим, вызовами кода эмуляции устройства? Вы все равно имитируете это, никого не волнует, если это IN / OUT или что-то еще.
Увидеть как это можно сделать с помощью SEH.
Других решений пока нет …