ОБНОВЛЕНО:
Новое решение
Вот еще одно лучшее решение, которое будет работать как для pintos run ...
, так и для make grade
.
добавьте эту строку в devices/shutdown.c :: shutdown_power_off(void) перед циклом.
outw( 0x604, 0x0 | 0x2000 );
Старое решение
Для более новых версий qemu вам нужно запустить его с опцией
-device isa-debug-exit
Который завершается при любой записи в порт ввода-вывода, по умолчанию это 0x501.
то есть в проекте 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 в каталоге devices добавьте эту строку в функцию 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 для решения.
person
yakout
schedule
17.11.2017
pintOS
не выходит должным образом. Убедитесь, что он выходит правильно, т.е. возвращается к своему родителю. - person rakib_   schedule 13.02.2017qemu
закрывалось автоматически, вpintOS
проблем нет. - person Alfran   schedule 13.02.2017