二进制数据通过串行terminal

我的embedded式设备的唯一通信方式是串行端口。 默认情况下,embedded式Linux使用此端口作为terminal。 如何禁用此terminal并使用串行链接传输二进制数据? 我听说像RX和TX的命令,但我找不到它们。

我想我可以只读()和写入()的东西到/ dev / tty,但我想确保没有错误信息或任何与我的数据stream混乱。

Solutions Collecting From Web of "二进制数据通过串行terminal"

您可以使用像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) 

如果你还想要一个性能良好的终端,不要忘记在程序结束时恢复设置。

你不能把终端设为原始的吗?

看看这个教程 。

要禁用Linux控制台,必须更改由bootloader创建的Linux命令行:console = / dev / ttyS? 到:console = null

您可以在终端上运行一个将通过应用程序级协议传输数据的命令。 您引用的rx和tx命令实现了XMODEM文件传输协议 。 这可能是一个解决方案,如果要传输的二进制数据由文件组成,吞吐量要求很低,并且您不介意运行命令的管理开销。 或者,您可能希望复用串行端口来处理数据传输和终端。 禁用串行终端驱动程序命令(getty),并通过串行线路运行PPP协议,以建立到设备的IP连接。 然后您可以通过ssh或telnet登录到设备,并通过IP套接字传输您的数据。

正如其他笔记所暗示的,有几件事要检查,收集在这里:

  1. 确保linux内核不使用串口。 确保在grub文件的bootload命令中没有console =选项。 它通常不是默认的。
  2. 确保串口没有getty运行。 在/ etc / inittab中查找/ dev / ttyS0(串行端口A)的条目,如果有,则将其注释掉。
  3. 确保/ dev / ttyS0可以被你的进程读写。 您可以创建一个特定的用户,在该用户下运行控制程序,并拥有/ dev / ttyS0,然后是chmod 700 / dev / ttyS0。 这将有助于确保其他用户/程序不会尝试使用串行端口。
  4. 在ttyS0上使用open()来获得一个fd,然后使用tcsetattr系列的例程来设置线速度和纪律。

终端程序可能不会对您有用,除非您可以在嵌入式设备上运行相同的程序来管理连接的另一端。

是的,所有的串口都在/dev/ttyxx 。 请注意, /dev/tty是代表当前终端的快捷方式,不是特定的串行端口。 通常,这些属于root用户,并且要求您拥有特权或位于adm组中才能直接从应用程序访问设备。

您可能需要chown设备,以便您可以访问它。 我不确定改变设备所有权的后果是什么; IIRC,这很容易做,很好地工作。 另一种方法是使用setuid将程序升级到特权状态。

有一个名为getty的程序,允许用户从串口登录。 你的inittab将在串口启动getty ,以便用户登录。

你想禁用getty 。 在某些情况下,有一个港口经理帮助做到这一点。

在某些情况下,你可以改变你的inittab来使用mgetty ,这是一个更智能,更容易控制getty版本。