我正在尝试做一些模拟。在实际情况中,x86-based
工业PC使用PC / 104连接网络板。网络板被视为I / O设备。在IPC
上运行的代码使用IN,OUT等汇编指令来访问I / O端口。我想在我的笔记本电脑上模拟整个事情。
c++
上运行的IPC
程序可以移植到我的笔记本电脑,因为它们都基于x86架构。但是对于IN / OUT指令,由于没有真正的网络板连接到我的笔记本电脑,我遇到了麻烦。我使用SystemC
模拟了网络板的逻辑。 我想知道是否有办法拦截I / O端口访问(IN / OUT)到真实硬件,并让虚拟化硬件的逻辑接管。
感谢您的任何帮助或建议。
答案 0 :(得分:1)
如果带有IN / OUT指令的代码在用户程序中,您需要了解如何在同一程序中(可能通过信号?)或在内核中拦截和处理这些指令。 IN和OUT是特权指令,默认情况下它们会在用户模式代码中引发异常(#GP),然后内核会处理此异常。对于这种情况,您需要拥有自己的处理程序。在Windows中,这可以使用所谓的结构化异常处理(AKA SEH)来完成。
如果代码已经在内核中,那很棘手,因为那里的IN / OUT不会导致#GP。
难道你不能用调用设备仿真代码来替换用IN和OUT做其他事情的例程吗?你无论如何都要模仿它,没有人关心它是IN / OUT还是别的什么。