Caching 内核和用户空间同步

Caching 内核和用户空间同步,caching,linux-kernel,Caching,Linux Kernel,我使用do_mmap\u pgoff()和remap\u pfn\u range()将内存区域映射到用户空间,并且使用ioremap()将相同的区域映射到内核 当我从用户空间写入这个区域,然后从内核空间读取时,我发现并不是所有字节都写入了内存区域 当我从用户空间写入时,从用户空间读取,然后从内核读取,一切正常。从用户空间中读取并推送以前所做的更改 我知道内核和用户空间之间存在缓存或缓冲区。我知道我需要实现一些刷新失效或缓冲区转储到内存区域 我尝试使用pgprot_uncached()将此VMA取

我使用
do_mmap\u pgoff()
remap\u pfn\u range()
将内存区域映射到用户空间,并且使用
ioremap()
将相同的区域映射到内核

当我从用户空间写入这个区域,然后从内核空间读取时,我发现并不是所有字节都写入了内存区域

当我从用户空间写入时,从用户空间读取,然后从内核读取,一切正常。从用户空间中读取并推送以前所做的更改

我知道内核和用户空间之间存在缓存或缓冲区。我知道我需要实现一些刷新失效或缓冲区转储到内存区域

我尝试使用
pgprot_uncached()
将此VMA取消缓存,我尝试实现外部缓存范围刷新失效、VMA缓存范围刷新、VMA tlb范围刷新,但都没有按照我的预期工作。所有flush inval操作只是清除内存区域,但我需要应用从用户空间所做的更改。使用未缓存内存会减慢数据传输过程


如何正确地在用户和内核之间进行同步?

是MMIO吗?!为什么以及如何在用户空间中使用它?也许你们需要UIO框架。我如何以及为什么在用户空间使用它,这是一个很长的故事。这很好。从用户空间读取同一内存区域,以某种方式将更改推送到实际内存。我只需要找出是什么原因造成的。