2009-02-05 70 views
2

通常对Linux编程不熟悉。内核和用户应用程序之间进行通信的方法

我想通过共享内存与内核模块进行通信,但无法调用用户应用程序中使用的函数,如shmget(); 我已经安装了kernel-headers和kernel-devel,并且包含 到内核模块源代码,但是头文件不包含任何函数。

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

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

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

在此先感谢。

//添加// 为了澄清,我试图做一个演示,它具有典型嵌入式 linux项目的共同特征。最终目标是将其移植到LynxOS上,以查看在较大型项目上如何处理这种问题 。

目前该演示的主要特点是多进程,管道,消息ques,共享内存,套接字,多线程。

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

如果我正在做一些简单的课程,请告诉我。

回答

3

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

如果你确实需要编写一些内核代码,推荐的读数是: linux device driver third edition,第15章是你正在寻找的。

一旦你有共享内存,你可能需要一种方法来做一些同步,即在内核中的一部分工作,而在用户空间中使用另一部分。用户空间/内核共享内存的一个例子是V4L2 API。关于它的更多友情解释可以在LWN series中找到。但是,如果你对自己想要做的更具体,你会在实现它的方式上得到更多具体的帮助,如果你真的需要一个内核模块,你可以看看哪些内核代码等等。上。

对于套接字的东西,我不知道,但你应该谷歌的Linux +内核+网络连接。它用于通过“标准”套接字调用从用户空间与内核通信,但我真的不知道如何在模块中使用它。

+0

感谢您的意见! 我想让所用TY一个演示程序可以在嵌入式linux项目中使用的特征。 将被编辑的问题 – Saifis 2009-02-05 08:14:27

2

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

目前还不清楚是什么你使用案件是,请更具体。

用户空间与内核之间进行通信的正常方式是通过SYS呼叫;你可以添加你自己的(不一定是推荐的)或者扩展一些已有的(字符设备上的ioctl是典型的)。

很多内核模块的实现设备特殊文件,这是(最)的设备驱动程序做(除了网络接口,这是不是设备专用文件在Linux下)以下

+0

三江源澄清,将考虑内核。 – Saifis 2009-02-05 23:50:26

0

办法通过ü可以跟内核 MMAP 设备文件(你写简单的设备驱动程序,或者你使用FIFO文件以及,网络链路插座(网络堆栈),插座(网络),或写你的系统调用...如果你告诉我详细究竟要acheive我可以帮你。

相关问题