从Linux内核模块共享内存以供用户空间进程访问

Ton*_*ony 8 c linux memory kernel

我有一个Linux内核模块,在它的初始化例程中,将一个4KB大小的结构写入内核内存.我想要做的是共享这个内存,以便单个用户空间进程可以对此结构具有只读访问权限.

我被告知要避免使用IOCTLS,因为它们不是最好的方法,所以从我读过的最好的方法就是使用这个功能mmap,但是我有点困惑关于如何在C中实现我需要的东西

我确实看过使用该功能shmget,但似乎这是为需要IPC功能的用户空间应用而设计的.

任何建议,甚至更好的简单例子将不胜感激.

谢谢!

aus*_*len 0

您无法使用 mmap 等直接访问机制安全地执行此操作,因为这样任何人都可以使用它。

在Linux中,用户内存和内核内存是独立的,并且在不同的地址空间中实现。地址空间是虚拟化的,这意味着地址是从物理内存中抽象出来的。由于地址空间是虚拟化的,因此可以存在许多地址空间。事实上,内核本身驻留在一个地址空间中,每个进程也驻留在自己的地址空间中。这些地址空间由虚拟内存地址组成,允许许多具有独立地址空间的进程引用相当小的物理地址空间(机器中的物理内存)。这不仅方便,而且安全,因为每个地址空间都是独立且隔离的,因此是安全的。

但这种安全性是有一定成本的。由于每个进程(和内核)可以具有引用物理内存不同区域的相同地址,因此不可能立即共享内存。来源