close

使用的平台: ARM

kernel版本: 2.6.21

曾經寫過一隻kernel driver,會在程式裡面用kmalloc()配置一塊Buffer,
然後透過mmap()將之分享給user-space。


這樣的好處是可以直接讀寫那塊buffer,也適合大資料量的傳輸,
不會像copy_from_user()等有額外的overhead。


但是問題來了,實際寫完測試之後發覺有時候kernel space跟
user space看到的同一個指標裡面資料會長得不一樣,
後來上網研究了一下發覺是原來快取一致性的問題。


最後的解法是在driver裡的select/poll function裡,要允許user-space
過來讀資料的時候使用下列的函式清空D-cache的資料。

#include <asm/cacheflush.h>

flush_cache_all();

P.S 在X86平台裡並不需要擔心這個問題。
arrow
arrow

    askacis 發表在 痞客邦 留言(0) 人氣()