【问题标题】:Reading/writing in Linux kernel spaceLinux内核空间的读/写
【发布时间】:2016-03-02 12:30:24
【问题描述】:

我想在 Linux 内核中添加函数来写入和读取数据。但我不知道如何/在哪里存储它,以便其他程序可以读取/覆盖/删除它。

程序 A 调用 uf_obj_add(param, param, param) 它将信息存储在内存中。
程序 B 也是如此。
程序C调用uf_obj_get(param)内核检查是否允许操作,如果允许则返回数据。

我只需要malloc()内存还是更难?
以及uf_obj_get() 如何访问uf_obj_add() 写入的内存?
在哪里存储内存位置信息,以便两个函数可以访问相同的数据?

【问题讨论】:

  • 看看HEREHERE
  • 您不能为此使用一些现有的文件系统(可能是tmpfs,或者在/proc/ 中添加新条目...)?我相信您不应该为此类事情修补内核
  • @BasileStarynkevitch 我想试试这种方式...
  • 您当然不会在内核领域使用malloc(但有一些kalloc 的味道),因为您不会在内核代码中使用C 标准库(它在概念上是独立的)跨度>
  • 我强烈建议在尝试编写内核代码之前非常熟悉Advanced Linux Programming -in user land-;顺便说一句,您将如何使用新添加的内核函数(在某些驱动程序中,然后是哪个?在某些新的系统调用中?...)?

标签: c linux-kernel read-write


【解决方案1】:

正如评论员对您的问题所指出的那样,在用户空间中实现这一点可能会更安全。但是,如果您坚持通过修改内核代码来实现这一点,您可以采取的一种方法是实现一个新的设备驱动程序,它具有您可以根据需要实现的读取和写入等功能,以便让您的进程访问一些内存空间。然后,正如您所描述的,您的进程可以通过读取和写入同一空间或多或少地工作,就像它们正在读取/写入常规文件一样。

不过,我建议在深入研究内核代码之前阅读大量材料。设备驱动程序的一个很好的资源是Linux Device Drivers。尽管其中很大一部分信息可能不是最新的,但您可能会发现here 是本书中使用的移植到 linux 3.x 的源代码版本。您可以在scull 目录下找到您要查找的内容。

再次,正如评论员对您的问题所指出的那样,我认为您不应该直接跳入更新内核空间的执行。但是,出于教育目的,scull 可以作为一个很好的起点来阅读内核代码并了解如何实现与您描述的结果相似的结果。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-07-05
    • 2011-05-22
    • 2011-07-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多