这与一个上一个线程我大约一个月前创建并得到了答复。
今天,我尝试在使用 Belkin F5U409 USB 串行适配器运行 Ubunutu 20 的笔记本电脑上设置串行控制台登录提示。我遇到了同样的问题,较大的文本输出最终会分解成乱码文本。但是,此时间设置stty ixon
并不能解决该行为。请参阅下面的问题输出示例。
作为上下文,我用来通过 RS232 连接到 Ubuntu 笔记本电脑的计算机是 EPSON PX-8。在 PX-8 上,我使用名为 TEL.COM 的终端仿真软件。请参阅下面我在 PX-8 上配置的终端参数。
我正在使用 systemd 在 USB0 上启用控制台。我需要使用 systemd 配置流量控制吗?除了 stty 之外,还有其他地方需要为 ttyUSB0 配置参数吗?systemctl start [email protected]
我尝试在另一台运行 Debian 10 的笔记本电脑上进行设置,但得到了相同的行为。
PX-8 上的 TEL.COM 设置:
Baud: 9600, Char Bits: 8, Parity: NONE, Stop Bits: 2, RTS: ON, Flow Control: ON
当我尝试输出命令历史记录时此问题的示例:
albert@t450:/$ history
1 sudo rasp-config
2 sudo raspi-config
3 sudo nano /boot/cmdline.txt
4 tail /boot/cmdline.txt
5 sudo shutdown -r now
6 sudo vim ~/boot/cmdline.txt
7 cd /./boot
8 dir
9 sudo vim cmdline.txt
10 sudo vim config.txt
11 sudo shutdown -r now
12 dfgdf
13 vim
14 sudo vim cmdline.txt
15 cd /./boot
16 sudo vim cmdline.txt
17 sudo shutdown -r now
18 cd /./boot
19 sudo vim cmdline.txt
20 sudo shutdown -r now
21 ping 8.8.8.8
2 xprt TEM=Vvj9s9ds9j3oin so nat1 machine
x Rom =vos cngas-2goses9g3
-xtiet n n5
-s oiy
y
Ubuntu机器上的stty配置:
albert@t450:/$ stty -a
speed 9600 baud; rows 40; columns 80; line = 0; intr = ^C; quit = ^\; erase = ^?;
kill = ^U; eof = ^D; eol = <undef>; eol2 = <undef>; swtch = <undef>; start = ^Q;
stop = ^S; susp = ^Z; rprnt = ^R; werase = ^W; lnext = ^V; discard = ^O; min = 1;
time = 0; -parenb -parodd -cmspar cs8 -hupcl cstopb cread -clocal -crtscts -ignbrk
-brkint -ignpar -parmrk -inpck -istrip -inlcr -igncr icrnl ixon ixoff -iuclc -ixany
-imaxbel iutf8 opost -olcuc -ocrnl onlcr -onocr -onlret -ofill -ofdel nl0 cr0 tab0
bs0 vt0 ff0 isig icanon iexten echo echoe echok -echonl -noflsh -xcase -tostop
-echoprt echoctl echoke -flusho -extproc
请注意,所有这些参数都是在 stty 中设置的:
ixon
ixoff
stop = ^S
start = ^Q;
cs8
cstopb
-parenb
答案1
贝尔金 F5U109 似乎是一款设计相当古老的设备,所以也许是 F5U409 具有相同的USB供应商:设备id 类似。在本例中,由于 id 而选择的 Linux 驱动程序是mct_u232.c。我们可以在.h 文件为了流量控制:
除了 DTR/RTS 设置之外,没有实现任何流量控制特定请求。对于无流控制,这两个信号均被丢弃,但对于硬件或软件流控制,这两个信号均被置位。
所以看来这个驱动中并没有实现XON/XOFF软件流控制,是通过嗅探Windows98下发出的usb命令而得来的。也许硬件本身不提供这个功能。
您可以尝试在用户级别实现流量控制,但这不太可能足够,因为输入和输出上可能存在先进先出,因此当 XOFF 到达用户级别时,可能仍然存在太多字符无法取消的fifo。也许 PX-8 提供了其他可用于打包数据的协议?
您仍然可以通过连接额外的调制解调器线路 RTS 和 CTS(9 针 DB9 的针脚 7 和 8,DB25 的针脚 4 和 5)来使用硬件流控制。如果您将 PX-8 连接为计算机而不是终端,则可能需要交换这些。您stty crtscts
也可能需要-clocal
。
另外,由于制造商提供了足够的文档,Linux 还可以更好地支持其他串行 USB 设备,例如流行的 FTDI 系列。 FTDI 驱动程序似乎有代码在设备中设置 XON 和 XOFF 字符,这将允许硬件对 XOFF 字符的接收做出快速响应,而无需等待字符到达内核被识别。 FTDI 芯片存在非法复制品,因此请尽量购买信誉良好的品牌以确保完全兼容性。