对内核编程不熟悉,我试图弄脏内核代码。我试图清除pte(页表条目)的PAGE_PRESENT位
所以,我做了以下
temp_pte = pte_clear_flags(pte, _PAGE_PRESENT);
set_pte(ptep, temp_pte);
但是我遇到了内核崩溃。跟踪位于以下链接 http://pastebin.com/5MZ3xzd3
这些是我可以从日志中识别的几条鱼线:
Jun 6 16:43:44 lenovo-laptop kernel:[131.834145] BUG:无法在fffa6120处理内核分页请求
Jun 6 16:43:44 lenovo-laptop内核:[131.835065] IP:[] native_set_pte + 0x3 / 0x10
Jun 6 16:43:44 lenovo-laptop kernel:[131.835598] * pde = 018c7067 * pte = 00000000
20060 /基板产品名称 6月6日16:43:44 lenovo-laptop内核:[131.842637] EIP:0060:[] EFLAGS:00010282 CPU:1
Jun 6 16:43:44 lenovo-laptop kernel:[131.843372] EIP在native_set_pte + 0x3 / 0x10
我经历了下面的堆栈溢出链接,因为日志很不相似,但仍然无法理解为什么会发生这种情况。
What do these Linux Kernel Oops fields mean?
我是否需要在调用set_pte之前获取一些锁?我在各个地方查看了这个函数的用法,我尝试以同样的方式使用它。为什么发生内核分页请求,因为如果查看set_pte函数,我没有发现任何分配,但是正在调用mmu操作。
任何指针或帮助都会很棒,因为我坚持这一点。感谢