我唯一与嵌入式设备通信的方式是串口。默认情况下,嵌入式Linux将此端口用作终端。如何禁用此终端并使用串行链接传输二进制数据?我听说过像rx和tx这样的命令,但我找不到它们。
我认为我只需从/dev/tty读取()和写入()即可,但我想确保没有错误消息或其他任何东西干扰我的数据流。
要禁用Linux控制台,您需要更改由引导加载程序创建的Linux命令行,从: console=/dev/ttyS? 到: console=null
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)
正如其他注释所示,有几个需要检查的问题,请参阅以下内容:
除非您可以在嵌入式设备上运行相同的程序来管理连接的另一端,否则终端程序对您可能没有用处。
是的,您所有的串口都在/dev/ttyxx
中。请注意,/dev/tty
是一个快捷方式,代表您当前的终端,而不是特定的串口。通常情况下,这些串口由root拥有,并且需要您具有特权或者在adm
组中才能直接从应用程序访问设备。
您可能想要chown
设备以便您可以访问它。我不确定更改设备所有权的后果是什么;如果我没记错的话,这很容易做到并且效果很好。另一种选择是使用setuid
将您的程序提升到特权状态。
有一个名为getty
的程序,它允许用户从串口登录。您的inittab
将在串口上启动getty
,以便人们可以登录。
您想要禁用getty
。在某些情况下,有一个端口管理器可以帮助您完成此操作。
在某些情况下,您可以更改inittab
以使用mgetty
,这是一个更智能、更易于控制的getty
版本。