0

我有一个内核模块程序,它执行一个名为 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 执行此操作而不会失败。

4

0 回答 0