device mem記憶體對映

2021-12-29 22:06:39 字數 1833 閱讀 2096

dev/mem: 物理記憶體的全映象。可以用來訪問物理記憶體。

/dev/kmem: kernel看到的虛擬記憶體的全映象。可以用來訪問kernel的內容。

/dev/mem 用來訪問物理io裝置?比如x用來訪問顯示卡的物理記憶體?或嵌入式中訪問gpio。用

法一般就是open?然後mmap?接著可以使用map之後的位址來訪問物理記憶體。這其實就是實現

使用者空間驅動的一種方法。

/dev/kmem 一般可以用來檢視kernel的變數?或者用作rootkit之類的。 通過/dev/mem裝置檔案和mmap系統呼叫?可以將線性位址描述的物理記憶體對映到程序 

的位址空間?然後就可以直接訪問這段記憶體了。  比如?標準vga 16色模式的實模式位址是a000:0000?而線性位址則是a0000。設定顯 

存大小為0x10000?則可以如下操作      mem_fd  = open( "/dev/mem", o_rdwr ); 

vga_mem = mmap( 0, 0x10000, prot_read | prot_write, map_shared, mem_fd, 0xa0000 ); 

close( mem_fd );  然後直接對vga_mem進行訪問?就可以了。當然?如果是操作vga顯示卡?還要獲得i/o 

埠的訪問許可權?以便進行直接的i/o操作?用來設定模式/調色盤/選擇位面等等  在工控領域中還有一種常用的方法?用來在核心和應用程式之間高效傳遞資料:  1) 假定系統有64m物理記憶體?則可以通過lilo通知核心只使用63m?而保留1m物理內    存作為資料交換使用(使用 mem=63m 標記)。 

2) 然後開啟/dev/mem裝置?並將63m開始的1m位址空間對映到程序的位址空間。 使用/dev/kmem檢視kernel變數 從lwn.net學到的

例項**如下?

#include

#include

#include

#include

#include

#include

#include #include

#include

#include

#include int page_size;

#define page_size page_size

#define page_mask (~(page_size-1)) void get_var (unsigned long addr)          map = mmap(null,page_size,prot_read,map_shared,kfd,offset);         if (map == map_failed) int main(int argc, char **ar**)          if ((fp = fopen(ar**[1],"r")) == null)          do while(r > 0);

if (r < 0) 執行? # ./tmap /boot/system.map

found modprobe_path at (0xc03aa900) c03aa900 /sbin/modprobe

區別?1. /dev/mem: 物理記憶體的全映象。可以用來訪問物理記憶體。 

2. /dev/kmem: kernel看到的虛擬記憶體的全映象。可以用來訪問kernel的

內容。作用?

1. 前者用來訪問物理io裝置?比如x用來訪問顯示卡的物理記憶體?或嵌入式

中訪問gpio。用法一般就是open?然後mmap?接著可以使用map之後的

位址來訪問物理記憶體。這其實就是實現使用者空間驅動的一種方法。 

2. 後者一般可以用來檢視kernel的變數?或者用作rootkit之類的。參考

1和2描述了用來檢視kernel變數這個問題。

Linux記憶體對映

使用記憶體對映處理大檔案很方便,在windows系統中,實現了這樣的藉口。在linux中我們也可以通過mmap函式來實現。以下內容完全參考自 如有冒犯,請諒解 mmap函式實現把乙個檔案對映到乙個記憶體區域,從而我們可以像讀寫記憶體一樣讀寫檔案,他比單純呼叫read write也要快上許多。在某些時...

記憶體對映檔案

記憶體對映檔案是利用虛擬記憶體把檔案對映到程序的位址空間中去,在此之後程序操作文 件,就像操作程序空間裡的位址一樣了,比如使用 memcpy 等記憶體操作的函式。這種方法能 夠很好的應用在需要頻繁處理乙個檔案或者是乙個大檔案的場合,這種方式處理 io效率比 普通 io效率要高。另外,unix 把它做...

記憶體對映檔案

記憶體對映檔案有三種,第一種是可執行檔案的對映,第二種是資料檔案的對映,第三種是借助頁面交換檔案的記憶體對映.應用程式本身可以使用後兩種記憶體對映.1.可執行檔案對映 windows在執行乙個win32應用程式時使用的是記憶體對映檔案技術.系統先在程序位址空間的0x00400000以上保留乙個足夠大...