Linux kernel Debian UART丢弃字节

Linux kernel Debian UART丢弃字节,linux-kernel,debian,beagleboneblack,uart,Linux Kernel,Debian,Beagleboneblack,Uart,情况: 我试图操纵/破解Debian内核,以便通过奇偶校验破解使用9位UART,您可以在网络上的任何地方找到参考。现在由于某些原因,Tx工作正常,但当我们查看Rx时,我们正在删除字节。我们期望返回9个字节,包括crc,但返回的数量在4-7之间。它会随着完全相同的代码在一行中运行几次而变化,因此它看起来几乎与缓冲区相关。将其连接到逻辑分析仪从设备的响应是正确的(9个预期字节),但它在我无法追踪的低级别的某个地方被“损坏” 尝试: 所以我开始转储这里的所有字节(char): static void

情况: 我试图操纵/破解Debian内核,以便通过奇偶校验破解使用9位UART,您可以在网络上的任何地方找到参考。现在由于某些原因,Tx工作正常,但当我们查看Rx时,我们正在删除字节。我们期望返回9个字节,包括crc,但返回的数量在4-7之间。它会随着完全相同的代码在一行中运行几次而变化,因此它看起来几乎与缓冲区相关。将其连接到逻辑分析仪从设备的响应是正确的(9个预期字节),但它在我无法追踪的低级别的某个地方被“损坏”

尝试: 所以我开始转储这里的所有字节(char):

static void serial_omap_rdi(struct uart_omap_port *up, unsigned int lsr)
这仍然导致只能看到4-7字节的坏数据。我假设这是由于奇偶校验/帧/FIFO错误造成的,但我似乎无法更深入地了解它到底在哪里失败

问题: 有没有人在带有linux内核的UART线路上看到过类似这种类型的丢弃数据?如果是这样的话,你知道有什么可能的途径来追踪它吗

在内核中是否有任何地方可以让我真正转储进入UART Rx线路的逐位数据

非常感谢您的任何帮助,因为我已经完全明白内核是如何/在哪里丢弃这些字节的了

平台: BBB Debian Linux 3.8.13-bone53 armv7l GNU/Linux
16750 UART(我相信)

串行驱动程序可以配置为丢弃(丢弃)具有奇偶校验错误的字节。您是否检查了端口的termios是如何设置的?请参阅:并注意有关PARMRK和IGNPARThanks的部分,以获取输入!不幸的是,是的,我已经研究过设置IGNPAR和PARMRK。我尝试了许多不同的termios选项组合,但仍然没有得到更好的结果。这就是为什么我希望能够达到我能达到的最深层次,在Rx通信的逐位层次上进行实际分析。或者至少找到内核中由于错误而丢弃这些值的位置。。。但是到目前为止运气很差。逐位级别由16550(或兼容的)UART硬件处理,内核对此一无所知。当UART发出信号表示它已接收到一个字节(或FIFO缓冲模式下的字节)时,内核仅从UART读取寄存器。在写上面的评论时,我在谷歌搜索“linux串行驱动程序奇偶校验错误”时,遇到了debian论坛的这篇文章,这篇文章可能会给你一些线索:好的,硬件处理逐位到字节的转换,并向内核发送一个中断信号,表示它有一个字节,但仍将由内核处理并保留/丢弃该字节是否正确?我不确定。10年前,当我设计固件时,我会更加确定,因为那时我经常使用16550。我知道内核读取UART中的一个寄存器,以确定是否发生了任何错误。但我不确定FIFO中的数据字节是否有效。理论上,我认为硬件设计师没有理由故意使其无效。但在阅读数据表时,我找不到任何关于这种行为的提及。我认为最好的办法是编写一个特殊的设备驱动程序,在9位模式下使用UART,然后进行一些测试。