我有一个使用 Yocto 构建的嵌入式 Linux 系统。最近,我从 Dunfell(内核 5.4)升级到 Kirkstone(内核 5.15),并且开始遇到串行端口问题。传输时有时会丢失大块字节。有时我可以发送 1M 的数据而不会丢失字节,有时我只发送 300 个字节即可发送该数据量。
我以前遇到过这个系统的问题,也有类似的症状。 TX 上会丢失几个字节,我必须大幅降低波特率才能实现稳定性。然后问题最终是我没有运行 imx_sdma 模块。一旦我把它包括在内,一切都在更高的波特率下正常工作。
因此,当我遇到这个问题时,我检查的第一件事是该模块已加载,确实如此。我还发现降低波特率不会对丢失的字节产生明显影响。所以看起来不一样。
我可以排除硬件问题,因为它在升级之前没有发生,并且在其他系统上发生。
这些传输期间没有繁重的处理负载。处理器当前利用率为 0%。
我应该注意到这个系统上没有硬件或软件流控制。它实际上是仅 TX 的路径。在这种情况下,可能会出现一些数据丢失或损坏的情况,但不是这样的,而且以前工作得很好。
有人知道我应该寻找原因或解决方案吗?
编辑:在接收端有一件有点奇怪的事情,设备(/dev/ttymxc1)是非阻塞的。我可以将字节流传输到它,但是如果我执行 cat /dev/ttymxc1 或 dd if=/dev/ttymxc1 ,它会立即返回而没有数据,即使该端口上应该有很多字节进入。这让我认为可能存在一些接收问题。