所以,让我有一个结构,我想从内核空间中定义的用户级空间读取,但用户级空间有多个进程。
示例:
在内核模块中,我有一个全局结构。 struct { int a; int b; } test;
在用户级模块中,我“挖掘”了全局结构
extern struct { int a; int b; } test;
编译器不抱怨,链接编辑器不抱怨。但是,如果用户有多个进程,那么是否为每个进程克隆了该结构?如果我使用共享内存和extern,那么我可以访问内核的结构,如果我有n个进程,那么自共享以来只有1个结构。我可以使用1个用户级进程访问内核级变量,但如果我有更多进程,那么我会为每个“externed”结构获取克隆
我的问题是,多个用户级进程可以读取内核级变量吗?
答案 0 :(得分:2)
用户空间在任何情况下都无法直接看到内核ram - 而mmap'ing / dev / kmem也不是一个好的解决方案(在我看来它真的很难看,应该只用于内核调试)。
我认为最好的方法是通过/ proc中的文件(非常简单)或带有IOCTL的字符设备(稍微复杂一点)来公开它。
(注意:这是Linux / Unix特定的)
答案 1 :(得分:1)
在大多数操作系统上,您无法从用户空间访问内核空间变量 您需要通过操作系统提供的机制公开您的数据。这可以是自定义系统调用,通过vfs或任何其他形式的IPC公开的文件。
答案 2 :(得分:1)
在Unix上,这通常由mmap
完成 - 一些特殊的设备文件,如/dev/kmem
。