工具/软件:Linux
大家好、我使用的是 Processor SDK 3.03、这是为具有 TDA2 芯片的定制电路板而构建的。
我们已用例从 SD 卡上的文件中填充 NullSrc 链接中的4个输入缓冲区、并将它们转发到我们用于将这些缓冲区写入 SSD 的链接。 我们已成功地使用 write() API 写入在没有 O_direct 标志的情况下打开的4个文件。 但是、CPU 负载非常高、这会导致帧丢失、我们认为由于文件系统高速缓存过多、我们怀疑正在后台进行缓存。
我们接下来尝试打开带有 O_Direct 标志的文件、但没有写入文件、"dstat"显示没有磁盘活动。 我们仔细研究了它,发现 write()根本没有完成,返回-1。 errno 错误是"错误地址"。 我们知道 O_Direct 的使用需要正确的缓冲区对齐,但我们确保它们以多种方式对齐(将地址打印到控制台以及在此处使用 nifty 技术 :http://www.titov.net/2006/01/02/using-o_largefile-or-o_direct-on-linux ),但没有结果,它会继续返回-1。
我偶然发现了这篇文章: https://e2e.ti.com/support/dsp/davinci_digital_media_processors/f/716/t/242361#pi320098=3。 它与内核无法看到的 CMEM 池中分配的 SR 缓冲器或类似的缓冲器有关。 是否有任何方法可以将 CMEM 池与内核可以看到的存储器重叠? 或者是否完全有其他东西?
提前感谢您。
此致、
Nick