首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >如何使用USB (而不是RS-232)端口作为文本终端连接?我希望我的要求是正确的?

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

Unix & Linux用户
提问于 2022-11-24 04:19:19
回答 1查看 173关注 0票数 2

我有一个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系统配置为将getty会话设置为特定的USB端口?让我们假设我可以解决这个问题,那么,为了便于讨论,它是/dev/ttyUSB0 0之类的吗?

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

我知道这个终端会话不会是系统控制台的真正模拟,也就是说,我只需要一个会话,一旦系统运行完毕。

我知道这是一个很长的问题,谢谢你的宽容。这是Linux系统上的软件配置,我真的需要帮助。

EN

回答 1

Unix & Linux用户

回答已采纳

发布于 2022-12-06 12:38:09

据我所知,其意图是用USB端口制作一个串行控制台端口。

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

接下来,您需要在这个USB串口上运行一个systemd getty服务。如果您能够负担将电缆始终连接到Linux计算机的费用,您可以只启用serial-getty@ttyUSB0服务:

代码语言:javascript
代码运行次数:0
运行
复制
systemctl enable serial-getty@ttyUSB0.service

如果您更愿意在系统启动后被允许插入和拔出它,您需要设置systemd和udev,以便在USB到串行设备插入时一起启动该服务,并在该服务被拔出时终止该服务。

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

代码语言:javascript
代码运行次数:0
运行
复制
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。即使它真的是一个调制解调器,它显示为2ttyUSB的!例如,查看这里获取详细信息;同时也要注意注意事项

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

代码语言:javascript
代码运行次数:0
运行
复制
(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]: serial-getty@ttyUSB0.service: Succeeded.
Dec  6 16:32:27 uc-s4m75657 systemd[1]: Stopped Serial Getty on ttyUSB0.

当然,与/bin/login相关联的ttyUSB0进程会出现并消失。

另见这个答案

如果需要限制允许同步的可能的串行速度集,则可以使用覆盖文件进行此操作。运行systemctl edit serial-getty@ttyUSB0.service并添加:

代码语言:javascript
代码运行次数:0
运行
复制
[Service]
ExecStart=-/sbin/agetty 115200 %I $TERM

或者你想要它使用的任何速度,确保你的USB到串行适配器支持它.

票数 0
EN
页面原文内容由Unix & Linux提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://unix.stackexchange.com/questions/726107

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档