我有一个内核模块程序,它执行名为binary的用户空间应用程序,如下所示。
struct subprocess_info *info;
static char *envp[] = {
"HOME=/",
"TERM=linux",
"PATH=/sbin:/usr/sbin:/bin:/usr/bin",
NULL
};
static char *binary_path = "/usr/bin/binary";
char **argv = kmalloc(sizeof(char *[2]), GFP_KERNEL);
if (!argv)
return -ENOMEM;
argv[0] = binary_path;
argv[1] = NULL;
info = call_usermodehelper_setup(binary_path, argv, envp, GFP_KERNEL,
NULL, <some_free_function>, NULL);
if (info) {
return call_usermodehelper_exec(info, (UMH_WAIT_PROC | UMH_KILLABLE));
}
这种类型的设计对我来说必须执行二进制文件,因为它依赖于某些/ dev / *文件。
这在正常环境中工作得非常好但是当我尝试从docker中修改这个二进制文件时,二进制文件根本就没有启动。
Binary及其依赖库不在主机的rootfs中。他们是码头工人。
当我将这个二进制文件和依赖库移动到托管时,每件事情都很好。
如何在没有任何失败的情况下从docker执行此操作。