【发布时间】:2012-10-17 21:45:08
【问题描述】:
我正在调试我的内核模块,它似乎有内存损坏, 基本上是 alloc_netdev() 为“net_device”分配的一块内存 实例已损坏。
1) 我在内核的.config 中打开了CONFIG_DEBUG_KERNEL、CONFIG_DEBUG_SLAB、CONFIG_DEBUG_KMEMLEAK,但不确定kmemleak 会发生什么。每当我阅读/sys/kernel/debug/kmemleak 时,它是否应该打印出可疑内存泄漏的跟踪转储?有没有办法重置kmemleak积累的统计/信息?最重要的 - 任何人都可以帮助破译输出,例如:
unreferenced object 0xc625e000 (size 2048):
comm "swapper", pid 1, jiffies 4294937521
backtrace:
[<c00c89f0>] create_object+0x11c/0x200
[<c00c6764>] __kmalloc_track_caller+0x138/0x178
[<c01d78c0>] __alloc_skb+0x4c/0x100
[<c01d8490>] dev_alloc_skb+0x18/0x3c
[<c0198b48>] eth_rx_fill+0xd8/0x3fc
[<c019ac74>] mv_eth_start_internals+0x30/0xf8
[<c019c5fc>] mv_eth_start+0x70/0x244
[<c019c810>] mv_eth_open+0x40/0x64
[<c01e00f0>] dev_open+0xb4/0x118
[<c01df788>] dev_change_flags+0x90/0x168
[<c001a3e4>] ip_auto_config+0x1bc/0xecc
[<c00212f4>] do_one_initcall+0x5c/0x1bc
[<c00083d0>] kernel_init+0x8c/0x108
[<c0022f58>] kernel_thread_exit+0x0/0x8
[<ffffffff>] 0xffffffff
2) 我还想知道是否可以在此内存上应用一些“只读”属性,这样我希望在有人尝试修改内存时生成Oops。听起来合理吗?
感谢任何建议,谢谢。
标记
【问题讨论】:
-
很好的问答:一般问题是:如何调试内核内存泄漏/内存损坏?
-
内核中有一个选项可以让它吐出正确的堆栈跟踪(即行信息)。这通常会更容易。
标签: memory-management linux-kernel arm linux-device-driver