从用户级空间访问内核空间中的变量

时间:2010-02-04 18:29:49

标签: kernel global-variables shared-memory

所以,让我有一个结构,我想从内核空间中定义的用户级空间读取,但用户级空间有多个进程。

示例:

在内核模块中,我有一个全局结构。 struct {  int a;  int b; } test;

在用户级模块中,我“挖掘”了全局结构

extern struct {   int a;   int b; } test;

编译器不抱怨,链接编辑器不抱怨。但是,如果用户有多个进程,那么是否为每个进程克隆了该结构?如果我使用共享内存和extern,那么我可以访问内核的结构,如果我有n个进程,那么自共享以来只有1个结构。我可以使用1个用户级进程访问内核级变量,但如果我有更多进程,那么我会为每个“externed”结构获取克隆

我的问题是,多个用户级进程可以读取内核级变量吗?

3 个答案:

答案 0 :(得分:2)

用户空间在任何情况下都无法直接看到内核ram - 而mmap'ing / dev / kmem也不是一个好的解决方案(在我看来它真的很难看,应该只用于内核调试)。

我认为最好的方法是通过/ proc中的文件(非常简单)或带有IOCTL的字符设备(稍微复杂一点)来公开它。

(注意:这是Linux / Unix特定的)

答案 1 :(得分:1)

在大多数操作系统上,您无法从用户空间访问内核空间变量 您需要通过操作系统提供的机制公开您的数据。这可以是自定义系统调用,通过vfs或任何其他形式的IPC公开的文件。

答案 2 :(得分:1)

在Unix上,这通常由mmap完成 - 一些特殊的设备文件,如/dev/kmem