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