[Anmerkung:. Automation ohne jede Virtualisierungs API Von meinem blog post.]
Schritt 1:
verwendet standardmäßig qemu SDL den VGA-Ausgang zur Anzeige So ist der erste Schritt, um diese Wechselwirkung machen mit. qemu durch s TDIO. Qemu bietet hierfür eine Option.
Von qemu docs:
-nographic Normalerweise QEMU verwendet SDL den VGA-Ausgang angezeigt werden soll. Mit dieser Option können Sie die grafische Ausgabe vollständig deaktivieren, sodass QEMU eine einfache Befehlszeilenanwendung ist. Der emulierte serielle Port ist umgeleitet auf der Konsole. Daher können Sie QEMU weiterhin verwenden, um einen Linux-Kernel mit einer seriellen Konsole zu debuggen.
Also alles, was Sie tun müssen, ist qemu mit -nographic aufrufen.
qemu -nographic -hda guest.disk
Schritt 2:
Jetzt, wo Sie mit Ihrem Gast (oder Qemu-Prozess) in Wechselwirkung treten kann über die Befehlszeile, müssen Sie automatisieren diese Interaktion. Der offensichtliche Weg, dies in Python zu tun, ist den qemu-Prozess (mit -nographic) mit subprocess module zu starten und dann mit diesem Prozess zu kommunizieren. Aber zu meiner Überraschung hat das für mich einfach nicht geklappt. Also habe ich nach einem anderen Weg gesucht.
Später fand ich heraus, dass das großartigste Werkzeug für diese Art von Jobs Expect ist. Es ist ein Automatisierungswerkzeug für interaktive Anwendungen, die in tcl geschrieben sind.
This guide sollte Ihnen helfen, mit Expect zu beginnen. Hier ist das Skript, um einen Gast mit qemu mit Expect laufen zu lassen.
was bedeutet, ich muss ein Werkzeug schreiben, das auf jedem meiner Gäste läuft für Befehle abfragen ... – Raindog
das ist nicht wahr, können Sie den Monitor verwenden, um Tastenanschläge zu senden. Es gibt auch einen parallelen Port und einen seriellen Port. –