나는 Yocto를 사용하여 구축된 임베디드 Linux 시스템을 가지고 있습니다. 최근에 Dunfell(커널 5.4)에서 Kirkstone(커널 5.15)으로 업그레이드했는데 직렬 포트 문제가 발생하기 시작했습니다. 때때로 전송 중에 많은 양의 바이트가 손실됩니다. 어떤 때는 1M의 데이터를 바이트 손실 없이 보낼 수 있고, 어떤 때는 그 양의 데이터를 보내기 위해 300바이트만 보냅니다.
이전에 이 시스템에 문제가 있었고 비슷한 증상이 있었습니다. TX에서 몇 바이트가 손실되므로 안정성을 얻으려면 전송 속도를 크게 줄여야 합니다. 그런 다음 문제는 imx_sdma 모듈이 실행되지 않았다는 것입니다. 이를 포함하면 더 높은 전송 속도에서 모든 것이 잘 작동했습니다.
그래서 이 문제가 발생했을 때 가장 먼저 확인한 것은 모듈이 로드되었는지 확인했는데, 실제로는 로드되었습니다. 또한 전송 속도를 낮추어도 바이트 손실에 눈에 띄는 영향이 없다는 사실도 발견했습니다. 그래서 다르게 보입니다.
업그레이드 전에는 하드웨어 문제가 발생하지 않았고 다른 시스템에서도 발생했기 때문에 하드웨어 문제를 배제할 수 있습니다.
이러한 전송 중에는 과도한 처리 로드가 발생하지 않습니다. 현재 프로세서 사용률은 0%입니다.
이 시스템에는 하드웨어나 소프트웨어 흐름 제어가 없다는 점에 유의해야 합니다. 실제로는 TX 전용 경로입니다. 이 경우 일부 데이터가 손실되거나 손상될 수 있지만 이는 사실이 아니며 이전에는 잘 작동했습니다.
내가 찾아야 할 이유나 해결책을 아는 사람이 있나요?
편집: 수신측에서 약간 이상한 점이 있습니다. 장치(/dev/ttymxc1)가 비차단 상태입니다. 바이트를 스트리밍할 수 있지만 cat /dev/ttymxc1 또는 dd if=/dev/ttymxc1을 수행하면 해당 포트에 많은 바이트가 들어오더라도 데이터 없이 즉시 반환됩니다. 이로 인해 수신 문제가 있을 수 있다고 생각됩니다.