Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux Shell,如何通过串口发送命令并返回?_Linux_Shell_Serial Port - Fatal编程技术网

Linux Shell,如何通过串口发送命令并返回?

Linux Shell,如何通过串口发送命令并返回?,linux,shell,serial-port,Linux,Shell,Serial Port,我希望通过串行端口向PDU发送“重新启动”命令。在交互模式下,我要做的是: #screen /dev/ttyS1 >reboot >[Detach Screen] # 如果我想在脚本中自动执行此任务,我应该能够使用shell中的单个命令重新启动PDU,如下所示: #echo "reboot" >/dev/ttyS1 但是,它不起作用!我不知道为什么。。。。你能帮我吗 PDU手动请求波特率为9600,这不是默认波特率。我尝试了以下命令来设置波特率,但仍然没有锁定: stty

我希望通过串行端口向PDU发送“重新启动”命令。在交互模式下,我要做的是:

#screen /dev/ttyS1
>reboot
>[Detach Screen]
#
如果我想在脚本中自动执行此任务,我应该能够使用shell中的单个命令重新启动PDU,如下所示:

#echo "reboot" >/dev/ttyS1
但是,它不起作用!我不知道为什么。。。。你能帮我吗

PDU手动请求波特率为9600,这不是默认波特率。我尝试了以下命令来设置波特率,但仍然没有锁定:

stty -F /dev/ttyS1 speed 9600 cs8 -cstopb -parenb 
无论有无屏幕,这些输出都不会改变:

 # stty -a -F /dev/ttyS1
    speed 9600 baud; rows 0; columns 0; line = 0;
    intr = ^C; quit = ^\; erase = ^?; kill = ^H; eof = ^D; eol = <undef>;
    eol2 = <undef>; swtch = <undef>; start = ^Q; stop = ^S; susp = ^Z;     rprnt = ^R;
    werase = ^W; lnext = ^V; flush = ^O; min = 100; time = 2;
    -parenb -parodd 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
#stty-a-F/dev/ttyS1
速度9600波特;第0行;第0列;直线=0;
intr=^C;退出=^\;擦除=^?;kill=^H;eof=^D;eol=;
eol2=;swtch=;开始=^Q;停止=^S;susp=^Z;rprnt=^R;
werase=^W;lnext=^V;冲洗=^O;最小值=100;时间=2;
-parenb-parodd 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-echok-echonl-noflsh-xcase-tostop-echoprt
echoctl echoke

以下是我们解决此问题的方法:

  • 使用原始设置配置串行端口:

    stty -F /dev/ttyS1 speed 9600 cs8 -cstopb -parenb raw
    
  • 使用echo发送命令,带有\r:

    echo -ne "reboot\r" > /dev/ttyS1
    
  • 我相信上面可能包括一个打字错误。如果上述方法无效,请尝试:

     echo -ne "reboot\n\r" > /dev/ttyS1
    

    我想这是一个复制品:请拿一个look@fvu这个问题是关于将\char发送到串行通道的。我无法发送任何内容,包括\。好的,您的编辑显示您已经尝试了stty位:)您知道您在/dev/ttyS1上运行screen,在/dev/ttyS0上运行stty吗?您可以在另一个控制台上运行stty-a-F/dev/ttyS1来查看设置屏幕正在使用什么吗?将这些设置与未运行屏幕的端口设置进行对比,可能会给出一个提示,说明一个工作,另一个不工作。这是一个输入错误。运行屏幕时没有更改:
    #stty-a-F/dev/ttyS1速度9600波特;第0行;第0列;直线=0最好将stty的两个输出添加到您的问题中