0

我正在为 Windows 内核制作驱动程序,我正在使用 COM1 获取内核日志,主机是 Ubuntu,来宾是 qemu。Windows 10 安装在其中。问题是要在 COM1 上写入大量数据。因此,如果它必须写一行ABCDEFGHI并且在下一行中,它必须写JKLMNOPQ .. 它在一行中执行类似于ABCDEF而在第二行中执行GHIJKLMNOPQ之类的操作,这意味着一行数据不完整,第二行数据也是由于这个原因而损坏..我们可以申请任何锁吗?如果一个连接正在使用 COM1,那么任何其他连接都不应该在 COM1 上写入?

4

1 回答 1

0

QEMU 不控制在特定时间谁可以写入串口地址。这是客户操作系统的工作。QEMU 只接收它在虚拟寄存器中看到的任何数据。

如果您确实需要将批量数据写入来宾操作系统中的串行端口,您会期望很长的处理时间。我曾经遇到过同样的问题,不得不在非常快的 Intel CPU 上测试速度。我能得到的最佳速度是 220KBps。

如果处理时间对您来说不是问题,从客户 Windows 的角度来看,如果您直接写入 COM1 的端口地址,那么您的驱动程序有责任制定锁定机制,假设也没有其他驱动程序/进程写入 COM1。如果通过句柄向 COM1 设备写入数据,则 Windows 内置串行端口驱动程序不会直接提供锁定。但是您仍然可以通过其他方式做到这一点:独占打开串口设备的句柄,因此只有一个进程可以写入它,或者在 Windows 串口驱动程序之上制作一个设备过滤驱动程序来添加这个额外的访问控制,甚至直接修改windows串口驱动源码,添加自己想要的。它的源代码现在可以在 github 上找到。

如果以上都不适用于您的情况,您可能需要仔细检查如何在主机上捕获 COM1 的输出,通常重定向到文件、shell 等。它们也可能导致一些神秘的麻烦。

于 2020-07-19T20:52:16.543 回答