linux-arm 页面错误处理程序和检测原始线程

linux-arm page fault handler and detecting originating thread

对于特定硬件集成的项目,我们需要修改linux内核的page_fault处理程序,我想知道是否可以:

1) 在do_page_fault期间,我们可以知道哪个线程产生了那个错误(线程和进程)。该平台是 ARM,因此如果有帮助,可以使用特定于 arm 的中断寄存器

2) 我们能否访问该进程的 user-space 内存并读取我们的用户模式库在此之前留给我们的一些信息? (假设它已经被探测并锁定在内存中)

评论中的进一步解释,如果需要的话。

@ 1): 如果从用户空间应用程序访问内存时发生页面错误(这很可能),那么页面错误处理程序将在该进程的上下文中运行。从 CPU 的角度来看,由于 MMU 的异常,它进入了内核模式。所以是的,您可以获得被中断的用户空间进程的 pid/tid..

@2):是的。内核可以访问所有内存。如果是 32 位系统,则需要 Highmem 支持,如果是 64 位系统,则开箱即用。