2011-11-23 31 views
3

我需要通過/ dev/mem遍歷用戶空間中mem_map中包含的所有物理頁面。 mmap不能使用。唯一的希望是使用打開/讀取呼叫。我知道內核中mem_map的物理地址。這是在用戶空間代碼:Linux內核:如何使用/ dev/mem從用戶空間遍歷mem_map中的物理頁面?

/* open /dev/mem file*/ 
if((fd = open("/dev/mem", O_RDONLY)) == -1) { 
    printf("/dev/mem could not be opened.\n"); 
perror("open"); 
    exit(1); 
    } else { 
    printf("/dev/mem opened.\n"); 

/* seek to the mem_map at mem_map_phy_addr */ 
if(lseek(fd, mem_map_phy_addr, SEEK_SET) == -1) { 
    perror("lseek"); 
} 
else { 
    printf("lseek ok\n"); 
} 

現在的問題是如何開始遍歷mem_map中?什麼用戶地包含文件有'結構頁'?

謝謝。

+0

用戶級包含文件沒有'struct page'。你必須使用內核頭文件。 –

+0

你能更具體嗎?我如何使用內核頭文件?複製頭文件與我的用戶程序編譯? – user899159

+0

是的,就是這樣。 –

回答

0

首先,您需要獲得'mem_map'的偏移量,它是該符號的物理地址。由於'mem_map'被導出,所以你可以寫一個小的內核模塊來獲取這個地址。然後,你可以lseek()到那個偏移量(這是你得到的地址),你可以從那裏開始讀'mem_map'。

相關問題