Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/64.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/286.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 如何在内核驱动程序中分配用户空间缓冲区?_C_Linux_Linux Kernel_Linux Device Driver - Fatal编程技术网

C 如何在内核驱动程序中分配用户空间缓冲区?

C 如何在内核驱动程序中分配用户空间缓冲区?,c,linux,linux-kernel,linux-device-driver,C,Linux,Linux Kernel,Linux Device Driver,在一些混乱中,我需要调用一个内核函数,该函数不应该从内核空间调用,因为在参数中,它从分配的用户空间中获取缓冲区 const char __user *buf 但我需要调用它,所以我如何分配用户空间缓冲区,并用函数参数传递它 如果可能的话,我需要在没有任何用户空间交互的情况下完成它。 真的有可能吗 我的目标是从内核驱动程序调用内核例程,内核驱动程序接受参数const char\u user*bufAFAIK,通常的方法是将内核例程一分为二-一个处理系统调用机制的外部例程,处理copyin()/c

在一些混乱中,我需要调用一个内核函数,该函数不应该从内核空间调用,因为在参数中,它从分配的用户空间中获取缓冲区

const char __user *buf
但我需要调用它,所以我如何分配用户空间缓冲区,并用函数参数传递它

如果可能的话,我需要在没有任何用户空间交互的情况下完成它。 真的有可能吗


我的目标是从内核驱动程序调用内核例程,内核驱动程序接受参数
const char\u user*buf
AFAIK,通常的方法是将内核例程一分为二-一个处理系统调用机制的外部例程,处理copyin()/coyout()等,然后调用内部例程,这是实际的工作

当然,如果您需要将代码自包含在一个模块中,并且不控制与之一起使用的内核的其余部分,那么这将不起作用


在回答您的具体问题时,我不知道是否有这样的API,但我对此表示怀疑。

可能还有另一种方法,这取决于您实际尝试调用的系统调用

下面是一个例子,它解释了一点系统调用机制。有一节解释了如何从内核空间调用系统调用,使用内核内存并避免验证

  mm_segment_t fs;

  fs = get_fs();     /* save previous value */
  set_fs (get_ds()); /* use kernel limit */

  /* system calls can be invoked */

  set_fs(fs); /* restore before returning to user space */

你真的需要缓冲区在用户空间中吗,或者你只是想调用一个内核例程,它不向内核内调用者提供接口。我需要调用那个接受args“const char\uu user*buf”的内核例程,如果你需要这样做的话,那你就错了。它是哪个函数?也许有人可以建议一个替代方案。可能是OK的复制品。我仍然希望您更新您的问题,以描述您正在尝试进行的系统调用。根据这些信息,可能有更好的方法来实现您的目标。