2017-06-20 42 views
2

我使用mmap打開/ dev/MEM的讀取/寫入UART寄存器。 它運作良好,但我的問題是: 寫之後,是msync系統調用MS_SYNC標誌真正需要的?在寫入/ dev/mem時,是否真的需要msync?

從我的理解,的/ dev/MEM比通過平移虛擬存儲器地址,並提供訪問物理存儲器區域(UART登記在我的情況下),以便得到進入從用戶空間一些物理存儲器的虛擬設備。

這不是一個普通文件,我想這寄存器的修改不被緩衝/高速緩存。出於性能原因,我實際上希望避免此係統調用。

由於

+0

「我使用mmap打開/ dev/MEM的讀取/寫入UART寄存器。」 **大錯**。爲此,使用內核驅動程序和串行API。 –

回答

3

我的理解是msync()需要來更新通過與mmap()創建的映射改性在正常文件中的數據。

但是,當你在/dev/mem使用mmap你不映射磁盤上的正常文件,你只是直接映射所需的硬件內存範圍到你的進程的虛擬地址空間,所以msync()題外話,它不會做任何事情。

是謊言到您的mmapped虛擬空間你的寫作之間的硬件設備是CPU緩存的唯一的事。要強制執行這個操作,你可以強制刷新緩存(可能是__clear_cache()?),但這通常是不必要的,因爲內核會識別內存映射設備寄存器並禁用該範圍的緩存。在X86的CPU,它通常與MTRR進行,但與ARM我不知道的細節...

相關問題