Linux kernel 加Memory leaker 检查

本文介绍了一种用于检测Linux内核内存泄漏的方法,包括重新编译内核启用调试选项、配置文件系统以及使用/sys/kernel/debug/memleak命令定位泄漏源的具体步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

 


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值