内核内存泄漏检测器

Kernel memory leak detector

我已经在内核黑客和 rebuilt/reboot 系统中启用了 "Kernel memory leak detector" 选项,目前 kmemleak 文件存在于 /sys/kernel/debug 文件夹中,但似乎我无法触发扫描"echo scan > /sys/kernel/debug/kmemleak",我已将 debugfs 安装到 /sys/kernel/debug,但是当我尝试触发扫描时,它会显示“-bash:回显:写入错误:设备或资源繁忙”。我的猜测是,这是因为即使我是 root 用户,我也没有 /sys 文件夹内的写权限。任何建议如何解决这个问题?非常感谢。

我试过了

使用 kmemleak 时需要检查一些事项。

检查是否传递了任何 bootargs 或命令行参数 kmemleak=off

在您的启动日志中,检查您是否有任何与 kmemleak 相关的日志,尤其是像下面这样的日志

kmemleak: Kernel memory leak detector disabled
kmemleak: Early log buffer exceeded (919), please increase DEBUG_KMEMLEAK_EARLY_LOG_SIZE

很可能,我认为您需要配置 CONFIG_DEBUG_KMEMLEAK_EARLY_LOG_SIZE。如果在启动期间,kmemleak 的日志大小增加超过 linux 内核配置中设置的限制,则 kmemleak 将被禁用。

因此,配置 CONFIG_DEBUG_KMEMLEAK_EARLY_LOG_SIZE 并增加大小。此选项也在 kernel hacking 下。我正在使用内核源代码 4.19.9 并附上屏幕截图以供参考。 Maximum kmemleak early log entries 是字段,您可能需要将其设置为更高的值(例如 4096)。