我知道我们可以使用call_usermodehelper函数从内核模块调用用户空间。
原型 call_usermodehelper(const char * path,char ** argv,char ** envp,int wait)
哪里
const char * path是用户模式可执行文件的路径
char ** argv是进程的arg向量
用于处理的char ** envp环境
int等待是某种枚举
当我尝试以这种方式运行python脚本时
#include <linux/module.h>
#include <linux/kernel.h>
#include <linux/fs.h>
#include <linux/uaccess.h>
#include <linux/kmod.h>
MODULE_LICENSE("GPL");
static int __init mpc_init(void) {
char *argv[]= {"/bin/bash","-c","/dir1/dir2/file.py",NULL};
static char *envp[]={
"SHELL=/bin/bash",
"HOME=/home/pi",
"TERM=xterm",
"PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/ local/games:/usr/games",NULL};
printk(KERN_INFO "yes");
return call_usermodehelper(argv[0],argv,envp,UMH_WAIT_EXEC);
}
static void __exit mpc_exit(void) {
printk(KERN_INFO "no");
}
module_init(mpc_init);
module_exit(mpc_exit);
我看到可以创建一个进程,但是它很快就会被杀死。
也许我的模块需要分配内存?