我与嵌入式设备的唯一通信方式是串行端口。默认情况下,嵌入式 Linux 使用此端口作为终端。如何禁用此终端并使用串行链路传输二进制数据?我听说过 rx 和 tx 之类的命令,但我找不到它们。
我想我可以从 /dev/tty 中读取()和写入()内容,但我想确保没有错误消息或任何与我的数据流混淆的东西。
您不能将终端设置为原始吗?
看看这个教程。
要禁用 Linux 控制台,您必须更改引导加载程序创建的 Linux 命令行:console=/dev/ttyS? 到:控制台=空
您可以使用 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)
如果您仍然想要一个表现良好的终端,请不要忘记在程序结束时恢复设置。
您可以在终端上运行将通过应用程序级协议传输数据的命令。您所指的 rx 和 tx 命令实现了XMODEM 文件传输协议。这可能是一个解决方案,如果您要传输的二进制数据由文件组成,吞吐量需求很低,并且您不介意运行命令的管理开销。或者,您可能希望复用串行端口来处理数据传输和终端。禁用串行终端驱动程序命令 (getty),并通过串行线路运行PPP协议以建立与您的设备的 IP 连接。然后,您可以通过 ssh 或 telnet 登录设备并通过 IP 套接字传输数据。
正如其他注释所暗示的那样,有几件事需要检查,收集在这里:
终端程序可能对您没有用处,除非您可以在嵌入式设备上运行相同的程序来管理连接的另一端。
是的,你所有的串口都在/dev/ttyxx
. 请注意,这/dev/tty
是代表您当前终端的快捷方式,而不是特定的串行端口。通常,这些由 root 拥有,并且要求您具有特权或在adm
组中才能直接从您的应用程序访问设备。
您可能需要chown
该设备,以便您可以访问它。我不确定更改设备所有权的后果是什么;IIRC,它很容易做到并且效果很好。另一种方法是用于setuid
将您的程序提升到特权状态。
有一个名为getty
让用户从串行端口登录的程序。您inittab
将从getty
串行端口开始,以便人们可以登录。
你想禁用getty
. 在某些情况下,有一个端口管理器可以帮助做到这一点。
在某些情况下,您可以更改您inittab
的使用mgetty
,这是一个更智能且更易于控制的getty
.