Assembly 我的内核在qemu中正常运行,但在bochs中出现双重错误
我的内核在执行第一页错误时崩溃。 我的页面错误处理程序如下所示:Assembly 我的内核在qemu中正常运行,但在bochs中出现双重错误,assembly,operating-system,x86,kernel,Assembly,Operating System,X86,Kernel,我的内核在执行第一页错误时崩溃。 我的页面错误处理程序如下所示: asm_page_error_wrapper: PUSHA movl %esp, %esi pushl 48(%esi)/*esp,pusha has already been calculated*/ pushl 32(%esi)/*error*/ CALL page_error_interrupt popl %ecx popl %ecx POPA ad
asm_page_error_wrapper:
PUSHA
movl %esp, %esi
pushl 48(%esi)/*esp,pusha has already been calculated*/
pushl 32(%esi)/*error*/
CALL page_error_interrupt
popl %ecx
popl %ecx
POPA
addl $4, %esp
IRET
在gdb中,它在“PUSHL48(%esi)
”崩溃
以下是bochs日志中的内容:
我不知道原因。从屏幕截图上看,您的
IDT
对于#GP处理程序条目无效。我不确定您是如何得出结论,认为坠机发生在PUSHL48(%esi)
。这是可能的,但这里似乎不是这样
如果仿真器产生不同的结果,可能有以下几个原因:
在内核配置中,是否启用了任何准虚拟设备驱动程序?这些特定于特定的虚拟机监控程序。您是指bochs配置还是我的内核中断安装程序?您自己编译了这个内核二进制文件,对吗?构建过程严重依赖于
.config
文件,该文件通常是在make oldconfig
、make menuconfig
或make xconfig
的帮助下创建的。内核很小,由我编写,它在qemu中正常运行,但在bochs下崩溃。如果这是您自己编写的内核,你真的应该在问题中说清楚。因为当您使用linux
和kernel
标记时,人们会认为您在使用linux内核时遇到了问题。“我的内核”可以简单地表示“我的计算机上的内核”。gdb显示在“推送48(%esi)”时发生中断。这就是我的结论。