在内核模块中执行shell命令

时间:2012-06-25 16:50:41

标签: c linux linux-kernel driver

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

3 个答案:

答案 0 :(得分:6)

您无法在内核模块中运行shell命令。内核模块中的代码可以导致命令运行,但它将在正常的用户进程中运行。

free对内核内存泄漏没什么帮助 将所有分配和释放包装在内核代码中并维护已分配内存的计数器会好得多。

答案 1 :(得分:6)

您可以使用call_usermodehelper功能。请参阅LXR#1LXR#2

中有关如何使用它的示例

UPD:

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);

答案 2 :(得分:1)

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