簡體   English   中英

如果我在 kernel 中添加一個 while 循環,Qemu 會重新啟動

[英]Qemu restarts if I add a while loop in my kernel

我寫了一個當鍵盤 controller 未准備好時掛起的 while 循環:

while(inb(0x64)!=0){

  }

但是現在每次我嘗試啟動 kernel 時 qemu 都會重新啟動。 有時我可以在很短的時間內看到 vga output。 我試圖刪除 inb,它仍然會重新啟動,除非我刪除它

編輯:

這是完整的代碼:

int *resolution_ptr;


void init_vbe(){
    regs16_t vberegister;
  vberegister.bx=0x4107;
  vberegister.ax=0x4f02;
  int32(0x10,&vberegister);


  *resolution_ptr=1280;
}

void kernel_main(void) 
{

  resolution_ptr=(int*)0x2ff0; /*define the address of the resolution, so that the printstring function can draw the letter correctly*/

  init_vbe ();
    printstring("Kernel sucessfully loaded.");


  while(inb(0x64)!=0){ /*code that cause qemu to restart*/
  }

}

當我嘗試在其中運行 kernel 時,bochs 引發了此錯誤:

00096454180e[CPU0  ] exception(): 3rd (13) exception with no resolution, shutdown status is 00h, resetting

INT32 也來自這里: https://gist.github.com/carlosascari/35dba95ee3118ebf61f4bd1625f4fa11

現在可以通過刪除 int32 中的 sti 來工作。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM