Inhaltsverzeichnis
Hardware-Komponenten
In Abhängigkeit von der verwendeten Prozessor-Architektur werden unterschiedliche Hardware-Komponenten emuliert. Per Default werden Standard-Komponenten eingestellt. Sollen keine Default-Devices generiert werden, ist die Option -nodefaults anzuwenden. Im QEMU-Monitor zeigt dann der Befehl info network keine Netzwerk-Devices an.
Host ~$ qemu Platte.img -nodefaults
Im QEMU-Monitor zeigt der Befehl info qtree den Device-Tree an.
(qemu) info qtree
bus: main-system-bus
type System
dev: i440FX-pcihost, id ""
bus: pci.0
type PCI
dev: piix3-ide, id ""
bus-prop: addr = 01.1
class IDE controller, addr 00:01.1, pci id 8086:7010 (sub 1af4:1100)
bar 4: i/o at 0xc000 [0xc00f]
bus: ide.1
type IDE
bus: ide.0
type IDE
dev: ide-drive, id ""
dev-prop: unit = 0
dev-prop: drive = ide0-hd0
dev: PIIX3, id ""
bus-prop: addr = 01.0
class ISA bridge, addr 00:01.0, pci id 8086:7000 (sub 1af4:1100)
bus: isa.0
type ISA
dev: isa-fdc, id ""
dev-prop: driveA = <null>
dev-prop: driveB = <null>
isa irq 6
dev: i8042, id ""
isa irqs 1,12
dev: mc146818rtc, id ""
dev-prop: base_year = 2000
isa irq 8
dev: i440FX, id ""
bus-prop: addr = 00.0
class Host bridge, addr 00:00.0, pci id 8086:1237 (sub 1af4:1100)
SMBIOS
Die SMBIOS-Spezifikationen (System Management BIOS) sind Standards zum Darstellen von Hardware-Informationen für x86-Architekturen. Diese Standards werden von der Distributed Management Task Force (DMTF) festgelegt (siehe http://www.dmtf.org/standards/smbios/). Diese Informationen dienen dem Betriebssystem bei der Ermittlung der Hardware und bei der Auswahl der entsprechenden Treiber. Weiterhin helfen diese Informationen bei der Fehlererkennung.
Unter MS-Windows speichert der Treiber mssmbios.sys die Daten in der Registry unter HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Mssmbios\Data ab. Bei korrekten SMBIOS-Einträgen werden bei aktuellen Windows-Versionen die ermittelten Informationen unter HKLM\Hardware\Description\BIOS dargestellt und dienen der System-Identifikation (Designed for Windows).
Unter unixartigen Betriebssystemen ermittelt man die SMBIOS-Informationen mit dem Tool dmidecode (http://www.nongnu.org/dmidecode/). Unter Ubuntu wird das gleichnamige Paket installiert.
Host ~$ sudo apt-get install dmidecode
Das Tool dmidecode benötigt Lese-Rechte für /dev/mem. Deshalb muss es mit root-Rechten aufgerufen werden.
Host ~$ sudo dmidecode
Die Ausgabe ist sehr umfangreich und wird mit Optionen eingeschränkt. Mit der Option -s lässt sich ein Schlüsselwort vorgeben (siehe Man-Page).
Host ~$ sudo dmidecode -s baseboard-manufacturer
Laut Spezifikation müssen die SMBIOS-Informationen in Tabellen unterteilt sein. Die Tabelle 0 enthält Angaben zum BIOS. Tabelle 1 zeigt System-Informationen und Tabelle 2 informiert über das Motherboard. In diesem Beispiel wird die Tabelle 0 (type 0) angezeigt.
Host ~$ sudo dmidecode –type 0
Mit den QEMU-Optionen -smbios type=0 und -smbios type=1 werden SMBIOS-Felder der Tabellen 0 und 1 vorgegeben. In diesem Beispiel wird das Feld Serial Number in der Tabelle 1 definiert.
Host ~$ qemu Platte.img -smbios type=1,serial=0123456789
Hier ein komplexeres Beispiel:
Host ~$ qemu Platte.img \
-smbios type=0,vendor=„Apple Inc.“,version=„MP21.88Z.005C.B01.0608221120“,date=04/01/2008, \
-smbios type=1[,manufacturer=„Apple Inc.“,product=„MacBookAir1,1“,version=„1.0“, \
serial=W88033AKY51,uuid=00020003-0004-0005-0006-000700080009,sku=470065-200
Im Gast-System, in diesem Beispiel Linux, werden die Einstellungen überprüft.
Gast ~$ sudo dmidecode –type 0
Handle 0x0000, DMI type 0, 24 bytes
BIOS Information
Vendor: Apple Inc.
Version: MP21.88Z.005C.B01.0608221120
Release Date: 04/01/2008
Gast ~$ sudo dmidecode --type 1
Handle 0x0100, DMI type 1, 27 bytes
System Information
Manufacturer: Apple Computer, Inc.
Product Name: MacBookAir1,1
Version: 1.0
Serial Number: W88033AKY51
UUID: 00020003-0004-0005-0006-000700080009
Wake-up Type: Power Switch
SKU Number: 470065-200
Family: Not Specified
Die SMBIOS-Daten lassen sich auch aus einer Binary-Datei laden.
Host ~$ qemu Platte.img -smbios file=smbios.bin
Hier die vollständige Syntax der Option -smbios.
-smbios type=0[,vendor=str][,version=str][,date=str][,release=%d.%d]
Definiert SMBIOS-Felder vom Typ 0.
-smbios type=1[,manufacturer=str][,product=str][,version=str] \
[,serial=str][,uuid=uuid][,sku=str][,family=str]
Definiert SMBIOS-Felder vom Typ 1.
-smbios file=binary
Lädt ein SMBIOS-Eintrag aus einer Binäry-Datei.
RAM
Die Größe des Arbeitsspeichers (Random Access Memory) definiert die Option -m gefolgt von einer Zahl. Dabei gibt die Zahl die Größe des Arbeitsspeichers in MByte an. Der Defaultwert ist 128. Optional kann mit M oder G die Größe in MByte bzw. GByte angegeben werden. QEMU unterstützt bis 2047 MByte. Bei älteren Betriebssystemen ist dieser Wert zu reduzieren. Neuere Systeme verlangen meist mehr Arbeitsspeicher. Hier ein Beispiel mit 16 MByte RAM:
Host ~$ qemu Platte.img -m 16
Im folgenden Beispiel wird dem Gast-System ein GByte RAM zur Verfügung gestellt.
Host ~$ qemu Platte.img -m 1G
Wird unter Linux als Host-System dem Gast-System ein großer Arbeitsspeicher zugeteilt, kann es Probleme bei zu geringem Shared Memory geben. QEMU beschwert sich dann über unzureichenden Platz in /dev/shm. Besser ist es dieses Dateisystem zu erweitern. Für eine dauerhafte Konfiguration ist die Datei /etc/default/tmpfs (Ubuntu) anzupassen.
Host ~# umount /dev/shm
Host ~# mount -t tmpfs -o remount,size=144m none /dev/shm
Das Anpassen des Arbeitsspeichers zur Laufzeit ist für Linux als Gast-System mit dem Memory Ballooning möglich (siehe Abschnitt Paravirtualisierte Gerätetreiber).
Informationen über die Speicherverwaltung erhält man im QEMU-Monitor. Der Befehl info mem zeigt das aktive, virtuelle Speicher-Mapping an. Der Befehl info tlb listet das Mapping von virtuellen zu physischen Speicher auf.
ACPI
Das Advanced Configuration and Power Interface (ACPI) ist ein offener Industriestandard für die Energieverwaltung in Computern. Die Kontrolle über das Energiemanagement liegt dabei komplett beim Betriebssystem. ACPI ist in QEMU voreingestellt. Sollte es Probleme mit dem Gast-Betriebssystem geben, deaktiviert man ACPI mit der Option -no-acpi. Alle Windows-Versionen ab 2000 installieren unterschiedliche Kernelversionen in Abhängigkeit davon, ob ACPI verfügbar ist. Deshalb darf ACPI nicht nachträglich deaktiviert werden, wenn es bei der Installation aktiviert war.
Host ~$ qemu Platte.img -no-acpi
Eine spezielle ACPI-Konfiguration ermöglicht die Option -acpitable. Die ACPI-Tabelle wird dabei mit den vorgegebenen Header-Feldern und Inhalten aus den Dateien aufgefüllt.
-acpitable [sig=str][,rev=n][,oem_id=str] \
[,oem_table_id=str][,oem_rev=n] [,asl_compiler_id=str] \
[,asl_compiler_rev=n][,data=file1[:file2]…]
System-Uhr
Die System-Uhr (Real Time Clock) wird mit der Option -rtc definiert. Hier die Syntax.
-rtc [base=utc|localtime|date][,clock=host|vm][,driftfix=none|slew]
Für die Konfiguration der System-Uhr gilt per Default die Koordinierte Weltzeit (UTC). Einige Betriebssysteme, wie DOS- und Microsoft Windows-Versionen, setzen die lokale Zeit als Einstellung für die Systemzeit voraus. In Mitteleuropa würde dies eine Abweichung von einer Stunde im Winter (UTC+1 entspricht der MEZ) und zwei Stunden im Sommer (UTC+2 entspricht der MESZ) ergeben. Die Einstellung der lokalen Zeit ermöglicht die Option -rtc base=localtime. In älteren QEMU-Versionen wurde die lokale Zeit mit der Option -localtime vorgegeben.
Host ~$ qemu Platte.img -rtc base=localtime
Die Option -rtc base=date stellt die System-Uhr beim Start der virtuellen Maschine. In älteren QEMU-Versionen wurde die Startzeit mit der Option -startdate vorgegeben. Mögliche Werte sind 2008-04-17T16:01:21 oder 2008-04-17. Nachfolgend wird die Uhr auf den 31.12.1999 gesetzt.
Host ~$ qemu Platte.img -rtc base=1999-12-31
Per Default wird die Systemuhr der Instanz nach der Systemuhr des Host-Systems gestellt. Mit der Option clock=vm läuft die Systemuhr der Instanz isoliert vom Host.
Host ~$ qemu Platte.img -rtc base=utc,clock=vm
Bei Problemen mit der Zeit-Drift bei Microsoft Windows mit ACPI HAL ist die Option driftfix=slew anzuwenden (nur bei x86-Architekturen). Dabei wird ermittelt wie viele Timer-Interrupt nicht vom Windows-Gast-System verarbeitet werden und es wird versucht diese nochmals anzuwenden. In älteren QEMU-Versionen wurde dafür die Option -rtc-td-hack angewendet.
Host ~$ qemu Platte.img -rtc base=localtime,driftfix=slew
Im BIOS bei Mainboards, die für Mehrkern-Prozessoren geeignet sind, wird oft der High Precision Event Timer (HPET) implementiert. Dieser sehr präzise Zeitgeber löst Interrupts mit einer sehr hohen zeitlichen Auflösung (Quantelung) aus. Vor allem Multimedia-Programme profitieren von HPET. Neue Betriebssysteme unterstützen den High Precision Event Timer. Im QEMU-Monitor zeigt der Befehl info hpet die Verwendung von HPET an.
(qemu) info hpet
HPET is enabled by QEMU
Mit der Option -no-hpet wird die Unterstützung für HPET deaktiviert.
Host ~$ qemu Platte.img -no-hpet
(qemu) info hpet
HPET is disabled by QEMU
USB
Der Universal Serial Bus (USB) ist ein Bussystem zur Verbindung eines Computers mit Zusatzgeräten. Mit USB ausgestattete Geräte können im laufenden Betrieb miteinander verbunden werden (Hot-Plugging). Die angeschlossenen Geräte und deren Eigenschaften werden automatisch erkannt. Aktiviert wird die USB-Emulation mit der Option -usb. Emuliert wird ein PCI UHCI USB-Controller. USB-Devices werden mit der Option -usbdevice device konfiguriert. Verfügt das Gast-System über USB-Unterstützung, kann auf das USB-Device zugegriffen werden. Mit dem USB-Device tablet wird der Maus-Zeiger sowohl im Gast- als auch im Host-System genutzt. Verlässt der Maus-Zeiger das Fenster der Instanz, wird automatisch auf den Zeiger des Host-Systems umgeschaltet. Man verlässt damit dieses Fenster, ohne die Tastenkombination [Strg]+[Alt] eingeben zu müssen. Diese Option überschreibt die PS/2-Maus-Emulation.
Host ~$ qemu Platte.img -usb -usbdevice tablet
Im QEMU-Monitor zeigt der Befehl info usb dieses USB-Device an.
(qemu) info usb
Device 0.2, Speed 12 Mb/s, Product USB Tablet
Bei älteren Betriebssystemen, zum Beispiel Microsoft Windows 98, wird zwar ein neuer Treiber für das USB-Device Tablet von der Installations-CD installiert, aber die rechte Maus-Taste funktioniert nicht. Es ist das virtuelle USB-Device Mouse hinzuzufügen.
(qemu) usb_add mouse
Zusätzlich zu den Möglichkeiten der Option -usbdevice tablet wird der Druck auf das Zeigegerät ausgewertet, wenn stattdessen die Option -usbdevice wacom-tablet verwendet wird. Dabei wird ein virtuelles Wacom-PenPartner-Tablet emuliert. Voraussetzung dafür ist die TSLIB-Bibliothek.
Host ~$ qemu Platte.img -usbdevice wacom-tablet
Einen virtuellen USB-Memory-Stick bindet man mit der Option -usbdevice disk:file ein. file ist ein Image einer formatierten virtuellen Festplatte. Hier ein Beispiel mit einem Image (usb-stick.img) als virtuellen USB-Memory-Stick.
Host ~$ qemu Platte.img -usbdevice disk:usb-stick.img
Im QEMU-Monitor kontrolliert man mit dem Befehl info usb, ob das Device hinzugefügt wurde.
(qemu) info usb
Device 0.2, Speed 12 Mb/s, Product USB MSD (usb-stick.img)
Entfernt wird dieses USB-Device mit dem Befehl usb_del device, wobei in diesem Beispiel für device die Zahlenkombination 0.2 steht. Zuvor ist das USB-Device im Gast-System abzumelden.
(qemu) usb_del 0.2
Mit folgender Option wird ein USB-Seriell-Konverter emuliert.
-usbdevice serial:[vendorid=vendor_id][,product_id=product_id]:dev
Die Default-Werte für die Vendor- und Produkt-ID sind 0403 und 6001. Es wird ein FTDI-FT232BM-Chip emuliert und mit dem Host-Device dev verbunden. Die verfügbaren Character-Devices entsprechen denen der Option -serial. Im folgenden Beispiel wird die Ausgabe in die Datei /tmp/my.log umgeleitet.
Host ~$ qemu Platte-01.img -usbdevice serial::file:/tmp/my.log
Im QEMU-Manager gibt der Befehl info usb folgende Informationen aus.
(qemu) info usb
Device 0.2, Speed 12 Mb/s, Product QEMU USB Serial(file:/tmp/my.log)
Mit der Option -usbdevice bt[:hci-type] wird ein Bluetooth-Dongle emuliert. Die möglichen Werte für hci-type werden im Abschnitt Bluetooth beschrieben.
Host ~$ qemu Platte.img -usbdevice bt
Im QEMU-Manager gibt der Befehl info usb folgende Informationen aus.
(qemu) info usb
Device 0.2, Speed 480 Mb/s, Product QEMU BT Dongle
Mit der Option -usbdevice net:options lässt sich ein USB-Netzwerk-Adapter emulieren, der die CDC- und RNDIS-Protokolle unterstützt. Für options lassen sich die Parameter der Option -net nic anwenden. Zur Zeit kann diese Option nicht zusammen mit PCI-Netzwerk-Karten verwendet werden. Zum Beispiel wird der User-Mode Network Stack mit folgenden Optionen definiert.
Host ~$ qemu Platte.img -net user,vlan=0 -usbdevice net:vlan=0
Im QEMU-Manager gibt der Befehl info usb folgende Informationen aus.
(qemu) info usb
Device 0.2, Speed 12 Mb/s, Product QEMU USB Network Interface
Der direkte Zugriff auf ein USB-Device des Host-Systems befindet sich noch im experimentellen Stadium und bremst QEMU aus. Unter Linux als Host-System listet der Befehl lsusb die verfügbaren USB-Devices auf.
Host ~$ lsusb
Im QEMU-Monitor ist mit dem Befehl info usbhost die Verfügbarkeit des entsprechenden Host-Device zu überprüfen.
(qemu) info usbhost
Device 0.1, speed 480 Mb/s
Class 00: USB device 090c:100, USB DISK
In diesem Beispiel soll auf das Host-Device mit der Vender-ID 090c und der Produkt-ID 1000 zugegriffen werden. Dies ermöglicht im QEMU-Monitor der Befehl usb_add.
(qemu) usb_add host:090c:1000
Falls die Zugriffsrechte im Host-System einen Zugriff verbieten, erscheint eine Fehlermeldung.
Warning: could not add USB device host:090c:1000
/dev/bus/usb/000/001: Permission denied
Die Zugriffsrechte können unter Linux wie folgt angepasst werden.
Host ~$ sudo chmod -R 777 /dev/bus/usb
Host ~$ sudo chmod -R 777 /proc/bus/usb
Jetzt kann im QEMU-Monitor der Befehl usb_add erfolgreich angewendet werden. Den Zugriff auf das USB-Device des Host-Systems kann auch die Option -usbdevice ermöglichen.
Host ~$ qemu Platte.img -usbdevice host:090c:1000
Zum Entfernen des USB-Device dient im QEMU-Monitor der Befehl usb_del. Zuvor ist das USB-Device im Gast-System abzumelden.
(qemu) usb_del host:090c:1000
PCI
PCI (Peripheral Component Interconnect) ist ein Bus-Standard zur Verbindung von Peripheriegeräten mit den Prozessoren. Im Unterschied zu dem ISA-Bus unterstützt PCI die dynamische Konfiguration eines Gerätes ohne Eingriff des Benutzers. Fast alle ab 1994 gebauten IBM-kompatiblen PCs verfügen über zwei bis sieben Steckplätzen für PCI-Karten. Auch neuere Computer von Apple und Workstations von Sun besitzen einen PCI-Bus. In die PCI-Steckplätze können Karten diverser Hersteller eingesetzt werden, zum Beispiel Netzwerkkarten, Modems, Soundkarten und (ältere oder Zweit-) Grafikkarten. Im QEMU-Monitor zeigt der Befehl info pci die angeschlossenen virtuellen PCI-Devices an.
(qemu) info pci
Im QEMU-Monitor fügt der Befehl pci_add Hotplug-Geräte dem gestarteten Gast-System (Linux) hinzu. Dazu müssen im Gast-System die Kernel-Module acpiphp und pci_hotplug geladen sein. In diesem Beispiel wird eine virtuelle PCI-Netzwerkkarte (nic) vom Typ e1000 am Slot 0 angeschlossen.
(qemu) pci_add auto nic model=e1000,id=nic1
OK domain 0, bus 0, slot 4, function 0
Der folgende Befehl fügt die Datei daten.img als eine virtuelle SCSI-Festplatte hinzu.
(qemu) pci_add auto storage file=daten.img,if=scsi
OK domain 0, bus 0, slot 5, function 0
Die Syntax des Befehls pci_add ist:
(qemu) pci_add auto|[[<domain>:]<bus>:]<slot> nic|storage \\\ [[vlan=n][,macaddr=addr][,model=type]] \\\ [file=file][,if=type][,bus=nr]
Angeschlossene virtuelle PCI-Geräte werden mit dem Befehl pci_del entfernt. Es ist dazu zumindest die Slot-Nummer anzugeben. Mit diesem Befehl wird das PCI-Device im Slot 4 entfernt.
(qemu) pci_del 4
Die Syntax des Befehls pci_del ist:
(qemu) **pci_del [[<domain>:]<bus>:]<slot>**
Noch in der Entwicklung ist der Zugriff auf PCI-Devices des Host-Systems. Es gibt noch zahlreiche Einschränkungen.
- m Host-System wird ein Linux-Kernel ab Version 2.6.28 benötigt.
- Im Host-System darf kein Treiber auf das PCI-Device zugreifen.
- Das PCI-Device darf sich keinen IRQ mit einem anderen Device teilen.
- Das Kernel-Modul raw_io ist notwendig.
Die Option -pcidevice host=busaddresse bindet ein PCI-Device des Host-Systems ein. Die möglichen PCI-Busadressen listet der Befehl lspci auf.
Host ~$ lspci
Folgender Befehl stellt das Gerät mit der PCI-Busadresse 06:00.0 dem Gast zur Verfügung.
06:00.0 …Host ~$ qemu Platte.img -pcidevice host=06:00.0
Die Syntax der Option -pcidevice ist:
-pcidevice host=bus:dev.func[,dma=none][,name=string]
Wird dma=none vorgegeben, erfolgt keine DMA-Translation. Ansonsten wird der Default-Wert IOMMU angewendet. Der Parameter string wird für die Log-Ausgabe verwendet.
Bildschirmausgabe, Tastatur und Maus
Der Typ der Grafikkarte wird ab QEMU 0.10.1 mit der Option -vga type definiert. Es stehen folgende Typen zur Auswahl:
''std''
Simuliert eine Standard-VGA-Karte mit VESA-Bochs-Extensions. Unterstützt das Gast-System die VESA 2.0 VBE-Extensions, kann diese Option für höhere Auflösungen (>= 1280x1024x16) gewählt werden.
''cirrus''
Es wird eine CL-GD5446-PCI-VGA-Karte emuliert. Diese Option ist als Default voreingestellt. Alle Versionen ab Microsoft Windows 95 erkennen diese Grafik-Karte. Für optimale Performance ist im Host- und Gast-System jeweils eine Farbtiefe von 16 Bit einzustellen.
''vmware''
Simuliert einen VMware SVGA-II kompatiblen Adapter. Diese Option kann für Gast-Systeme mit installierten Grafik-Treibern der VMware-Tools verwendet werden.
''qxl''
Simuliert ein QXL-Device. Diese paravirtualisierte Grafikkarte ist VGA-kompatibel mit VESA 2.0 VBE-Support. Dieses Device ist zusammen mit der Option -spice anzuwenden (siehe http://qemu-buch.de/d/Netzwerkoptionen/_Netzwerkdienste#SPICE). Zu empfehlen ist die Installation eines QXL-Treibers im Gast-System.
''xenfb''
Simuliert einen Xen-Frame-Buffer. Bei einem Linux-Gast-System wird das entsprechende Modul mit dem Befehl modprobe xenfb geladen.
''none''
Deaktiviert die VGA-Karte.
Das folgende Beispiel aktiviert die Standard-VGA-Karte mit VESA 2.0 BIOS Extensions.
Host ~$ qemu Platte.img -vga std
Wohin die Bildschirmausgabe geleitet werden soll, definiert die Option -display (ab QEMU 0.15). In der Default-Einstellung erfolgt die VGA-Ausgabe per Simple DirectMedia Layer (SDL). Diese beiden Befehle haben daher die gleiche Wirkung.
Host ~$ qemu Platte.img
Host ~$ qemu Platte.img -display sdl
Bei älteren QEMU-Versionen aktiviert die Option -sdl den Simple DirectMedia Layer. Der Option -display sdl können weitere Parameter angehangen werden. frame=off deaktiviert den Fenster-Rahmen der Instanz und stellt damit den vollen Bildschirmbereich für das Gast-System zur Verfügung. Bei alt_grab=on wird die Tastenkombination [Strg]+[Alt]+[Shift] statt [Strg]+[Alt] zur Freigabe der Maus verwendet. Bei ctrl_grab=on wird die rechte [Strg]-Taste statt [Strg]+[Alt] zur Freigabe der Maus verwendet. Bei älteren QEMU-Versionen sind dazu die Optionen -no-frame, -alt-grab und -ctrl-grab anzuwenden.
Host ~$ qemu Platte.img -display sdl,frame=off,alt_grab=on,ctrl_grab=on
window_close=off deaktiviert den Button zum Schließen des Fensters der Instanz. Bei älteren QEMU-Versionen ist dazu die Option -no-quit anzuwenden.
Host ~$ qemu Platte.img -display sdl,window_close=off
Erfolgt die Bildschirmausgabe des Gast-System im Textmodus, kann die Option -display curses angewendet werden. Statt der VGA-Ausgabe mit dem DirectMedia Layer (SDL) erfolgt die VGA-Ausgabe über das Curses/Ncurses-Interface. Im grafischen Modus erfolgt bei dieser Option keine Ausgabe. Bei älteren QEMU-Versionen ist dafür die Option -curses anzuwenden.
Host ~$ qemu Platte.img -curses
Die Option -display none deaktiviert die grafische Ausgabe. Für das Gast-System wird aber weiterhin eine Grafik-Karte emuliert. Im Unterschied zur älteren Option -nographic werden dabei die serielle und parallele Ein- und Ausgabe nicht umgeleitet. Was für einen Arbeitsplatzcomputer wenig sinnvoll erscheint, kann bei Server-Anwendungen und für Kernel-Entwickler interessant sein. Die fehlende Interaktion der grafischen Ausgabe kann durch eine andere Kommunikation ersetzt werden. Bei ersten Tests ist die Option -snapshot empfehlenswert. Ist keine Kommunikation mit dem Gast-System möglich, kann die Instanz mit [Strg]+[A] und [X] beendet werden, ohne das Gast-System zu schädigen.
Host ~$ qemu Platte.img -snapshot -display none
Eine Instanz im Vollbild-Modus startet die Option -full-screen. Zur Umschaltung zwischen Vollbild- und Fenster-Modus dient die Tastenkombination [Strg]+[Alt]+[F].
Host ~$ qemu Platte.img -full-screen
Normalerweise muss das Tastaturlayout nicht vorgegeben werden. Die Option -k wird nur benötigt, wenn es Probleme bei der Erkennung des PC-Tastaturlayouts gibt. Die verfügbaren Layouts sind ar, de-ch, es, fo. fr-ca, hu, ja, mk, no, pt-br, sv, da, en-gb, et, fr, fr-ch, is, lt, nl, pl, ru, th, de, en-us, fi, fr-be, hr, it, lv, nl-be, pt, sl, tr. Default ist en-us.
Host ~$ qemu Platte.img -vnc 1 -k de
Per Default wird für die x86-Architektur eine PS/2-Tastatur emuliert. Mit der Option -usbdevice keyboard wird eine USB-Tastatur emuliert.
Host ~$ qemu Platte.img -usb -usbdevice keyboard
Per Default wird für die x86-Architektur eine PS/2-Maus emuliert. Im QEMU-Monitor informiert der Befehl info mice über die Mäuse.
(qemu) info mice
* Mouse #0: QEMU PS/2 Mouse
Soll eine USB-Maus emuliert werden, ist die Option -usbdevice mouse anzuwenden.
Host ~$ qemu Platte.img -usb -usbdevice keyboard -usbdevice mouse
Im QEMU-Monitor listet der Befehl info usb die USB-Devices auf.
(qemu) info usb
Device 0.1, Speed 12 Mb/s, Product QEMU USB Keyboard Device 0.0, Speed 12 Mb/s, Product QEMU USB Hub Device 0.0, Speed 12 Mb/s, Product QEMU USB Mouse
Mit der Option -chardev msmouse,id=id werden für das Gast-System die Events einer Microsoft-Maus emuliert.
Host ~$ qemu Platte.img -chardev msmouse,id=Speedy-Gonzalez
Im QEMU-Monitor informiert der Befehl info mice über die Mäuse.
(qemu) info mice
Mouse #0: QEMU Microsoft Mouse * Mouse #1: QEMU PS/2 Mouse
Sound
Zur Aktivierung der Emulation von einer oder mehreren Soundkarten beziehungsweise dem PC-Lautsprecher dient die Option -soundhw. Die Emulationen der Soundkarten Adlib, Gus und cs4231a stehen nur zur Verfügung, wenn beim Kompilieren die Option audio-card-list mit den gewünschten Soundkarten angegeben wurde. Folgender Befehl listet die verfügbare Sound-Hardware auf:
Host ~$ qemu -soundhw ?
pcspk PC speaker sb16 Creative Sound Blaster 16 cs4231a CS4231A adlib Yamaha YM3812 (OPL2) gus Gravis Ultrasound GF1 ac97 Intel 82801AA AC97 Audio es1370 ENSONIQ AudioPCI ES1370
Es können mehrere Soundkarten getrennt durch Kommas angegeben werden.
Host ~$ qemu Platte.img -soundhw pcspk,sb16
Bei der Emulation der Soundkarte Intel 82801AA AC97 Audio unter Linux als Gast-System erfordert das Kernel-Modul i810_audio die folgende Option: modprobe i810_audio clocking=48000. Der Parameter all aktiviert alle unterstützten Soundkarten.
Host ~$ qemu Platte.img -soundhw all
Informationen zum Audio-Subsystem zeigt die Option -audio-help.
Host ~$ qemu -audio-help
Mit Befehlen des QEMU-Monitors lassen sich die Sound-Ausgaben des Gast-Systems mitschneiden. Der folgende Befehl startet die Aufnahme und schreibt sie in die angegebene Datei:
(qemu) wavcapture mitschnitt01.wav
Weitere Parameter steuern die Samplerate, Samplebits und die Anzahl der Kanäle. Informationen zu aktiven Mitschnitten zeigt der Befehl info capture.
(qemu) info capture
Die erste Spalte zeigt die Indexnummer. Der erste aktive Mitschnitt erhält die Nummer 0. Um die Aufnahme zu beenden, wird der Befehl stopcapture gefolgt von der Indexnummer eingegeben.
(qemu) stopcapture 0
Wurde QEMU mit der Option –audio-card-list=adlib,gus,cs4231a kompiliert, werden Sound-Karten Yamaha YM3812, Gravis Ultrasound GF1 und Crystal CS4231A emuliert. Für die Emulation der Soundkarte Gravis Ultrasound (GUS) wird GUSemu (http://www.deinmeister.de/gusemu/) verwendet. Per Default nutzt GUS den IRQ7. Dieser IRQ wird auch von parallelen Ports beansprucht. Zur Vermeidung von Konflikten deaktiviert man die parallelen Ports.
Host ~$ qemu Platte.img -soundhw gus -parallel none
Alternativ stellt man den GUS-IRQ um.
Host ~$ qemu Platte.img -device gus,irq=5
Netzwerkkarten
Zu emulierende Netzwerkkarten (Network Interface Card - NIC) werden mit der Option -net nic konfiguriert. Die genaue Beschreibung erfolgt im Abschnitt Netzwerkoptionen.
Die Option -device
Eine flexiblere Konfiguration von Hardware-Komponenten ermöglicht die Option -device. Die Syntax ist:
-device driver[,prop[=value][,…]]
Fügt das Device driver hinzu.
''prop=value''
Definiert die Eigenschaften des Devices.
Eine Liste der möglichen Devices wird durch -device ? ausgegeben. Dieser Befehl listet die Devices für die x86-Architektur (64-Bit) auf.
Host ~$ qemu -device ?
name "AC97", bus PCI, desc "Intel 82801AA AC97 Audio" name "ccid-card-passthru", bus ccid-bus, desc "passthrough smartcard" name "cirrus-vga", bus PCI, desc "Cirrus CLGD 54xx VGA" name "cs4231a", bus ISA, desc "Crystal Semiconductor CS4231A" name "e1000", bus PCI, desc "Intel Gigabit Ethernet" name "ES1370", bus PCI, desc "ENSONIQ AudioPCI ES1370" name "gus", bus ISA, desc "Gravis Ultrasound GF1" name "hda-duplex", bus HDA, desc "HDA Audio Codec, duplex" name "hda-output", bus HDA, desc "HDA Audio Codec, output-only" name "i6300esb", bus PCI name "i82550", bus PCI, desc "Intel i82550 Ethernet" name "i82551", bus PCI, desc "Intel i82551 Ethernet" name "i82557a", bus PCI, desc "Intel i82557A Ethernet" name "i82557b", bus PCI, desc "Intel i82557B Ethernet" name "i82557c", bus PCI, desc "Intel i82557C Ethernet" name "i82558a", bus PCI, desc "Intel i82558A Ethernet" name "i82558b", bus PCI, desc "Intel i82558B Ethernet" name "i82559a", bus PCI, desc "Intel i82559A Ethernet" name "i82559b", bus PCI, desc "Intel i82559B Ethernet" name "i82559c", bus PCI, desc "Intel i82559C Ethernet" name "i82559er", bus PCI, desc "Intel i82559ER Ethernet" name "i82562", bus PCI, desc "Intel i82562 Ethernet" name "i82801", bus PCI, desc "Intel i82801 Ethernet" name "ib700", bus ISA name "ich9-ahci", bus PCI, alias "ahci" name "ich9-usb-ehci1", bus PCI name "ich9-usb-uhci1", bus PCI name "ich9-usb-uhci2", bus PCI name "ich9-usb-uhci3", bus PCI name "ide-cd", bus IDE, desc "virtual IDE CD-ROM" name "ide-drive", bus IDE, desc "virtual IDE disk or CD-ROM (legacy)" name "ide-hd", bus IDE, desc "virtual IDE disk" name "intel-hda", bus PCI, desc "Intel HD Audio Controller" name "ioh3420", bus PCI, desc "Intel IOH device id 3420 PCIE Root Port" name "isa-applesmc", bus ISA name "isa-debugcon", bus ISA name "isa-ide", bus ISA name "isa-parallel", bus ISA name "isa-serial", bus ISA name "isa-vga", bus ISA name "ivshmem", bus PCI name "lsi53c895a", bus PCI, alias "lsi" name "ne2k_isa", bus ISA name "ne2k_pci", bus PCI name "pci-ohci", bus PCI, desc "Apple USB Controller" name "pcnet", bus PCI name "piix3-usb-uhci", bus PCI name "piix4-usb-uhci", bus PCI name "qxl", bus PCI, desc "Spice QXL GPU (secondary)" name "qxl-vga", bus PCI, desc "Spice QXL GPU (primary, vga compatible)" name "rtl8139", bus PCI name "sb16", bus ISA, desc "Creative Sound Blaster 16" name "scsi-cd", bus SCSI, desc "virtual SCSI CD-ROM" name "scsi-disk", bus SCSI, desc "virtual SCSI disk or CD-ROM (legacy)" name "scsi-generic", bus SCSI, desc "pass through generic scsi device (/dev/sg*)" name "scsi-hd", bus SCSI, desc "virtual SCSI disk" name "sga", bus ISA, desc "Serial Graphics Adapter" name "smbus-eeprom", bus I2C name "SUNW,fdtwo", bus System name "sysbus-fdc", bus System name "sysbus-ohci", bus System, desc "OHCI USB Controller" name "testdev", bus ISA name "usb-braille", bus USB name "usb-bt-dongle", bus USB name "usb-ccid", bus USB, desc "CCID Rev 1.1 smartcard reader" name "usb-ehci", bus PCI name "usb-host", bus USB name "usb-hub", bus USB name "usb-kbd", bus USB name "usb-mouse", bus USB name "usb-net", bus USB name "usb-redir", bus USB name "usb-serial", bus USB name "usb-storage", bus USB name "usb-tablet", bus USB name "usb-wacom-tablet", bus USB, desc "QEMU PenPartner Tablet" name "VGA", bus PCI name "virtconsole", bus virtio-serial-bus name "virtio-9p-pci", bus PCI name "virtio-balloon-pci", bus PCI, alias "virtio-balloon" name "virtio-blk-pci", bus PCI, alias "virtio-blk" name "virtio-net-pci", bus PCI, alias "virtio-net" name "virtio-serial-pci", bus PCI, alias "virtio-serial" name "virtserialport", bus virtio-serial-bus name "vmware-svga", bus PCI name "vt82c686b-usb-uhci", bus PCI name "x3130-upstream", bus PCI, desc "TI X3130 Upstream Port of PCI Express Switch" name "xen-platform", bus PCI, desc "XEN platform pci device" name "xio3130-downstream", bus PCI, desc "TI X3130 Downstream Port of PCI Express Switch"
Eine Standard-VGA-Karte wird zum Beispiel mit -device VGA emuliert. Dies entspricht der Option -vga std.
Host ~$ qemu Platte.img -device VGA
Mit -device driver,? erhält man eine Liste möglicher Eigenschaften für das angegebene Device.
Host ~$ qemu Platte.img -device VGA,?
VGA.bios-offset=hex32
VGA.bios-size=hex32
Im QEMU-Monitor fügt der Befehl device_add ein Device zur Laufzeit der virtuellen Maschine hinzu. Die Optionen entsprechen denen von -device. Es sollten nur Hot-Plug-Geräte im laufenden Betrieb hinzufügt werden, sonst droht ein Absturz des Gast-Systems. Im folgenden Beispiel wird das Image daten.img als USB-Storage hinzugefügt. Dazu ist USB zu aktivieren.
Host ~$ qemu Platte.img -usb
Im QEMU-Monitor werden folgende Befehle aufgerufen:
(qemu) drive_add 0 id=mein_usb_drive,if=none,file=daten.img
(qemu) device_add usb-storage,id=mein_usb_storage,drive=mein_usb_drive
Der Befehl info usb zeigt dieses USB-Device an.
(qemu) info usb
Device 0.2, Speed 12 Mb/s, Product QEMU USB MSD
Entfernt wird dieses USB-Device mit dem Befehl device_del.
(qemu) device_del mein_usb_storage
Character Devices
Character-Device (zeichenorientierte Geräte) übertragen nur ein Zeichen beziehungsweise ein Byte zur selben Zeit (serielle Datenübertragung). Die Daten werden meist ungepuffert, also sofort übertragen. Dies unterscheidet sie von den blockorientierten Geräten. Diese übertragen die Daten in Datenblöcken. Mit der Option -chardev werden Character-Devices definiert. Je nach Art des Devices sind bestimmte Optionen anzuwenden. Jedem Device muss mit id eine Zeichenkette zugeordnet werden. Diese dient zur eindeutigen Identifizierung. Die jeweilige Syntax ist:
-chardev null,id=id[,mux=on|off]
-chardev socket,id=id[,host=host],port=host[,to=to][,ipv4][,ipv6][,nodelay]
[,server][,nowait][,telnet][,mux=on|off] (tcp)
-chardev socket,id=id,path=path[,server][,nowait][,telnet],[mux=on|off] (unix)
-chardev udp,id=id[,host=host],port=port[,localaddr=localaddr]
[,localport=localport][,ipv4][,ipv6][,mux=on|off]
-chardev msmouse,id=id[,mux=on|off]
-chardev vc,id=id[[,width=width][,height=height]][[,cols=cols][,rows=rows]]
[,mux=on|off]
-chardev file,id=id,path=path[,mux=on|off]
-chardev pipe,id=id,path=path[,mux=on|off]
-chardev pty,id=id[,mux=on|off]
-chardev stdio,id=id[,mux=on|off][,signal=on|off]
-chardev braille,id=id[,mux=on|off]
-chardev tty,id=id,path=path[,mux=on|off]
-chardev parport,id=id,path=path[,mux=on|off]
-chardev spicevmc,id=id,debug=debug,name=name[,mux=on|off]
Mit dem Device null wird ein leeres Device angelegt. Es sendet keine Daten und verwirft empfangene Daten.
Host ~$ qemu Platte.img -chardev null,id=nichts
Im QEMU-Monitor listet der Befehl info chardev die Character Devices auf.
(qemu) info chardev
nichts: filename=null monitor: filename=vc serial0: filename=vc parallel0: filename=vc
In diesem Beispiel wird mit der Option -device die Hardware usb-mouse mit dem Namen meine_maus definiert (siehe oben). Mit der Option -chardev wird diese Hardware als Character-Device definiert.
Host ~$ qemu Platte.img -usb -device usb-mouse,id=meine_maus -chardev msmouse,id=meine_maus
Im QEMU-Monitor zeigen die Befehle info chardev, info usb und info mice dieses Character-Device.
(qemu) info chardev
meine_maus: filename=msmouse compat_monitor0: filename=stdio serial0: filename=vc parallel0: filename=vc (qemu) info usb Device 0.2, Port 1, Speed 12 Mb/s, Product QEMU USB Mouse (qemu) info mice * Mouse #2: QEMU USB Mouse Mouse #0: QEMU Microsoft Mouse Mouse #1: QEMU PS/2 Mouse
Weitere Möglichkeiten der Option -chardev werden im Anhang aufgelistet.
