5

是否可以在内核模块中执行 shell 命令。我知道我们可以使用system子程序在用户空间 C 代码中做到这一点。
我正在调试一个有内存泄漏问题的内核模块。在无限循环中执行 insmod 和 rmmod module.ko 后,系统会在几分钟内用 8G RAM 耗尽内存。
在调用负责释放内存的 API 之前和之后使用命令了解内存状态会很有帮助,free这样我就可以知道 API 是否正常工作。
这就是我调试的方式。如果有任何其他方法,请分享。

4

3 回答 3

9

你可以使用call_usermodehelper函数。请参阅如何在LXR#1LXR#2上使用它的示例。

升级版:

argv[0] = "/bin/bash";
argv[1] = "-c";
argv[2] = "/usr/bin/free";
argv[3] = NULL;

envp[0] = "HOME=/";
envp[1] = "TERM=linux";
envp[2] = "PATH=/sbin:/usr/sbin:/bin:/usr/bin";
envp[3] = NULL;

call_usermodehelper(argv[0], argv, envp, UMH_WAIT_EXEC);
于 2012-06-26T20:48:57.543 回答
6

您不能内核模块中运行 shell 命令。内核模块中的代码可以使命令运行,但它会在普通用户进程中运行。

free对内核内存泄漏几乎没有帮助。
最好将所有分配和释放包装在内核代码中,并维护分配内存的计数器。

于 2012-06-25T18:02:57.153 回答
1

无法从内核内部运行 shell 命令。您可以改为通过调用合适的 procfs API 来读取 /proc/meminfo 文件来读取 /proc/meminfo 文件。该虚拟文件具有有关系统内存的有用内存统计信息。

于 2012-06-26T22:58:12.897 回答