如何开始学习Linux内核模块?

6
一些背景信息,我是一名CMPE学生,目前在操作系统课程中。我有一些C编码的基础知识,但更熟悉C++(已经学了大约3个学期)。除此之外,我从未接受过任何其他形式的编码培训。此外,我对Linux环境有基本的理解。
我正在开展一个项目,需要我和我的团队编写一个Linux内核模块,可以实现以下功能:
- 通过将接收到的数据打印到内核日志来回显由用户级进程传递的数据 - 能够将数据从一个用户进程传递到另一个用户进程。 - 必须能够将内核模块用作进程间通信抽象。模块应提供这样的情况:发送者向其发布数据,但没有接收者在等待。模块必须涵盖这样的情况:接收者请求数据,但没有可用的数据。 - 模块必须涵盖这样的情况:接收者请求数据,但没有可用的数据。 - 在您的模块中必须有缓冲容量限制。
现在我不知道对于具有编程背景的人来说,这似乎有多难,但对于我这样的人来说,这似乎是一个不可能完成的复杂任务。
到目前为止,我已经完成了以下工作:
  1. 成功编写、编译、插入和删除了基本的“hello world”Linux内核模块
  2. 阅读了Linux内核模块编程指南的前4到5章
  3. 阅读了几篇stackoverflow帖子,但没有一篇能够指导我去哪里。

最后我的问题是:有人能指引我应该怎么做吗?我甚至不知道从哪里找到用于读取用户级进程数据的命令,我需要一个起点。TLPD在这个主题上提供了很好的见解,但它不能帮助我获得可操作的项目以提交。过去,我会通过阅读源代码和反向工程来学习,有没有任何地方可以找到类似的东西?感激任何和所有的帮助。

-威尔


1
你可能想在 /dev 上公开一个或多个虚拟文件,并设计一个关于这个虚拟文件的文件读写 API。 - Spidey
如果不是因为我不知道那些意味着什么,那听起来很棒,哈哈。我想我比你想象的还要业余一点。你有没有可能用五岁孩子能听懂的语言来解释一下? - thewill2live
2个回答

4
我发现Linux内核模块编程指南是一个相当好的资源。从这种情况听起来,像字符设备可能适合您的目的,但我不确定是否有其他限制。
另一个方向可以考虑(虽然这可能是一条错误的道路)是查看Linux内核中具有类似功能的内核模块的示例。我手头没有一个很好的例子,但也许可以查看/drivers/char/。

我们没有收到其他限制。我老师告诉我的一切都写在了我的原始帖子中。不过我会看看那个文件夹的。谢谢你的提示。所以,无论我在那个文件夹中找到哪个 .c 文件,其中的代码都是模块有效的?我主要关心的是我可以/不能使用哪些函数来完成任务。我知道从理论上讲IPC应该如何工作,但我从来不知道正确的语法是什么。 - thewill2live

4

谢谢你的提示,我正在阅读有关管道的内容并查看示例代码,我可以理解它的工作逻辑。我了解这些函数的定义,但有一件事情让我困扰。我该如何让进程来使用管道?代码在哪里说“这是进程,现在进程来这里并使用O_WRONLY标志写入一些东西”?我想我可能缺少一些基本知识。 - thewill2live
请使用“提问”按钮来提出问题。 - CL.

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接