我有一个内核模块程序,它执行一个名为 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 安装这个二进制文件时,二进制文件根本没有启动。
二进制及其依赖库不在主机的 rootfs 中。他们在码头工人的。
当我将这个二进制库和依赖库移到主机上时,一切都很好。
如何从 docker 执行此操作而不会失败。