2014-02-19 41 views

回答

3

限定VM_IOREMAP 00000001/*的ioremap()和朋友*/

VM_IOREMAP意味着該虛擬存儲器區域是通過的ioremap()創建的,*後容易*(但*不限於*)來將硬件設備(如PCI設備)的I/O存儲器區域(以其物理地址爲特徵)映射到內核虛擬地址範圍,因此我們可以通過簡單的讀/寫訪問I/O存儲器。

沒有詳細介紹驅動程序,但是在你提到的Android binder驅動程序中,似乎驅動程序正在使用它來實現mmap()系統調用,即共享一組RAM頁面(不是設備I/O內存區域)在驅動程序和用戶空間代碼之間。因此,在驅動程序字符設備文件的用戶空間代碼mmap()之後,它可以直接從用戶級直接訪問這些RAM頁面,而無需執行內核用戶級別的轉換。這種編碼技巧的常見用法(就我記得的其他驅動程序而言),驅動程序將數據內容生成到內核級別的RAM頁面中,用戶級別代碼直接從用戶級別讀取這些RAM頁面的數據內容。