一般的 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/