mmap系統調用是的可以在用戶空間直接訪問設備內存,它是通過映射來完成的,但是要強調的是:
1.mmap系統調用是對文件進行操作的,那麼文件自然有其對應的file_operation結構,而其中有一個 int (*mmap)(struct file *,struct vm_area_struct *),所以系統調用實際最後調用的這個函數,但是之前內核會做點什麼,不然struct vm_area_struct * 參數哪來的。驅動mmap只需要做2件事:建立頁表和添加vma->vm_ops函數。vma是用來描述一段虛擬內存空間的結構體,其中封裝了一些操作函數模擬對象的類。
2.如果想對內存直接操作,其原理應該一樣,不過是對/dev/mem設備文件操作罷了,而且它的file_operation是現成的。