【问题标题】:Find active serial ports in Windows Subsystem for Linux (WSL)在适用于 Linux 的 Windows 子系统 (WSL) 中查找活动的串行端口
【发布时间】:2019-10-24 20:48:21
【问题描述】:

我如何在 Windows 子系统 Linux 中找到哪个 serial-port 是活动的?我知道added support in WSL 用于使用/dev/ttyS,但是这些端口中哪些是活动的?

我要解决的问题是我有一个不断切换通信端口的设备,因为内部芯片会在新端口上自行重新连接。我想创建一个 bash 脚本来查找活动的串行端口。

常规的 linux 命令,例如: dmesg | grep tty 不起作用。

【问题讨论】:

    标签: bash serial-port windows-subsystem-for-linux


    【解决方案1】:

    我创建了一个结合 PowershellWSL 的解决方案。

    1.创建一个Powershell脚本, comports.ps1:

    $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 ,它就会输出活动的 comport,如果找到多个设备,它会抛出错误消息。

    请注意,我正在过滤掉 com-port 3,因为它始终存在并且在我的计算机上处​​于活动状态。

    【讨论】:

    • 很好的答案!效果非常好。我以几种方式对其进行了调整:1. 删除了 if ($COMportList.Count -cgt 2) { 块,因为我认为 6 不是“太多” 2. 修改输出以提供相应的 /dev/ttyS* 端口和 Write-Output "/dev/ttyS$portNr"
    猜你喜欢
    • 2019-07-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-31
    • 2019-04-20
    • 2021-05-05
    • 2021-04-23
    相关资源
    最近更新 更多