在linux開發中著實用到的除錯工具並不是很多。devmem的方式是提供給驅動開發人員,在應用層能夠偵測記憶體位址中的資料變化,以此來檢測驅動中對記憶體或者相關配置的正確性驗證。
devmem2使用方法:
devmem2 [ type [ data ] ]
address : 實體地址
type :要訪問的資料型別 : [b]yte, [h]alfword, [w]ord
data :想要寫入的資料,若為讀取操作則省略此引數,若為寫入,則必須含有此引數。
如下就貼出devmem2的源**一**竟。
01.
#include
02.#include
03.#include
04.#include
05.#include
06.#include
07.#include
08.#include
09.#include
10.#include
11.#include
12.13.
#define fatal do while(0)
15.16.
#define map_size 4096ul
17.#define map_mask (map_size - 1)
18.19.
int main(int argc, char **argv) [ type [ data ] ]\n"
28."\taddress : memory address to act upon\n"
29."\ttype : access operation type : [b]yte, [h]alfword, [w]ord\n"
30."\tdata : data to be written\n\n",
31. argv[0]);
32.exit(1);
33. }
34. target = strtoul(argv[1], 0, 0);
35.36.
if(argc > 2)
37. access_type = tolower(argv[2][0]);
38.39.
40.if((fd = open("/dev/mem", o_rdwr | o_sync)) == -1) fatal;
41.printf("/dev/mem opened.\n");
42. fflush(stdout);
43.44.
/* map one page */
//將核心空間對映到使用者空間
45. map_base = mmap(0, map_size, prot_read | prot_write, map_shared, fd, target & ~map_mask);
46.if(map_base == (void *) -1) fatal;
47.48. fflush(stdout);
49.50. virt_addr = map_base + (target & map_mask);
51.//針對不同的引數獲取不同型別記憶體資料
52.switch(access_type)
66.printf("value at address 0x%x (%p): 0x%x\n", target, virt_addr, read_result);
67. fflush(stdout);
68.//若引數大於3個,則說明為寫入操作,針對不同引數寫入不同型別的資料
69.if(argc > 3)
85.printf("written 0x%x; readback 0x%x\n", writeval, read_result);
86. fflush(stdout);
87. }
88.89.
if(munmap(map_base, map_size) == -1) fatal;
90. close(fd);
91.return
0;
92.}
核心驅動載入除錯 1
背景知識 1 驅動相關 驅動在硬體上 作業系統提供給應用程式介面以下.windows2000 xp 上的裝置驅動程式不直接操作硬體,而是呼叫 hal功能作為與硬體的介面。windows2000 xp 上有如下幾種型別的裝置驅動程式 1。硬體裝置驅動程式操作硬體,它將輸出寫入物理裝置或網路,並從物理裝...
核心驅動載入除錯 2
在上一節說明了如何編寫簡單的核心驅動程式後,本節說明,建立核心驅動程式的整合開發環境.簡單說來,一共9個步驟.1.安裝winddk以及安裝ddkwizard.相關版本 ddkwizard setup v1.2.0a,ddkbuild bat.zip,ddkbuild cmd.zip 2.拷貝下面的檔...
Windbg除錯核心驅動方法
一般說來,調速驅動程式分為兩種 1.存在pdb檔案的除錯 這裡的pdb檔案其實就是除錯符號檔案,假如我們除錯的這樣的檔案,我們可以再windbg中使用 bp 驅動名 driverentry,這個時候當載入驅動的時候,程式就會斷在入口了。2.沒有pdb檔案的除錯 在除錯別人的驅動程式時,也就是自己只有...