2017-02-13 39 views
6

chcę, że okno qemu po otwarciu i przedstawiający wyjście zamyka się automatycznie po uruchomieniu pintOSJak automatycznie zamknąć wykonanie `qemu` po zakończeniu procesu?

odczuwalna gdy uruchamiam polecenie pintos -- run alarm-multiple w tcsh skorupkach, qemu wyświetla że proces zaczyna, potem trochę alarm-notifications a potem proces kończy się, ale po tym okno qemu nie zamknie się

Chcę zamknąć okno po pomyślnym zakończeniu mojego wywołania systemowego.

+0

Oznacza to, że 'pintOS' nie wychodzi poprawnie. Upewnij się, że poprawnie wychodzi, tzn. Wraca do rodzica. –

+0

Chyba nie przeczytałeś poprawnie mojego problemu. Chcę, aby okno 'qemu' zamykało się automatycznie, nie ma problemu w' pintOS'. – Alfran

Odpowiedz

2

AKTUALIZACJA:


Nowe rozwiązanie

Oto kolejny lepsze rozwiązanie, które będzie działać zarówno pintos run ... i make grade

dodać tę linię do urządzenia/shutdown.c :: shutdown_power_off (void) przed pętli.

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

Stary Rozwiązanie

Dla nowszych wersjach qemu trzeba uruchomić go z opcją

-device isa-debug-exit 

Które wyjście na każdym zapisie do portu IO, domyślnie jest to 0x501

tj. w swoim Pintos projekt pod/utils katalogu src trzeba dodać jedną linię do Pintos plik w run_qemu podprogram

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

aw shutdown.c plików pod urządzenia katalog dodać tę linię w shutdown_power_off funkcji po pętli for

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

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

Kod wyjścia Qemu jest podwójną wartością plus jeden, więc nie ma sposobu na bezpieczne wyjście.Użyj 0x31, która powinna doprowadzić do kodu wyjścia qemu z 0x63

wreszcie uruchomić PINTOS z opcją -q

pintos -q run alarm-multiple 
  • Uwaga: to rozwiązanie nie będzie działać na make grade patrz komentarz poniżej @ pranav3688 dla rozwiązania.
+0

działa to w ogólnym przypadku, ale kończy się niepowodzeniem, gdy 'zrobić stop' jest wykonywane z' qemu', ponieważ potrzebuje czystego wyjścia (kod powrotu = 0, a nie 0x63) .... aby temu zaradzić, zmień linię 896 'sub xsystem 'skryptu pintos do' return 0' z 'return $?' (który zwraca 0x63) – pranav3688

+0

Tak, masz rację. Właściwie znalazłem też inne rozwiązanie niż to, które napisałem, możesz po prostu dodać ten wiersz => ** outw (0x604, 0x0 | 0x2000); ** w /shutdown.c: shutdown_power_off (void) przed pętlą. Powiedz mi, jeśli to też działa, zaktualizuję stanowisko dla obu rozwiązań. – yakout

+0

tak to działa również w przypadku 'make grade'! dzięki! – pranav3688