簡體   English   中英

在Linux設備驅動程序中使用do_mmap()

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM