【发布时间】:2015-12-03 07:33:16
【问题描述】:
有多种方法可以将内核内存映射到用户空间。
有人说使用splice()、mmap()等。
我正在调用mmap(),并使用我们自己的伪字符设备文件的描述符,例如“/dev/mem”。
当用我们自己的伪字符设备文件调用mmap()时,在mmap内部注册了file_operation函数指针,我们可以调用remap_pfn_range()来映射内存..
现在该进程可能已经终止/杀死/干净的 exit()。 如何从内核空间中删除这些映射。我正在研究 ARMv7-A。
谁能解释当进程被杀死/终止时这些内存映射会发生什么?内核是自己删除映射还是我们需要明确地unmap?
【问题讨论】:
-
您能否简明扼要地说明您在说什么。您想了解 /dev/mem 还是如何编写自己的? 这些映射等有点模糊。你从
splice()(避免映射内存)和mmap()开始,它们是用户空间调用。稍后您将讨论内核 API 调用。您的问题目前尚不清楚。 -
自定义驱动程序/设备的生命周期取决于该设备的用例;因此内核提供了多种方法来确保释放映射。它是系统全局的还是每个进程的映射或其他一些生命周期?
-
主要要求是了解 remap_pfn_range() 的功能。假设它在内核空间中维护一些映射,我们如何删除它们。
标签: c linux-kernel arm