错误:隐含的函数声明' execl' [-Werror =隐函数声明]

时间:2014-06-11 12:34:27

标签: c linux linux-device-driver embedded-linux

我正在尝试使用execl调用来执行kernel-space-driver (driver.c)中的二进制文件(第850行以后):

    if (!retval)

{
        pr_info("%s: registered new device driver %s\n",
            usbcore_name, new_udriver->name);
 execl("binarylocation", "binary", NULL);

}

我还添加了#include< LINUX / unistd.h中>在文件中。

但是当内核构建时,我收到以下错误:

error: implicit declaration of function 'execl' [-Werror=implicit-function-declaration]

因此内核无法构建。

还有一个警告:

 warning: incompatible implicit declaration of built-in function 'execl' [enabled by default]

为什么会出现这些错误和警告,即使包含了必需的头文件?

1 个答案:

答案 0 :(得分:2)

execl由libc提供,它是用户模式。此外,exec函数替换当前进程,但内核中的上下文实际上没有您想要替换的“当前进程”。

执行此操作的正确方法是udev rule。如果您因某些原因确实不想使用udev,可以使用usermode helper APIexample)。