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



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

const char __user *buf

但是我需要调用它,所以我如何分配用户空间缓冲区并通过函数参数传递它。

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

我的目标是从内核驱动程序调用内核例程谁接受参数const char __user *buf

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

这里有一篇文章对系统调用机制做了一些解释。有一节解释了如何从内核空间调用系统调用,使用内核内存并避免验证。

  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 */

我知道,通常的方法是将内核例程分成两部分——处理系统调用机制的外部例程,处理copyin()/coyout()等,然后调用内部例程,完成实际的工作。

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

关于你的具体问题,我不知道是否有这样的API,但我很怀疑。

相关内容

  • 没有找到相关文章

最新更新