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