raj*_*gt1 5 c linux driver linux-kernel
是否可以在内核模块中执行shell命令.我知道我们可以使用system子程序在用户空间C代码中完成它.
我正在调试内核模块,它有内存泄漏问题.在无限循环中执行insmod和rmmod module.ko后,系统会在几分钟内使用8G RAM耗尽内存.在调用负责释放内存的API之前和之后
使用free命令知道内存状态会很有帮助,这样我就可以知道API是否正常工作.
这是我调试的方式.如果有其他方法,请分享.
你可以使用call_usermodehelper功能.请参阅LXR#1或LXR#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);
Run Code Online (Sandbox Code Playgroud)
您无法在内核模块中运行shell命令.内核模块中的代码可以导致命令运行,但它将在正常的用户进程中运行.
free对内核内存泄漏没什么帮助.
将所有分配和释放包装在内核代码中并维护已分配内存的计数器会好得多.