2016-02-29 76 views
2

我在我的驅動程序中使用devm_kzalloc(.., .., GFP_KERNEL)分配緩衝區,然後我將此緩衝區註冊爲幀緩衝區驅動程序,以便它顯示爲/dev/fb0下的文件。然後我可以打開這個文件並寫入它。當我這樣做時,一切正常,我的數據到達驅動程序內存緩衝區。內核驅動程序和用戶空間的mmap

但是,如果我然後mmap它在用戶進程中是這樣的:mmap(NULL, size, PROT_WRITE, MAP_SHARED, fd, 0),使用相同的文件fd並嘗試寫入返回的內存空間,沒有任何寫入驅動程序內存。

我在這裏忘了什麼嗎?

+1

http://man7.org/linux/man-pages/man2/mmap.2.html - 仔細閱讀MAP_SHARED段落,那裏可能有線索。 – Mat

回答

2

Got it!我所做的一切都是錯誤的。我必須設置vm系統才能正確處理mmap,並且必須使用fb_deferred_io(我甚至沒有啓用一些不相關的驅動程序選擇它)之前完成。然後,我必須使用__get_free_pages而不是devm_kzmalloc(),最後一個細節是在爲fbdev子系統分配屏幕緩衝區指針時使用__pa(vmem)。然後它開始工作:-)

相關問題