1

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

例子:

在内核模块中,我有一个全局结构。结构 { int a; 诠释 b; } 测试;

在用户级模块中,我已经“外部化”了该全局结构

外部结构 { int a; 诠释 b; } 测试;

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

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

4

3 回答 3

2

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

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

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

于 2010-02-18T08:11:25.077 回答
1

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

于 2010-02-05T10:20:57.287 回答
1

在 Unix 上,这通常是通过mmap-ing 一些特殊的设备文件来完成的,例如/dev/kmem.

于 2010-02-17T14:02:02.097 回答