【问题标题】:Where to start with Linux Kernel Modules?从哪里开始使用 Linux 内核模块?
【发布时间】:2013-10-30 17:02:33
【问题描述】:

一点背景知识,我是一名 CMPE 学生,目前正在学习操作系统课程。我有一些 C 编码的基本知识,但对 C++ 更熟悉(花了大约 3 个学期的时间)。除此之外,从未接受过任何其他正式的编码培训。另外,我对linux环境有了基本的了解。

我正在开展一个项目,该项目需要我和我的团队编写一个可以执行以下操作的 linux 内核模块:

  • 通过将接收到的数据打印到内核日志来回显从用户级进程传递的数据
  • 能够将数据从一个用户进程传递到另一个用户进程。
  • 必须可以将内核模块用作进程间通信抽象。模块应提供发送者向其发送数据但没有接收者等待的情况。模块必须涵盖接收者请求数据但没有可用数据的情况。
  • 模块必须涵盖接收方请求数据但没有可用数据的情况。
  • 必须是模块中缓冲区容量的限制。

现在我不知道这对于那些有编程背景的人来说有多难,但对于像我这样的人来说,这似乎是一项不可能完成的复杂任务。

这是我到目前为止所做的:

  1. 已成功编码、编译、插入和删除基本的“hello world”linux 内核模块
  2. 通读The Linux Kernel Module Programming Guide的前4或5章
  3. 阅读了一些 stackoverflow 帖子,但似乎没有一个能够将我引导到我需要去的地方。

所以最后这是我的问题:有人可以指出我需要做的方向吗?我什至不知道在哪里可以找到用于读取用户级进程数据的命令,我需要在某个地方开始。 TLPD 非常适合深入了解该主题,但并没有帮助我达到我将有一个可行的项目上交的地步。过去,我会通过阅读源代码和逆向工程来学习,有没有我可以的地方找到类似的东西?感谢您提供任何和所有帮助。

-会

【问题讨论】:

  • 您可能希望在 /dev 或其他地方公开一个或多个虚拟文件,并设计一个文件读取和写入该虚拟文件的 API。
  • 如果不是因为我不知道这意味着什么,这听起来很棒,哈哈。我想我比我让你相信的更业余一点。你有没有机会把它变成 5 岁的孩子说话?

标签: c linux linux-kernel


【解决方案1】:

我发现 Linux Kernel Module Programming Guide 是一个很好的资源。从它的声音来看,像字符设备这样的东西可能最适合您的目的,但我不确定您是否还有其他限制。

我可能考虑的另一个方向(尽管这可能是一条糟糕的道路)是查看 Linux 内核中的示例,以寻找具有类似功能的内核模块。我没有一个很好的例子,但也许看看/drivers/char/

【讨论】:

  • 我们没有受到其他限制。我的老师告诉我的一切都是我在原始帖子中写下的。不过,我会看看那个文件夹。谢谢你的提示。那么我可以在该文件夹中找到的任何 .c 文件都包含对模块有效的代码吗?我主要关心我可以/不能使用哪些功能来完成任务。从讲座的理论角度,我知道 IPC 应该如何工作,但我从来不知道正确的语法是什么。
【解决方案2】:

你描述的和pipe差不多。

阅读Linux Device Drivers的第三章。 (但不要只是复制scull pipe example ...)

【讨论】:

  • 感谢您的提示,我正在阅读管道内容并查看示例代码,我可以按照它的工作原理进行操作。我了解这些函数的定义是什么,但这是我要挂断的一件事。我如何真正让流程来使用管道?代码在哪里说“这是进程,现在进程来这里并使用 O_WRONLY 标志来写一些东西”?我想我可能在这里遗漏了一些基础知识。
  • 要提问,请使用“”按钮。
猜你喜欢
  • 1970-01-01
  • 2019-05-18
  • 1970-01-01
  • 2017-04-18
  • 2023-03-30
  • 1970-01-01
  • 2017-07-29
  • 2012-04-11
  • 2013-12-17
相关资源
最近更新 更多