我正在尝试使用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]
为什么会出现这些错误和警告,即使包含了必需的头文件?
答案 0 :(得分:2)
execl
由libc提供,它是用户模式。此外,exec
函数替换当前进程,但内核中的上下文实际上没有您想要替换的“当前进程”。
执行此操作的正确方法是udev rule。如果您因某些原因确实不想使用udev,可以使用usermode helper API(example)。