主题中讨论的其他器件:AM4378
大家好、
以下是客户提出的问题、可能需要您的帮助:
Linux 版本: Linux 4.9.69
步骤: 内核驱动程序通过 dma_alloc_相干 请求存储器、然后通过 DMA 将 GPMC 数据移动到请求的存储器中、通过 netlink 将物理地址发送到上层应用程序、后者随后读取地址映射后的数据。
结果: 上层读取的数据与内核不一致。 (内核保存发送到文件的地址数据、上层应用程序将数据保存到文件、比较这两个文件)
内核驱动程序通过 dma_alloc_相干 请求存储器、然后通过 DMA 将 GPMC 数据移动到请求的存储器、在 zmalloc 中阻止地址、并通过 virt_TO_phys 将其转换为物理地址。 然后、DMA 被移动到存储器 memcpy 中的数据到新的 zmalloc 地址、并且地址被发送到上层应用、从而产生相同的数据。
将这两个文件与错误进行比较、然后发现这里的错误是先前的数据。 客户目前怀疑上层应用程序正在读取数据,并且缓存中的数据不会被清空到内存中。
am4378上的运行正常、但4378上的 Linux 版本为4.1.18。
您可以帮助检查此案例吗? 谢谢。
此致、
樱桃