在pc上进行嵌入式开发调试时,一般用登陆工具(比如SecureCRT,通过ssh协议)登陆linux服务器进行编译,然后通过串口协议登陆设备进行调试。
登陆的命令行界面,一般会显示一个$提示符,然后光标闪烁,等待用户输入:
[root@yanfa123_centos6-jk18:latest ~]$
此时输入一个字符(比如a),命令行界面上立即显示这个字符,然后光标在这个字符之后闪烁:
[root@yanfa123_centos6-jk18:latest ~]$ a
这个字符并不是登陆工具接收到用户输入,然后直接打印出来的。
登陆工具将用户输入的字符发送给对端,对端再将这个字符发送回来,登陆工具接收到这个反馈字符,才会将其打印出来,这就是回显(echo)。换句话说,登陆工具并不知道回显的存在,它只是一个中间媒介,接收用户输入,将其发送给对端,再接收对端发送过来的数据,将其打印出来。
控制回显的是对端的tty。回显做为对端tty的一个属性,是可以手动开关的。
比如,输入下面的命令,就可以关闭tty回显:
[root@yanfa123_centos6-jk18:latest ~]$ stty -echo
关闭回显之后,可以正常输入命令,只是这些输入的字符不会在登陆工具的命令行界面里显示出来,但输完命令敲回车后,界面里还是可以正常显示命令执行结果的。
登陆工具接收到的用户输入,是实时发送到对端的,并不是等回车之后才发送。只是回车之后,对端才执行命令,反馈结果。
上面的例子,打开回显时,具体流程为:
a. 用户输入字符a
b. 登陆工具接收到字符a,并将其发送给对端
c. 对端接收到字符a,并将字符a发送回登陆工具
d. 登陆工具在命令行界面里显示字符a
e. 用户输入回车
f. 登陆工具接收到回车,并将其发送给对端
g. 对端接收到回车,并将回车发送回登陆工具
h. 登陆工具接收到回车之后在命令行界面里换行
i. 对端执行命令,并将结果发送回登陆工具
j. 登陆工具在命令行界面里显示命令执行结果(比如"-bash: a: command not found")
关闭回显时,流程为:
a. 用户输入字符a
b. 登陆工具接收到字符a,并将其发送给对端
c. 用户输入回车
d. 登陆工具接收到回车,并将其发送给对端
e. 对端执行命令,并将结果发送回登陆工具
f. 登陆工具在命令行界面里显示命令执行结果(比如"-bash: a: command not found")