Linux kernel 加Memory leaker 檢查

http://blog.sina.com.cn/s/blog_53689eaf0100o8be.html 

 

1. 重新編譯內核,選中

kernel hacking->kernel debugging
kernel hacking->memory leak debugging
kernel hacking->kernel memory leak detector
kernel hacking->Compile kernel with debug info

燒錄這個內核到機頂盒中。

2.在文件系統中,etc/fstab文件中,增加
debug           /sys/kernel/debug debugfs defaults                      0 0

當然,首先要保證有/sys/kernel/debug目錄。

3.使用時,cat /sys/kernel/debug/memleak,需要執行2次,以確保獲得結果正確。
執行結果看起來應該是這樣的:
unreferenced object 0x87c938e0 (size 64):
  [<80a30dce>] physmap_flash_probe
  [<80867260>] obj_size
  [<80a30dce>] physmap_flash_probe
  [<809ffff4>] platform_drv_probe
  [<809fe072>] driver_probe_device
  [<809fe456>] __driver_attach
  [<809fd020>] next_device
  [<809fd1a0>] bus_for_each_dev

然後,我們記住地址,比如809fd1a0,到vmlinux所在目錄執行:
sh4-linux-addr2line -e vmlinux 80a30dce
結果如下:
/opt/STM/STLinux-2.3/devkit/sources/kernel/linux-sh4-2.6.23.17_stm23_A22/drivers/mtd/chips/cfi_cmdset_0020.c:1030

這樣我們就找到了可疑的內存泄漏代碼行,至於誰調用的它,你說呢?

 

 

http://www.ibm.com/developerworks/cn/linux/l-cn-kmemcheck/

 

Linux 內核內存檢測工具 - Kmemcheck

本文是 Linux 內核內存檢測工具系列中的一篇,主要分析了 Kmemcheck 的原理,配置以及它的典型應用。讀者在閱讀完本文之後,能輕鬆地學會怎樣利用 Kmemcheck 來對內核程序進行檢測,同時也能從 Kmemcheck 的設計原理中得到一些啓發。

前言

訪問非法的內存地址(如訪問未初始化的內存,訪問已經釋放的內存)是一件很危險的事情,如果在內核程序中使用了非法內存中的內容,可能會導致系統崩潰,如何發現並消滅這些潛在的風險,是在編寫程序時都必須考慮的問題。在 Linux 系統中,gcc 會在編譯的時候對內存未初始化的情況發出警告,但是它只能做一些靜態的檢查;另外如果系統安裝了 Valgrind,也可以利用其提供的 memcheck 來動態地對內存進行檢查,但是它只能檢查出一些用戶態程序的問題,對工作在內核態的程序無能爲力。因此,從事內核開發(如設備驅動程序)工作的時候,我們迫切需要一個能爲內核程序提供動態內存檢查的工具,所幸的是,在 Linux 2.6.31 的內核版本中,它提供了一個這樣的內存檢測功能 - Kmemcheck, 目前該功能只支持 x86 平臺。

 


 

發佈了63 篇原創文章 · 獲贊 4 · 訪問量 20萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章