linux - 内核和用户应用程序之间的通信方法

标签 linux ipc kernel-module

一般的 Linux 编程新手。

我试图通过共享内存与内核模块通信,但无法调用用户应用程序中使用的函数,例如 shmget(); 我已经安装了 kernel-headers 和 kernel-devel,并包括, 到内核​​模块源,但 header 不包含任何函数。

是否有在内核中使用共享内存的标准方法?

此外,任何有关如何在相同情况下使用套接字的提示都会有很大帮助。

使用 发行版:CentOS 5.2 内核:2.6.18-92.1.22.e15

提前致谢。

//已添加// 为了澄清,我正在尝试制作一个具有典型嵌入式的共同特征的演示 Linux 项目。最终目标是移植到LynxOS,看看会出现什么样的问题 在大型项目上这样做时会发生这种情况。

目前demo的主要功能是 多进程、管道、消息查询、共享内存、套接字、多线程。

它有一个用户应用程序和一个可加载的内核模块,它们相互通信。 用户应用程序中两个进程之间的管道和消息,以及共享内存和 用户应用程序和内核模块之间的套接字。

如果我在做一些明显偏离正轨的事情,请告诉我。

最佳答案

我看你的目的不是很清楚。共享内存不是用户空间和内核空间之间的通信方式。如果您想访问一些内核分配的内存,一种方法是实现 mmap 系统调用。

如果您真的需要编写一些内核代码,推荐阅读: linux device driver third edition ,第 15 章就是您要找的那一章。

一旦你有了共享内存,你可能需要一种方法来做一些同步,即在内核中处理一个部分,同时在用户空间中使用另一个部分。用户空间/内核共享内存的一个例子是 V4L2 API .更友好的解释可以在LWN series中找到关于它。

但是,如果您更具体地了解您想要做什么,您将在执行过程中获得更具体的帮助,如果您真的需要一个内核模块,您可以查看哪些内核代码等等.

对于socket的东西,我了解的还不够,不过你应该google一下linux + kernel + netlink。它用于通过“标准”套接字调用从用户空间与内核通信,但我真的不知道如何在模块中使用它。

关于linux - 内核和用户应用程序之间的通信方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/514819/

相关文章:

c - 如何防止sendfile函数中的SIGPIPE

linux - 无法在 Bash 中读取 var

linux - 将脚本更改为 For Do Done 循环

ruby-on-rails - Linux Mint 'rvm requirements' 故障

linux - RedHat 中的 sleep() 函数调用可加载内核模块出现问题

c++ - 进程间 Hook

java - 使用 AIDL 在两个进程之间传输 Parcelable

c - 简单的有线协议(protocol),一个人要做什么?

从 LKM 在/proc 中创建条目

linux-kernel - 构建内核模块 CentOS6