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 平臺。