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

标签 c linux linux-kernel linux-device-driver

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

const char __user *buf

但我需要调用它,这样我才能分配用户空间缓冲区并使用该函数参数传递它。

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

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

最佳答案

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

这是一个 article这解释了一些关于系统调用机制的内容。有一节解释了如何从内核空间调用系统调用,使用内核内存并避免验证。

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

关于c - 如何在内核驱动程序中分配用户空间缓冲区?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16330592/

相关文章:

linux - 内联汇编以在 ARM 中执行带返回值的系统调用

performance - 系统范围的分析器(例如 perf)如何将计数器与指令相关联?

c++ - 版本之间定义的实现

c - 我的 C 文件正在写入随机字符

linux - 什么脚本/用户/进程正在写入文件?

c++ - Linux编程中的多目录 "make"

linux - 适用于嵌入式 Linux 板的轻量级数据库

linux - 什么是指针的唯一标识 (UID) 编号?

c++ - 跨平台内存分配器 sbrk/virtualalloc

谁能用C语言解释一下这段小代码?