从哪里开始使用Linux内核模块?

时间:2013-10-29 19:38:41

标签: c linux linux-kernel

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

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

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

现在我不知道那些有编程背景的人有多难,但对于我这个职位的人来说,这似乎是一项不可思议的复杂任务。

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

  1. 成功编写,编译,插入和删除基本的“hello world”linux内核模块
  2. 仔细阅读The Linux Kernel Module Programming Guide
  3. 的前4或5章
  4. 仔细阅读几篇stackoverflow帖子,其中任何一篇文章似乎都无法指引我到达我需要去的地方。
  5. 所以最后我的问题是:有人可以指点我需要的方向吗?我甚至不知道在哪里找到用于读取用户级过程数据的命令,我需要某个地方来启动我。 TLPD非常适合洞察这个主题但是没有帮助我达到一个可行的项目可以上交的地步。过去,我会学习阅读源代码和逆向工程,我能在任何地方学习找到类似的东西?任何和所有的帮助表示赞赏。

    - 将会

2 个答案:

答案 0 :(得分:3)

我发现Linux内核模块编程指南是一个非常好的资源。从它的声音来看,像角色设备这样的东西可能最适合你的目的,但我不确定你是否有其他限制。

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

答案 1 :(得分:3)

您所描述的内容与pipe几乎相同。

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