cache一致性的問題

最近在調試TI的DM36x驅動,因爲我們得通過FPGA往記錄盤裏寫數據,因爲數據量比較大,如果每一幀數據都通過write的方式進行,驅動會調用到

copy_from_user函數,這樣對CPU性能以及帶寬都是一個非常大的挑戰!

後來改成內存映射的方式,mmap,看起來很簡單的一個操作卻折騰了好一陣子!


操作是這樣的,首先,內核通過kmalloc操作得到一塊連續的內存,然後通過vma—mmap操作把這塊內心映射給用戶層使用,

用戶層通過一定的方式往這塊內存寫數據,大部分情況下,內核得到的數據是正確的,但是極少數情況,內核的數據和用戶層數據不一致!

後來經過debug,得到是因爲cache的原因,用戶層數據和內核數據不一致!


其實,在內核裏面我是做了pgprot_noncached操作的!


最後上網找到一篇博客:

http://blog.csdn.net/dianhuiren/article/details/6896129


寫得很詳細,得調用

ioremap_nocache,內核讀數據就直接爲內存中的數據,而不是cache中的數據,這樣數據就一致了

發佈了107 篇原創文章 · 獲贊 35 · 訪問量 17萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章