2017-02-13 68 views
6

我想,可自動地打開和表示輸出後qemu窗口,當我在tcsh殼運行命令pintos -- run alarm-multiple運行pintOS如何在進程結束後自動關閉`qemu`的執行?

像後關閉,QEMU顯示過程開始,那麼一些alarm-notifications然後過程結束,但之後qemu窗口將不會關閉

我想成功完成我的系統調用後退出窗口。

+0

這表明你的'pintOS'不能正常退出。確保它正確退出,即返回到它的父母。 –

+0

我猜你沒有正確閱讀我的問題。我想'qemu'窗口自動關閉,'pintOS'沒有問題。 – Alfran

回答

2

更新:


新的解決方案

這裏是另外一個更好的解決方案,將兩個pintos run ...make grade

工作,加入這一行devices/shutdown.c :: shutdown_power_off(void)循環之前。

outw(0x604, 0x0 | 0x2000); 

這個老辦法

對於需要使用選項

-device isa-debug-exit 

任何寫一個退出到一個IO端口運行QEMU的更新版本,默認情況下它是0x501

iepintos的的src/utils的目錄下項目,將需要添加一行到pintos文件中的run_qemu子程序

sub run_qemu { 
    print "warning: qemu doesn't support --terminal\n" 
     if $vga eq 'terminal'; 
    print "warning: qemu doesn't support jitter\n" 
     if defined $jitter; 
    my (@cmd) = ('qemu-system-i386'); 

    push (@cmd, '-device', 'isa-debug-exit'); # <====== add this line 
    .. 
    .. 
    push (@cmd, '-monitor', 'null') if $vga eq 'none' && $debug eq 'none'; 
    run_command (@cmd); 
} 

shutdown.c下文件設備目錄 在for循環後添加此行shutdown_power_off函數

for (p = s; *p != '\0'; p++) 
    outb (0x8900, *p); 

outb (0x501, 0x31); // <====== add this line 

Qemu的退出代碼是值加1的兩倍,因此無法完全退出。使用0X31這將導致在0x63

最後用-q選項運行pintos一個QEMU退出代碼

pintos -q run alarm-multiple 
  • 注:該解決方案將無法工作的make grade看到下面的評論通過@ pranav3688尋求解決方案。
+0

這可以在一般情況下使用,但是當使用'qemu'執行'make grade'時會失敗,因爲它需要一個乾淨的退出(返回代碼= 0而不是0x63)....爲了解決這個問題,修改了子系統的第896行'pintos腳本從'return $?'返回0'(返回0x63) – pranav3688

+0

是的,你是對的。實際上,我還發現了另一個解決方案,而不是我寫的,你可以在循環之前在/shutdown.c:shutdown_power_off(void)中添加這一行=> outw(0x604,0x0 | 0x2000); ** 。 告訴我,如果這也可以,我會更新這兩個解決方案的帖子。 – yakout

+0

是啊,這也適用於'製作等級'!謝謝! – pranav3688

相關問題