ОБНОВЛЕНО:
Новое решение
Вот еще лучшее решение, которое будет работать как pintos run ...
и make grade
добавить эту строку в devices/shutdown.c :: shutdown_power_off (void) перед циклом.
outw(0x604, 0x0 | 0x2000);
Старое решение
Для более новых версиях QEMU вам нужно запустить его с опцией
-device isa-debug-exit
Какой выход из любой записи в порт ввода-вывода, по умолчанию это 0x501
ie в вашем Pintos проекту под 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 файла под добавить эту строку в shutdown_power_off функция после цикла for
for (p = s; *p != '\0'; p++)
outb (0x8900, *p);
outb (0x501, 0x31); // <====== add this line
Код выхода Qemu равен удвоенному значению плюс один, поэтому нет возможности выйти из него чисто.Использование 0x31, которое должно привести к QEMU код выхода 0x63
, наконец, запустить Pintos с опцией -q
pintos -q run alarm-multiple
- Примечание: это решение не будет работать для
make grade
см комментарий ниже на @ pranav3688 для решения.
Это означает, что ваш 'pintOS' не выходит должным образом. Удостоверьтесь, что он вышел из строя, то есть верните его родительскому элементу. –
Я думаю, вы не правильно прочитали мою проблему. Я хочу, чтобы окно 'qemu' закрывалось автоматически, в' pintOS' нет проблем. – Alfran