【问题标题】:Getting Log of Windows Kernel through Serial Port通过串口获取 Windows 内核日志
【发布时间】:2020-10-19 08:39:43
【问题描述】:

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

【问题讨论】:

    标签: windows kernel driver qemu com-port


    【解决方案1】:

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

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-05-04
      • 1970-01-01
      • 2012-05-10
      • 1970-01-01
      • 1970-01-01
      • 2023-03-24
      相关资源
      最近更新 更多