如何使用 USB(而不是 RS-232)端口作为文本终端连接?我希望我问得正确吗?

如何使用 USB(而不是 RS-232)端口作为文本终端连接?我希望我问得正确吗?

我的 Linux 系统有 USB 端口,没有 RS-232 端口。我希望能够将 USB 电缆插入 Linux 系统,并将 USB 电缆的另一端插入我的 PC,该 PC 恰好运行 Windows 11 并具有 PuTTY。

我可以制作我需要创建的电缆,它只不过是一端是一根 FTDI USB 电缆,另一端是一个简单的 USB 连接器。我使用 USB 连接器而不是 RS0-232 连接器,以及 FTDI TX <> RX USB 连接器、FTDI RX <> TX USB 连接器,当然还有公共 GND。我必须确保 3.3v 或 5v 信号传输,具体取决于 FTDI 芯片可以处理的信号。不管物理布线如何,真的像零调制解调器一样,这就是问题,真正的问题,软件配置?

如何配置 Linux 系统以建立到特定 USB 端口的 getty 会话?假设我可以弄清楚这一点,那么为了讨论,它是 /dev/ttyUSB0 之类的吗?

Linux 系统是基于 systemd 的,所以我理解它,我不能使用 UDEV 规则/脚本来设置终端会话,因为它将是一个长期存在的子进程或孙进程。

我知道这个终端会话不会是系统控制台的真正模仿,没关系,我只需要系统启动后的会话。

我知道这个问题需要很长时间才能解决,谢谢您的耐心。我真正需要帮助的是Linux系统上的软件配置。

答案1

据我了解,其目的是利用 USB 端口创建串行控制台端口。

首先,要制作这样的电缆,您需要两个转换器。每台计算机的 USB 端口都必须配备 USB 转 UART 转换器,并且转换器需要背对背连接,一个 RX 到另一个 TX。并将接地连接在一起,但最好采用电流隔离(一对光耦合器,每个方向 TX→RX 一个)以消除任何可能的接地环路。最后你会得到一个USB 转 USB 零调制解调器电缆,当任一端连接到计算机时,它看起来像一个串行端口,当两端都插入时,这些串行端口似乎是用标准的零调制解调器电缆连接的。

接下来,您需要在此 USB 串行端口上运行 systemd getty 服务。如果您有能力将电缆始终连接到 Linux 计算机,则可以简单地启用该serial-getty@ttyUSB0服务:

systemctl enable [email protected]

如果你希望在系统启动后允许插拔它,你需要设置 systemd 和 udev 一起运行,以便在 USB 转串口设备插入时启动该服务,并在插入时终止该服务它被拉出来。

为此,您使您的设备依靠关于服务。添加udev规则以使用SYSTEMD_WANTS环境变量动态添加依赖项:

ACTION=="add", SUBSYSTEM=="tty", KERNEL=="ttyUSB*", ENV{SYSTEMD_WANTS}+="serial-getty@%k.service"

该规则可以放入/etc/udev/rules.d/99-ttyUSB.rules.%k意思是“获取内核设备名称”,类似于ttyUSB0.

使用 udev 工具找出最方便的 udev 规则过滤器;这个非常广泛,可以接管任何看起来像 USB 串行的设备并在那里运行 getty。即使它实际上是一个显示为两个 ttyUSB 的调制解调器!看看,例如,这里了解详情;还要留意注意事项

现在,在我的 Debian 系统上,它登录到/var/log/daemon.log

(plugged)
Dec  6 16:31:39 uc-s4m75657 systemd[1]: Started Serial Getty on ttyUSB0.
Dec  6 16:31:41 uc-s4m75657 ModemManager[632]: <info>  [base-manager] couldn't check support for device '/sys/devices/pci0000:00/0000:00:14.0/usb2/2-7': not supported by any plugin
(unplugged)
Dec  6 16:32:27 uc-s4m75657 systemd[1]: [email protected]: Succeeded.
Dec  6 16:32:27 uc-s4m75657 systemd[1]: Stopped Serial Getty on ttyUSB0.

当然,与出现和消失/bin/login相关的过程。ttyUSB0

也可以看看这个答案

如果您需要限制允许同步的可能串行速度集,您可以使用覆盖文件来实现。运行并添加:systemctl edit [email protected]

[Service]
ExecStart=-/sbin/agetty 115200 %I $TERM

或者您希望它使用的任何速度,请确保您的 USB 转串行适配器支持它。

相关内容