首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >内核和用户应用程序之间的通信方法

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

Stack Overflow用户
提问于 2009-02-05 06:36:46
回答 3查看 5.5K关注 0票数 3

Linux编程的一般新手。

我试图通过共享内存与内核模块通信,但无法调用shmget()等用户应用程序中使用的函数;我已将kernel-headers和kernel-devel安装到内核模块源中,并将其包括在内,但这些头部不包含任何函数。

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

此外,任何关于如何在相同情况下使用套接字的提示都将非常有帮助。

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

提前谢谢。

//添加//为了澄清,我正在尝试制作一个演示,它具有典型嵌入式linux项目的常见功能。最终目标是将其移植到LynxOS,看看在大型项目上这样做可能会出现什么样的问题。

目前演示的主要功能是多进程、管道、消息队列、共享内存、套接字、多线程。

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

如果我做的事情完全偏离了路线,请告诉我。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2009-02-05 07:43:54

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

如果你真的需要写一些内核代码,推荐的读物是:linux device driver third edition,第15章就是你想要的。

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

但是,如果您更具体地说明您想要做什么,您将在执行过程中收到更具体的帮助,如果您确实需要内核模块,您可以查看哪些内核代码,等等。

关于套接字,我不太了解,但你应该在谷歌上搜索linux +内核+ netlink。它用于通过“标准”套接字调用从用户空间与内核通信,但我真的不知道如何在模块中使用它。

票数 3
EN

Stack Overflow用户

发布于 2009-02-05 13:32:09

内核可以自动访问用户空间内存,在内核中已经有很多这样的例子(提示: open()需要访问用户空间来读取要打开的文件名)。

目前还不清楚您的用例是什么,请详细说明。

在用户空间和内核之间进行通信的正常方式是通过sys调用;您可以添加自己的调用(不一定推荐)或扩展一些现有的调用(字符设备上的ioctl是典型的)。

许多内核模块实现了设备特殊文件,这是(大多数)设备驱动程序所做的(除了网络接口,它不是Linux下的设备特殊文件)

票数 2
EN

Stack Overflow用户

发布于 2010-03-12 19:45:59

以下是你可以与内核mmap设备文件对话的方法(编写简单的设备驱动程序,或者你也可以使用fifo文件,Netlink套接字(网络堆栈),套接字(网络),或者写你的系统调用...如果你详细地告诉我你到底想要什么,我可以帮你更多。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/514819

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档