【问题标题】:Using user-space functions like sprintf in the kernel, or not?在内核中使用像 sprintf 这样的用户空间函数,或者不使用?
【发布时间】:2014-08-03 17:54:04
【问题描述】:

我正在为我的驱动程序创建一个 /proc 条目。因此,在读取回调函数中,第一个参数是我们将要为用户写入的数据的位置。我搜索了如何在其中写入数据,我可以看到每个人都为此目的使用 sprintf。我很惊讶地看到它在内核空间中工作。但是,在内核空间中使用用户空间函数应该是错误的。我也无法弄清楚如何在不使用任何用户空间函数(如 strcpy、sprintf 等)的情况下在该位置写入。我使用的是内核版本 3.9.10。请建议我如何在不使用 sprintf 或任何其他用户空间功能的情况下做到这一点。

【问题讨论】:

  • 如果您想要更快的响应,最好添加一些您想要实现的示例代码。
  • 您正在寻找的是 proc_create()。请阅读内核文档树中的相关部分,例如seq_file,并尝试编写一些代码。 Stack Overflow 不是免费的编程服务,因此生成一些代码然后询问有关您已经生成的代码的具体问题被认为是一种良好的行为。

标签: linux linux-kernel linux-device-driver


【解决方案1】:

大多数“普通”用户空间函数在内核代码中没有意义,因此它们在内核中不可用。

不过,sprintfstrcpymemcpy 等一些函数在内核代码中非常有用,因此内核会(或多或少完全地)实现它们并使它们可用于驱动程序. 请参阅include/linux/kernel.hstring.h

【讨论】:

    【解决方案2】:

    sprintf 是 Linux 中的内核空间函数。它与其同名的用户空间完全分开,并且可能与它的工作方式相同,也可能不同。

    仅仅因为用户空间中的函数存在,并不意味着内核空间中的同名函数不存在。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-07-11
      • 1970-01-01
      • 1970-01-01
      • 2017-12-10
      • 2015-03-11
      相关资源
      最近更新 更多