首页 > 解决方案 > 测试 ION 驱动程序时,libion​​ 中的 DMAReadCached 失败

问题描述

我正在尝试在 linux 4.4.60 中测试 ION Driver。我正在测试 32 位内核。tests/device_test.cpp(LIBION 的一部分)中的这个特定测试用例“DMAReadCached”失败。

有关 DMAReadCached 的详细信息:(失败)

这是一个测试用例,其中 ION 驱动程序将分配内存,而 ION 本身将负责缓存维护。(ION_IOC_FLAGGED)。我们正在尝试将某些内容写入分配的缓存内存中。我们正在尝试将其读入用户空间缓冲区。然后我们将写入用户空间缓冲区的数据与我们写入缓存的原始数据进行比较。

仅供参考:DMAReadCachedNeedsSync 是另一个测试用例,其中 ION 将分配内存,但缓存维护将通过显式同步调用完成。这个测试用例通过了。DMAWriteCached 也通过了与 DMAReadCached 相反的地方。

我目前正在使用 NULL 设备(它一定不会为 32 位内核造成任何问题?)。仅对于 64 位内核,我们需要传递正确的设备。

我尝试调试,发现 readDMA 没有正确发生,我将从使用 ion_alloc 分配的 fd 读取到在用户空间中分配的 buf 中。

此外,通过显式调用同步的 DMAReadCached。但是默认情况下,这个测试用例应该在没有同步调用本身的情况下通过。

任何了解 ION 的人都可以通过提出此测试用例失败的可能原因来发表评论或提供帮助吗?

这是唯一失败的测试用例。任何帮助表示赞赏。

标签: androidmemory-managementlinux-device-driverembedded-linuxandroid-ion

解决方案


也许你可以用功能检查你的离子驱动器ion_map_dma_buf()。检查它是否有缓存同步操作。它应该进行正确的缓存同步以使测试通过。

static struct sg_table *ion_map_dma_buf(struct dma_buf_attachment *attachment,
                    enum dma_data_direction direction)

参考: http ://androidxref.com/kernel_3.18/xref/drivers/staging/android/ion/ion.c#880


推荐阅读