使用者和kernel空間使用mmap共享記憶體

2021-04-24 07:26:32 字數 838 閱讀 4481

原來的程式:

/* 檔案操作 */

static struct file_operations ***_fops = ;

static int _***x_mmap(struct file * file, struct vm_area_struct * vma)

ldd3中講到,對於常規記憶體,不能用remap_pfn_range,這個限制用來保證系統穩定性。

remap_pfn_range時候做外部io/mem空間對映。

所以上面的例子當然執行錯誤,改為nopage方式,如下(執行正常):

/* 檔案操作 */

static struct file_operations ***_fops = ;

static int _***x_mmap(struct file * file, struct vm_area_struct * vma)

struct page *scullv_vma_nopage(struct vm_area_struct *vma,

unsigned long address, int *type)

return page; }

測試程式:

#include

#include

#include

#include

#include

#include

#include

int main(int argc, char *argv)

// success, r/w here

while(1)

close(fd);

return 0;

}

使用者空間使用i2c dev

對於註冊的i2c介面卡,使用者空間也可以使用它們。在linux核心 檔案 include linux i2c dev.c中針對每個介面卡生成乙個主裝置號為89的裝置節點,實現了檔案操作介面,使用者空間可以通過i2c裝置節點訪問i2c介面卡。介面卡的編號從0開始,和介面卡的裝置節點的次裝置號相同。為了...

在FreeBSD 使用者空間與核心空間使用記憶體共享

kernel建立一裝置分配記憶體,並將記憶體位址通過d mmap 對映,userland使用mmap 參考 sys dev mem memdev.c.freebsd 7.1 kernel include include include include include include include ...

mysql儲存空間使用觀察

最近做了一次mysql資料匯入,需要匯入的sql檔案大小13gb左右 是通過mysqldump得到 現在需要將此匯入乙個全新的資料庫,在xp下新安裝的mysql 5.1的服務上新建乙個資料庫,匯入前mysql資料庫檔案占用儲存空間可以忽略不計,匯入完13gb資料後觀察mysql,占用儲存空間17gb...