使用socat將linux終端從串口轉發到TCP
我正在研究嵌入式 ARM 平台,Slackware。我正在使用 G24 Java 調製解調器,該調製解調器配置為在埠
/dev/ttyS1
和之間轉發數據/dev/ttyACM0
,因此進入這些埠中的任何一個埠的任何內容都可以在另一個埠上看到。我想在其中一個埠上設置終端,/dev/ttyS1
並將另一個埠轉發/dev/ACM0
到 TCP 埠,以便可以通過 LAN 從其他機器訪問它。首先,我配置
/etc/inittab
:s2:12345:respawn:/sbin/agetty -L ttyS1 115200 vt100
然後我嘗試通過以下命令使用 socat:
socat -d -d -d TCP-l:2020,reuseaddr,fork /dev/ttyACM0,raw,nonblock,waitlock="/var/run/ttyACM0.lock",b115200,echo=1,icanon=1,crnl
然後我嘗試
telnet 192.168.1.222 2020
從其他機器連接,結果不太好,我從客戶端看到終端要求登錄,但隨後有一個我沒有輸入的即時答案:^M^M^M
…等等,終端回答登錄不正確,然後一遍又一遍地回答同樣的事情。我知道這
^M
意味著輸入符號,但我不太確定如何解決這個問題。我嘗試了不同的 socat 配置,但沒有一個能正常工作。
經過幾個小時的深入研究和測試許多不同的選項後,我找到了一個解決方案。
首先,我必須通過添加以下行來啟用終端:
ttyS1
在文件中
/etc/securetty
。沒有這個,您將無法登錄到終端
/dev/ttyS1
。其次,我測試了許多不同的 socat 配置,以下命令有效:
/usr/local/bin/socat tcp-l:2020,reuseaddr,fork,crlf file:/dev/ttyACM0,echo=0,b115200,raw,crnl,icanon=1
然而,這個解決方案並不完美。終端在每個命令提示符後換行,以便在下一行輸入使用者輸入。此外,在執行每個命令後會出現一個空命令提示符(就像我在真正輸入的命令之後立即輸入了空命令一樣)。
我想我應該
/dev/ttyACM0
用 stty 正確配置,但我仍在研究這個主題。