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平台裡並不需要擔心這個問題。 文章標籤
全站熱搜
留言列表