我们正面临使用kexec命令加载的段的奇怪损坏。
我们遵循的步骤是
使用“kexec -l”命令加载新内核然后
我们正在对设备进行多次专有关闭,最后我们正在执行
“kexec -e”跳转到新内核。
在“kexec -l”和“kexec -e”之间,我们的专有代码正在破坏已加载的段,因此我们无法成功执行新内核(系统挂起甚至没有早期的调试从新内核)。但是如果我们在“kexec -l”之后立即执行“kexec -e”,新内核就会完美地执行。
为了找到谁是罪魁祸首,我想将作为段加载的一部分分配的页面标记为只读(在复制内容之后),这样如果有人试图写入它会抛出异常而我们可以很容易地抓住它。为此,我想在复制所需内容后将alloc_pages(GFP_HIGHUSER,0)返回的页面标记为只读。
你能告诉我怎么做吗?
谢谢,
塞特希