linux-kernel - 用户定义的页面错误和异常处理程序

标签 linux-kernel

我想了解我们是否可以添加我们的页面 故障处理程序 /异常 中的处理程序内核 /用户模式 ​​并在将控制权交还给内核之前处理我们引发的错误。
这里的任务不会修改现有的内核代码( do_page_fault fn ),而是添加一个用户定义的处理程序,当页面错误或异常被触发时将被查找

人们可以找到像“ kprobe ”这样的工具,它们在指令中提供 Hook ,但看起来这不符合我的目的。

如果有人可以帮助我理解这一点或指出好的引用资料,那就太好了。

最佳答案

从用户空间,您可以为 SIGSEGV 定义信号处理程序,因此每当进行无效的内存访问时都会调用您自己的函数。与 mprotect() 结合使用时,这让程序可以管理自己的虚拟内存,所有这些都来自用户空间。

但是,我的印象是您正在寻找一种方法来拦截所有页面错误(主要、次要和无效)并调用任意内核函数作为响应。我不知道这样做的干净方法。当我在自己的研究项目中需要此功能时,我最终将代码添加到 do_page_fault() .它对我来说很好,但它是一个黑客。如果有人知道一种干净的方法来做到这一点,我会非常感兴趣(即,可以由 vanilla 内核上的模块使用)。

关于linux-kernel - 用户定义的页面错误和异常处理程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5899830/

相关文章:

linux-kernel - 我将如何自然地翻译 Linux 内核中的第 3 层 header ?

linux - 内核 makefile 中 ?= 的含义是什么?

c - 通过内核访问 block 级存储

multithreading - 在隔离的 cpu 核心上运行内核线程

linux-kernel - 用户空间和内核线程之间的共享内存

linux-kernel - Linux 内核中的 gpiod_* 与 gpio_* 方法

memory-management - Linux 内核启动 : how is memory allocation done when DTB and initramfs are initially in memory?

linux - Linux内核如何创建/dev/mtdx节点?

linux - 中断处理程序内向外部 BMC 报告错误

linux - QEMU 中的滚动选项