remap_pfn_range和io_remap_pfn_range負責為一段實體地址建立新的頁表,他們的原型如下
int remap_pfn_range(struct vm_area_struct *vma, unsigned long virt_addr, unsigned long pfn, unsigned long size, pgprot_t prot);
int io_remap_pfn_range(struct vm_area_struct *vma, unsigned long virt_addr, unsigned long pfn, unsigned long size, pgprot_t prot);
函式的返回值是0或者是個負的錯誤碼。
第乙個函式是在pfn指向實際的ram的時候使用,後面乙個函式實在phy_addr指向i/o記憶體時候使用,在實際使用中,除了sparc外,對每個體系架構這兩個函式都是等價的。大多數情況下使用第乙個函式,對於有移植性的要求的驅動程式,要使用與特定情形相符的remap_pfn_range函式變種。
該函式的功能是建立頁表。其中引數vma是核心根據使用者的請求自己填寫的,而引數addr表示記憶體對映開始處的虛擬位址,因此,該函式為addr~addr+size之間的虛擬位址構造頁表。
另外,pfn(page fram number)是虛擬位址應該對映到的實體地址的頁面號,實際上就是實體地址右移page_shift位。如果page_shift為4kb,則page_shift為12,因為page_shift等於1<
乙個簡單的實現
如果驅動程式要將裝置記憶體線性的對映到使用者空間,基本上自需要呼叫第乙個函式即可。
static int ******_remap_mmap(struct file *file, struct vm_area_struct *vma)
}
使用GraphEdit使用
1 註冊元件。其實乙個filter就是乙個com元件,所以使用之前需要註冊,可以有兩種方法對元件進行註冊。1.直接使用命令。命令列下輸入 regsvr32 hqtlystd.ax 編譯之後你會在工程目錄下的debug中找到hqtlystd.ax,這個就是要用的filter 即可註冊成功。2.vc6....
MySQL使用學習使用 mysql學習使用
1 mysql學習 1 安裝 ubuntu下直接安裝 apt get install mysql server 2 檢查伺服器是否啟動 sudo netstat tap grep mysql,如果啟動成功,出現以下資訊 tcp00localhost.localdomain mysql listen ...
學習使用CSDN markdown使用
建立乙個自定義列表 如何建立乙個註腳 注釋也是必不可少的 katex數學公式 新的甘特圖功能,豐富你的文章 uml 圖表 flowchart流程圖 匯出與匯入 你好!這是你第一次使用markdown編輯器所展示的歡迎頁。如果你想學習如何使用markdown編輯器,可以仔細閱讀這篇文章,了解一下mar...