我有一个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系统上的软件配置,我真的需要帮助。
发布于 2022-12-06 04:38:09
据我所知,其意图是用USB端口制作一个串行控制台端口。
首先,要制作这样的电缆,你需要两个转换器。每台计算机的USB端口必须提供USB到UART转换器,转换器需要背靠背连接,从一个到另一个的RX。并将地面连接在一起,但可能最好是有一个电流隔离(一对光电耦合器,每个方向的TX→RX),以消除任何可能的地面回路。最后,您将拥有一个USB到USB零调制解调器电缆,它看起来像一个串行端口,当两端连接到计算机上时,当两端都插入时,这些串行端口似乎与标准的空调制解调器电缆连接。
接下来,您需要在这个USB串口上运行一个systemd getty服务。如果您能够负担将电缆始终连接到Linux计算机的费用,您可以只启用serial-getty@ttyUSB0
服务:
systemctl enable serial-getty@ttyUSB0.service
如果您更愿意在系统启动后被允许插入和拔出它,您需要设置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。即使它真的是一个调制解调器,它显示为2ttyUSB的!例如,查看这里获取详细信息;同时也要注意注意事项。
现在,在我的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]: 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
并添加:
[Service]
ExecStart=-/sbin/agetty 115200 %I $TERM
或者你想要它使用的任何速度,确保你的USB到串行适配器支持它.
https://unix.stackexchange.com/questions/726107
复制相似问题