WSL 和串口

问题描述 投票:0回答:2

我在 WSL 2.0 上使用 Win10 和 Linux Ubuntu。

出于测试某些程序的目的,我想在通过 WSL 运行 Linux 的情况下使用 PC 的串行端口进行“环回”。

基本上,我希望 Linux/WSL 上的进程能够通过串行端口从 Windows 进程发送/接收数据,反之亦然,但无需任何硬件攻击。

当然,我已经尝试将 Windows 进程序列设置为“COM1”(如 Windows 资源管理器所示),将 WSL 上的 Linux 端口设置为“/dev/ttyS1”,但显然它不起作用。

有什么办法可以做到这一点吗?

windows serial-port windows-subsystem-for-linux
2个回答
6
投票

状态更新

根据其他答案,似乎是产品功能的增加使得通过WSL2使用USB设备成为可能。
特别是在v5.10.93.2中,似乎内置了两种类型的USB串行接口芯片的驱动。

linux-msft-wsl-5.10.93.2

  • 启用 CH341 和 CP210X USB 串行驱动程序

linux-msft-wsl-5.10.60.1

  • 启用 USB over IP 支持
  • 启用 USB 内核配置选项以通过 USB 与 Arduino 进行交互

以下信息已过时。

WSL 2.0 不支持串口。

使用 WSL 1 而不是 WSL 2 的例外情况


可以选择以下选项。


另外,即使WSL2无法识别USB串口,如果你想在串口之间进行通信,也可以使用此方法。
通过网络连接串口(com 口)

从上面的解释可以看出,如果你想在各个操作系统的进程之间进行通信,你可以简单地使用 TCP/IP 套接字来代替上述机制。


0
投票

在 PowerShell 或 CMD 中运行此命令以查看您是否使用版本 1:

C:\>wsl -l -v
  NAME      STATE           VERSION
* Ubuntu    Running         1

如果是,这里有一些经过测试的工作代码,用于从 Linux 命令提示符读取 COM14:

#!perl -w

use strict;
$|=1; # autoflush

use Device::SerialPort;

my $port = Device::SerialPort->new("/dev/ttyS14");
$port->baudrate(115200); # Configure below to match your device
$port->databits(8);
$port->parity("none");
$port->stopbits(0);
$port->debug(1);

$port->read_char_time(0);       # don't wait for each character
$port->read_const_time(1);      # 0.001 second per unfulfilled "read" call

while (1) {
  my ($count_in, $str_in) = $port->read(255); # Supposedly must be 255 always
  if($count_in) {
    print $str_in;
  }
}

如果您正在运行 WSL2,您可以通过

wsl --export
wsl --import
wsl --set-version
将您的发行版备份、转换或复制到 WSL1。有关详细信息,请参阅此问题等。

© www.soinside.com 2019 - 2024. All rights reserved.