2012-05-27 23 views
1

我的內核在執行首頁故障時崩潰。 我的頁面故障管理器看起來是這樣的:我的內核在qemu中正常運行,但bochs中出現雙重故障

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中墜毀在「pushl 48(%esi)」。

這裏是Bochs的日誌說:

enter image description here 我不知道原因。

+0

在你的內核配置中,是否啓用了所有的半虛擬設備驅動程序?這些將特定於特定的管理程序。 –

+0

你的意思是bochs config或我的內核中斷安裝程序? –

+0

你自己編譯了這個內核二進制文件,對吧?構建過程很大程度上依賴於'.config'文件,該文件通常是在'make oldconfig','make menuconfig'或'make xconfig'的幫助下創建的。 –

回答

2

從截圖看來,IDT對#GP處理程序條目無效。我不知道你是如何得出結論,墜機是在pushl 48(%esi)。這是可能的,但在這裏似乎並非如此。

如果仿真器產生不同的結果,也可以是針對幾個原因:

  1. 你的代碼操縱未初始化的數據(在寄存器和存儲器)
  2. 有一個在你的代碼中的競爭條件
  3. 有一個仿真錯誤
+0

gdb顯示中斷時發生「推48( %ESI)」。那是'我的結論來自哪裏。 –

相關問題