android - 测试 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 的人都可以通过提出此测试用例失败的可能原因来发表评论或提供帮助吗?
这是唯一失败的测试用例。任何帮助表示赞赏。
解决方案
也许你可以用功能检查你的离子驱动器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
推荐阅读
- java - Java/Spring JDBC:批量插入 2 个表:从第 1 批插入获取第 2 个表所需的 FK ID
- javascript - 在回调中键入事件的正确方法
- azure - 无法连接到在 Azure 应用服务上运行的 KAFKA
- google-apps-script - HTML 服务不会在 V8 运行时打开侧边栏
- postgresql - FusionAuth 启动 RejectedExecutionException
- python - 已创建扩展数据表
- fork - 当多个区块同时添加到区块链时会发生什么?
- mysql - 如何为某些值返回null mysql
- flutter - 无法访问类内的列表项
- python - 识别特定列中最常见的词,但仅前 10 首歌曲(另一列)