我使用mmap
打開/ dev/MEM的讀取/寫入UART寄存器。 它運作良好,但我的問題是: 寫之後,是msync
系統調用MS_SYNC標誌真正需要的?在寫入/ dev/mem時,是否真的需要msync?
從我的理解,的/ dev/MEM比通過平移虛擬存儲器地址,並提供訪問物理存儲器區域(UART登記在我的情況下),以便得到進入從用戶空間一些物理存儲器的虛擬設備。
這不是一個普通文件,我想這寄存器的修改不被緩衝/高速緩存。出於性能原因,我實際上希望避免此係統調用。
由於
我使用mmap
打開/ dev/MEM的讀取/寫入UART寄存器。 它運作良好,但我的問題是: 寫之後,是msync
系統調用MS_SYNC標誌真正需要的?在寫入/ dev/mem時,是否真的需要msync?
從我的理解,的/ dev/MEM比通過平移虛擬存儲器地址,並提供訪問物理存儲器區域(UART登記在我的情況下),以便得到進入從用戶空間一些物理存儲器的虛擬設備。
這不是一個普通文件,我想這寄存器的修改不被緩衝/高速緩存。出於性能原因,我實際上希望避免此係統調用。
由於
我的理解是msync()
需要來更新通過與mmap()
創建的映射改性在正常文件中的數據。
但是,當你在/dev/mem
使用mmap
你不映射磁盤上的正常文件,你只是直接映射所需的硬件內存範圍到你的進程的虛擬地址空間,所以msync()
是題外話,它不會做任何事情。
是謊言到您的mmapped虛擬空間你的寫作之間的硬件設備是CPU緩存的唯一的事。要強制執行這個操作,你可以強制刷新緩存(可能是__clear_cache()
?),但這通常是不必要的,因爲內核會識別內存映射設備寄存器並禁用該範圍的緩存。在X86的CPU,它通常與MTRR進行,但與ARM我不知道的細節...
「我使用mmap打開/ dev/MEM的讀取/寫入UART寄存器。」 **大錯**。爲此,使用內核驅動程序和串行API。 –