2017-02-13 2 views
6

Я хочу, чтобы qemu окна после открытия и показа вывода автоматически закрывается после запуска pintOSКак автоматически закрыть выполнение `qemu` после завершения процесса?

нравится, когда я запустить команду pintos -- run alarm-multiple в tcsh оболочке, 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); 

Старое решение

Для более новых версиях 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 для решения.
+0

это работает в общем случае, но не выполняется, когда 'make grade' выполняется с' qemu', потому что ему нужен чистый выход (код возврата = 0, а не 0x63) ...., чтобы исправить это, измените строку 896 'sub xsystem 'скрипта pintos для' return 0' из 'return $?' (который возвращает 0x63) – pranav3688

+0

Да, вы правы. Фактически, я также нашел другое решение, отличное от того, которое я написал, вы можете просто добавить эту строку => ** outw (0x604, 0x0 | 0x2000); ** в /shutdown.c: shutdown_power_off (void) перед циклом. Скажите, если это сработает, я обновляю сообщение для обоих решений. – yakout

+0

да это работает для 'make grade' тоже! благодаря! – pranav3688

Смежные вопросы