2017-02-13 116 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

相关问题