我与嵌入式设备通信的唯一方式是串口。默认情况下,嵌入式Linux使用此端口作为终端。如何禁用此终端并使用串行链接传输二进制数据?我听说过像rx和tx这样的命令,但我找不到它们。
我想我可以从/和/ dev / tty中读取()和写()东西,但我想确保没有错误消息或任何混乱的数据流。
答案 0 :(得分:3)
您不能将终端设置为原始终端吗?
答案 1 :(得分:3)
要禁用Linux控制台,您必须更改引导加载程序创建的Linux命令行: 控制台=的/ dev / ttys中? 至 : 控制台=空
答案 2 :(得分:3)
您可以使用xmodem等应用程序通过任何终端传输文件。您是通过终端说出的串口,还是内核控制台。
如果你的内核没有嘈杂,那么你可以使用当前的连接来使xmodem像转移一样。在主机端,您可以使用kermit,这很好且可编写脚本。
如果你想使你的串口原始,并且你打开了文件描述符ttyfd, 这是一种方法:
struct termios tty, orig_tty;
...
if(tcgetattr(ttyfd, &tty) < 0)
{
// error checking
}
// backup tty, make it raw and apply changes
orig_tty = tty;
cfmakeraw(&tty);
if(tcsetattr(ttyfd, TCSAFLUSH, &tty) < 0)
{
// error checking
}
...
//end of program or error path :
tcsetattr(ttyfd, TCSAFLUSH, &orig_tty)
如果您仍然想要一个表现良好的终端,请不要忘记恢复程序结束时的设置。
答案 3 :(得分:2)
您可以在终端上运行一个命令,该命令将通过应用程序级协议传输数据。您引用的rx和tx命令实现XMODEM file transfer protocol。它可能是一个解决方案,如果要传输的二进制数据由文件组成,吞吐量需求很低,并且您不介意运行命令的管理开销。或者,您可能希望多路复用串行端口以处理数据传输和终端。禁用串行终端驱动程序命令(getty),并通过串行线路运行PPP协议以建立与设备的IP连接。然后,您可以通过ssh或telnet登录设备,并通过IP套接字传输数据。
答案 4 :(得分:2)
正如其他说明暗示的那样,有几件事要检查,收集在这里:
除非您可以在嵌入式设备上运行相同的程序来管理连接的另一端,否则终端程序可能对您没用。
答案 5 :(得分:1)
是的,所有串口都在/dev/ttyxx
。请注意,/dev/tty
是代表当前终端的快捷方式,而不是特定的串行端口。通常,这些都归root所有,并要求您拥有权限或在adm
组中直接从您的应用程序访问设备。
您可能需要chown
设备,以便您可以访问它。我不确定更改设备所有权的后果是什么; IIRC,它很容易做到并且工作得很好。另一种方法是使用setuid
将程序提升到特权状态。
有一个名为getty
的程序允许用户从串口登录。您的inittab
将在串口上启动getty
,以便用户可以登录。
您想要停用getty
。在某些情况下,有一个端口管理器可以帮助实现这一目标。
在某些情况下,您可以将inittab
更改为使用mgetty
,这是getty
更智能,更易于控制的版本。