【问题标题】:Linux Kernel - Read/Write to a FileLinux 内核 - 读取/写入文件
【发布时间】:2018-10-02 20:51:41
【问题描述】:

我正在开发一个需要检索特定信息集并将其写入文件的 LKM。我查找了这样做的常用方法,但找不到适用于 Linux 4.x 的方法。我还发现可以从内存中检索系统调用并有效地调用它们。

目前我发现没有更好的方法,如果可以找到系统调用表并调用 openread/write关闭这样。

【问题讨论】:

  • 不要从内核空间读取文件。不要这样做。你不要这样做!
  • 这对我来说只是一个练习。我也可以通过编写一个用户空间客户端轻松地做到这一点,但它对我来说没有玩内核的魅力。

标签: c linux linux-kernel


【解决方案1】:

在大多数情况下强烈建议不要这样做。

https://www.linuxjournal.com/article/8110 对我来说是一本非常好的读物,我第一次认为我也必须这样做。

然而,在 Linux 内核中,从文件中读取配置信息的数据被认为是被禁止的。这是由于如果开发人员尝试这样做可能会导致大量不同的问题。

确实,这可以使用内核中的系统调用来实现,但通常也不鼓励从内核中调用系统调用的做法。它们被设计为用户空间应用程序向内核询问事情的接口,而不是让内核让自己工作的接口。

您想从内核中操作什么样的文件?如果您要操作的文件类型是由 proc 文件系统或 sysfs 文件系统或 dev 文件系统提供的,您可以在内核中修改文件的内容(因为内核将这些内容提供给用户空间本身)-这不应该通过文件操作调用来完成。如果它是一个普通的用户空间文件,你几乎不希望内核能够修改它。

如果你提供更多细节,我很想听听,但这通常是个坏主意。

【讨论】:

  • 我确实在尝试访问 dev/sda。我编写了一个读取 GPT 表的工具,该工具适用于用户空间。由于 openread/writeclose 丢失,我无法在内核空间中重新实现它
  • 我不是管理 GPT 表的代码方面的专家,但我认为它在 block/partitions/efi.* 中。也许这会暴露一些可以帮助您的功能。看起来没有大量的文档可以通过内核存储库进行跟踪。如果您指定您正在尝试阅读问题文本或标题中的 GPT 表,那么熟悉这部分内核的人可能会更加了解它。
  • 问题是我需要直接访问存储,因为我需要检查 GPT 的某些值,这些值可能不会以官方方式访问它。
猜你喜欢
  • 2011-05-22
  • 1970-01-01
  • 2021-11-20
  • 2013-01-10
  • 2015-11-04
  • 1970-01-01
相关资源
最近更新 更多