Linux 为什么串行连接仅在按enter键后接收字符?
我有一个简单的PC到板的串行连接(9600,无奇偶校验,8位,无硬件流) 我在PC中打开了简单终端*(teraterm),然后在teraterm和board中输入键,我就这么做了Linux 为什么串行连接仅在按enter键后接收字符?,linux,serial-port,uart,Linux,Serial Port,Uart,我有一个简单的PC到板的串行连接(9600,无奇偶校验,8位,无硬件流) 我在PC中打开了简单终端*(teraterm),然后在teraterm和board中输入键,我就这么做了 cat /dev/ttyO5 我在作用域中看到了按下的字符,但只有在teraterm中按下“enter”后,我才在board控制台中看到这些字符(就好像它们存储在Linux驱动程序中的某个FIFO中,该驱动程序只输入或输出) 为什么Linux驱动程序只在按enter键时接收字符 是否有一些方法可以不按enter键接
cat /dev/ttyO5
我在作用域中看到了按下的字符,但只有在teraterm中按下“enter”后,我才在board控制台中看到这些字符(就好像它们存储在Linux驱动程序中的某个FIFO中,该驱动程序只输入或输出)
您似乎想要的行为称为非规范读取(也称为原始读取或二进制读取)
每个字符都被缓冲(通常在可DMA的内存中),然后转发给行规程处理程序,该处理程序也在缓冲接收到的数据。
userland程序的规范化read()syscall将被阻止,直到行规程处理程序检测到行终止字符
cat
命令之前,将串行端口配置为非规范模式:
stty -F /dev/tty05 raw
或者更可能是正确的设备节点
stty -F /dev/ttyO5 raw
或者使用termios接口在板上的用户空间程序中将串行端口配置为非规范模式。示例代码是
有关如何正确编程串行端口的文档如下
还有。这个设备真的是
tty05
,还是应该是ttyO5
?关于tty05,我已经纠正了问题中的错误