退出qemu_linux – 如何在进程结束后自动关闭`qemu`的执行?

更新:

新的解决方案

这是另一个更好的解决方案,适用于pintos run …和make grade

在循环之前将此行添加到devices / shutdown.c :: shutdown_power_off(void).

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

旧的解决方案

对于较新版本的qemu,您需要使用该选项运行它

-device isa-debug-exit

哪个写入IO端口,默认情况下为0x501

即在src / utils目录下的pintos项目中,您需要在run_qemu子例程中的pintos文件中添加一行

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);

}

并在devices目录下的shutdown.c文件中

在for循环之后,在shutdown_power_off函数中添加此行

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

outb (0x8900, *p);

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

Qemu的退出代码是值的两倍加一,所以没有办法彻底退出.使用0x31,这将导致qemu退出代码为0x63

最后用-q选项运行pintos

pintos -q run alarm-multiple

>注意:此解决方案不适用于制作等级,请参阅@ pranav3688下面的评论以获得解决方案.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值