在Windows子系统Linux(WSL)中查找活动串口

3
我该如何在Windows Subsystem for Linux中找到活动的串口?我知道WSL中支持使用/dev/ttyS,但这些端口中哪些是活动的呢?我正在尝试解决的问题是,我的设备不断切换端口,因为内部芯片会重新连接到一个新端口。我想创建一个bash脚本来查找活动的串口。像dmesg | grep tty这样的常规Linux命令无法正常工作。请注意保留HTML标签。
2个回答

3
我创建了一个结合了PowerShell和WSL的解决方案。

1. 创建一个名为comports.ps1的PowerShell脚本:

$DeadComport = 3
$COMportList = [System.IO.Ports.SerialPort]::getportnames() 

if ($COMportList.Count -cgt 2) {
    Write-Output "Too many com-ports connnected! " 
    Write-Host -NoNewline "Com-ports found:" $COMportList.Count
   
}else{
     ForEach ($COMport in $COMportList) { 
        $temp = new-object System.IO.Ports.SerialPort $COMport 
        $portNr = $temp.PortName.SubString(3)
        if ($portNr -eq $DeadComport){
            continue   
        }
        Write-Output $portNr
        $temp.Dispose() 
    }
}

- 您可以在PowerShell ISE中调试此代码并进行调整以满足您的偏好。


2. 在WSL中创建一个bash脚本,命名为comscript.sh:

最好将其放在home/your-username/bin文件夹中,使得该bash脚本可以全局执行。

#!/bin/bash

echo "Active com-port"
powershell.exe -File "c:\your-folder\comports.ps1" 

现在你只需调用 comscript.sh,它将输出活动的串口号,如果找到多个设备,它将抛出一个错误消息。 请注意,我过滤掉了串口 3,因为它在我的计算机上始终存在并处于活动状态。

1
太棒了!非常好用。我做了一些修改:
  1. 删除了 if ($COMportList.Count -cgt 2) { 块,因为我认为6个端口不算“太多”。
  2. 修改了输出,以便使用 Write-Output "/dev/ttyS$portNr" 给出相应的 /dev/ttyS* 端口。
- gigabot

1
在最新的WSL 2中,dmesg | grep tty命令可以正常工作。
但是,让设备正常工作还是有些麻烦。
ADMIN PS> wsl --update

PS> winget install --interactive --exact dorssel.usbipd-win

WSL> sudo apt install linux-tools-5.4.0-77-generic hwdata
WSL> sudo update-alternatives --install /usr/local/bin/usbip usbip /usr/lib/linux-tools/5.4.0-77-generic/usbip 20

# Open a new ADMIN PS
PS> usbipd wsl list
PS> usbipd wsl attach --busid <busid>

WSL> lsusb 
WSL> ll /dev/ttyUSB*
PS> usbipd wsl detach --busid <busid> # when you're done with your device

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接