[英]Use do_mmap() in Linux device driver
我們現在使用的設備需要有一個用戶空間虛擬內存地址,我們嘗試使用do_mmap(),如下所示:
*uvaddr = (void *)do_mmap(0, 0, size, PROT_READ|PROT_WRITE, MAP_ANONYMOUS, 0);
但我們得到了以下錯誤
Unable to handle kernel paging request for data at ad8
可以在設備驅動程序中使用“do_mmap()”嗎? 如果沒有,任何正確的方法嗎?
do_mmap
可能成功,但uvaddr
沒有指向存儲結果的有效位置。 要確定這一點,請執行以下操作:
void *mmap_result;
printk(KERN_DEBUG "uvaddr = %p", uvaddr);
mmap_result = (void *)do_mmap(0, 0, size, PROT_READ|PROT_WRITE, MAP_ANONYMOUS, 0);
printk(KERN_DEBUG "mmap_result = %p", mmap_result);
*uvaddr = mmap_result;
這應該告訴您確定哪個失敗:調用do_mmap
或賦值給*uvaddr
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.