QEMU

A HupWiki-ből...

QEMU
[QEMU képernyőkép]
Fejlesztő Fabrice Bellard
OS UNIX szerű FIXME
Kategória Emulátor
Licenc LGPL
Weboldal fabrice.bellard.free.fr/qemu/

Tartalomjegyzék

Általános bemutatás

Figyelem, a dokumentáció még egyáltalán nem teljes

A Qemu egy nyílt forráskódú processzoremulátor program. Két fő funkciója létezik: komplett architektúra emulálása - ebben az esetben teljes rendszereket telepíthetünk/futtathatunk -, illetve Linux rendszereken futtatási környezet emulálása.

A projekt honlapja: http://fabrice.bellard.free.fr/qemu/

Az alábbi architektúrákat emulálhatjuk:

  • PC (x86 vagy x86_64 processzor)
  • PREP (PowerPC processzor)
  • G3 BW PowerMac (PowerPC processzor)
  • Mac99 PowerMac (PowerPC processzor, fejlesztés alatt)
  • Sun4m (32-bites Sparc processzor)
  • Sun4u (64-bites Sparc processzor, fejlesztés alatt)
  • Malta board (32-bites MIPS processzor, fejlesztés alatt)

Kibővíteni: nem pc architektúrák emulálása, valamit linux specifikus dolgok (azaz nem teljes rendszer futtatása)


Qemu beüzemelése

Forráskód beszerzése és fordítás

Legfrisebb verzió: 0.8.2 - 2006. július 22.

Látogassunk el a Qemu letöltési oldalára és töltsük le a legfrissebb tömörített forrás. Csomagoljuk ki egy könyvtárba és lépjünk bele

gunzip qemu-0.8.2.tar.gz
tar xvf qemu-0.8.2.tar
cd qemu-0.8.2/

Futtasuk le a configure scriptet

./configure

Ha gond nélkül lefut, akkor make, majd make install (ez utóbbi természetesen már root jogosultágokat igényel). A gcc-4.0 jelenleg nem támogatott, fordítás közben elszáll, mert nem tud értelmezni bizonyos programrészleteket. Ebben az esetben fordítsuk másik gcc-vel:

./configure --cc=/usr/bin/gcc-3.4

Hibalehetőség:

A configure sdl-t hiányol és felajánlja a --disable-gfx-check opciót, mely nem ellenőrzi a jelenlétét. Fontos! ha a --disable-gfx-check flaget használjuk a konfiguráláskor, akkor nem lesz grafikus emuláció. Megoldás: telepíteni a libsdl1.2-gfx és libsdl1.2-gfx-dev (Ubuntu: libsdl-gfx1.2-dev) csomagokat (ez utóbbi telepítése nálam lecserélte az XFree86-ot Xorg-ra). Ha feltettük akkor újra futtasuk a ./configure parancsot és figyeljük az SDL-re vonatkozó sort:

sdl = YES

Ha 4-es gcc van a gépeden, akkor le kell tölteni egy korábbi változatot a http://gcc.gnu.org/mirrors.html oldalról. Ha pl. a 3.3.6-os gcc-t töltötted le, akkor mindenképp így konfiguráld:

./configure --prefix=/opt/gcc33 --program-suffix=-3.3

, különben megsérülhet a rendszered! Lefordítani ekkor pl. így tudod a qemut:

./configure --prefix=/usr/local --cc=/opt/gcc33/bin/gcc-3.3 --enable-adlib --target-list="i386-user arm-user armeb-user sparc-user ppc-user i386-softmmu ppc-softmmu sparc-softmmu x86_64-softmmu mips-softmmu"

Csomagból

Frugalware alatt:

pacman -S qemu

ha qemu acceleratort is akarsz, akkor

echo USE_KQEMU=1 >>/etc/makepkg.conf
repoman merge qemu

Debian

apt-get install qemu


Minden esetben létrejön több futtatható bináris, melyeket az alábbi módon lehet csoportosítani:

  • qemu, qemu-system-*: teljes rendszer emuláció
  • qemu-i386, qemu-ppc, qemu-sparc és qemu-arm: felhasználói módú emuláció FIXME
  • qemu-img: képfájl generáló segédprogram

Qemu Accelerator

Qemuhoz létezik egy gyorsító funkciót ellátó kernelmodul, nevezetesen a kqemu. A neve ne tévesszen meg senkit, ez nem azonos a Kde-s Qemu frontenddel, melynek szintén kqemu a neve. A Qemuba bele van építve egy dinamikus fordító, mely a különböző processzorok közötti utasításokat fordítja át. Ez szükségtelen abban az esetben, ha az emulált rendszer és a valós rendszer ugyanahoz a családhoz tartozik (jelen esetben x86), így a modul segítségével ki lehet hagyni a fordítást, mely gyorsulást eredményez futtatás közben.

Modul üzembehelyezése:

Látogassunk el a Qemu letöltési oldalára és töltsük le a legfrissebb QEMU Accelerator Modult, majd csomagoljuk ki és a létrejött kqemu/ könyvtárt másoljuk be a Qemu forrásának könyvtárába. Innentől a fordítás ugyanúgy zajlik, mint az elöbbiekben. A ./configure script futtatása után az alábbi sor jelzi, hogy minden rendben van.

kqemu = yes

Innentől jöhet a szokásos make és make install páros. Ha elkészültünk, akkor próbáljuk meg betölteni az új kernel modult

modprobe kqemu

Ha visszaadja a promptot, akkor győződjünk meg egy

lsmod | grep kqemu

paranccsal, hogy valóban be van-e töltve.

Megj: érdemes beállítani, hogy bootoláskor automatikusan betöltse. Ha nincs betöltve, akkor az alábbi üzenet figyelmeztet:

Could not open '/dev/kqemu' - QEMU acceleration layer not activated

Ha be van töltve a modul, de nem szeretnénk használni, akkor használjuk a -no-kqemu flaget

Hibalehetőség:

Minden rendben felordul és települ, de a modprobe kqemu az alábbi üzenetet adja vissza:

FATAL: Error inserting kqemu (/lib/modules/<kernel verzió>/misc/kqemu.ko): Invalid module format

Azaz nem tudta betölteni a modult, mert ismeretlen a formátuma. Ez jó eséllyel azt jelenti, hogy a kernel és a kqemu nem azonos gcc-vel lett fordítva. Nincs mit tenni, irány a /usr/scr/linux, majd fordítsuk újra a kernelt a jelenlegi gcc-vel és utána a qemut is. Ekkor menni fog, hacsak nem akad más ismeretlen hiba.

Amennyiben a disztibúciód udev -et használ (pl. Ubuntu, Fedora, SuSE), akkor a '/dev/kqemu' (még) nem jön mindig létre automatikusan. Ekkor megkapod a qemu indításakor az alábbi hibaüzenetet, akkor is, ha be van töltve a kqemu modul:

"Could not open '/dev/kqemu' - QEMU acceleration layer not activated"

A következő szkriptet akár a boot folyamathoz is hozzá lehet adni:

 mknod /dev/kqemu c 250 0  # Létrehozza a KQEMU eszközt
 chmod 666 /dev/kqemu      # Minden felhasználó számára hozzáférhetővé teszi

Architektúrák

PC (qemu)

  • i440FX host PCI bridge és PIIX3 PCI az ISA bridge-hez
  • Cirrus CLGD 5446 PCI VGA kártya vagy ál (látszólagos) VGA kártya, Bochs VESA bővítménnyel (hardver szint, beleépítve az összes nem standard móddal)
  • PS/2 egér és billentyűzet
  • 2 PCI IDE csatoló, HDD és CD-ROM támogatással
  • Floppy lemez
  • NE2000 PCI network adapterek
  • Soros portok
  • Soundblaster 16 hangkártya

PC x86_64 (qemu-system-x86_64) FIXME


PPC (qemu-system-ppc)

PowerMac:

  • UniNorth PCI Bridge
  • PCI VGA kompatibilis kártya, VESA Bochs bővítménnyel
  • 2 PMAC IDE csatoló HDD és CD-ROM támogatással
  • NE2000 PCI adapterek
  • Non Volatile RAM
  • VIA-CUDA, ADB billentyűzettel és egérrel

PREP:

  • PCI Bridge
  • PCI VGA kompatibilis kártya, VESA Bochs bővítménnyel
  • 2 IDE csatoló, HDD és CD-ROM támogatással
  • Floppy lemez
  • NE2000 hálózato adapterek
  • Soros port
  • PREP Non Volatile RAM
  • PC kompatibilis billentyűzet és egér

A -M kapcsoló után adható meg, hogy melyik változattal dolgozzon. A lehetőségeket a

qemu-system-ppc -M ?

parancs adja meg.


Sparc 32 (qemu-system-sparc)

  • IOMMU
  • TCX Frame buffer
  • Lance (Am7990) Ethernet
  • Non Volatile RAM M48T08
  • Slave I/O: időzítők, megszakítás vezérlők, Zilog soros portok, billentyűzet és power/reset logikai hálózat
  • ESP SCSI vezérlő, HDD és CD-ROM támogatással
  • Floppy meghajtó

Sparc 64 (qemu-system-sparc64)

  • UltraSparc IIi APB PCI Bridge
  • PCI VGA kompatibilis kártya, VESA Bochs bővítménnyel
  • Non Volatile RAM M48T59
  • PC-kompatibilis soros portok

Hasznos funkciók futtatás közben

Futtatáskor megadható kapcsolók:

  • -hda a merevlemezként kezelni kívánt ezköz (image állomány, vagy /dev/hdx)
  • -cdrom cdromként használni kívánt eszköz (iso állomány, vagy /dev/cdrom -> ekkor a vendégrendszeré lesz az adott cdrom eszköz)
  • -fda floppy egység (szintén lehet képfile vagy /dev/fd0)
  • -boot [a,c,d] bootolandó egység: a - floppy; c - hdd; d - cdrom
  • -m Emulált megmória mennyisége megabájtban (az alapértelmezett a 128Mb) -> Ehhez szükség esetén meg kell növelni az shm méretét a program által javasolt módon
  • -k billentyüzetkiosztás (pld -k hu)
  • -M emulált gép kiválasztása (jelenleg csak standard pc érhető el, lekérdezés: -M ?)
  • -user-net közvetlen hozzáférés a hálókárytához (csak óvatosan!)
  • -enable-audio hangkártya támogatás
  • -localetime segítségével a valós időt fogja mutatni az emulált rendszer (Dos és Win esetében szükséges)
  • -full-screen teljes képernyőben indul a rendszer
  • -smb samba protokoll használata (pld -smb qemu)
  • -no-kqemu ne használja a gyorsító modult

Futtatás közbeni lehetőségek:

  • Alt+Ctrl elengedi az egeret
  • Alt+Ctrl+F átkapcsol a teljes képernyős mód és az ablakban futtatás között.
  • Alt+Ctrl+1,2,3,4 váltás a konzolok között

Az 1-es konzolon fut az emuláció, a 2-es konzolon parancsokat adhatunk mint a stop (hasznos eszköz, mert amíg áll a progra, nem zabálja a processzort), cont, quit... (FIXME: többi parancs) A 3-as konzol valószinűleg egy soros terminált, a 4-es valószínűleg egy párhuzamos terminált emulál. FIXME

Telepítés és futtatás Qemu segítségével

A qemu nem tesz különbséget file és merevlemez között, így bármelyik eszköz megadható célpontként. Ugyanez érvényes a forrásra is, telepíthetünk bootolható CD-ről, valamint iso formátumú image-ből. E két lehetőséget két példán keresztül szeretném bemutatni:

Telepítés merevlemezre (PC)

Tegyük fel, hogy szükségünk van egy rendszerre amit adott esetben bootoláskor is elérhetünk. Vagy tegyük fel, hogy letöltöttünk egy iso formátumú disztribúciót, nem rendelkezünk cdrommal, viszont élesben is ki akarjuk próbálni. A következő példában FreeDOS-t telepítünk cdromról a hdd3-as partícióra.

Helyezzük be a telepítő lemezt a cdromba, valamint győződjünk meg arról, hogy a célpartíció valóban üres Indítsuk el a qemut az alábbi opciókkal:

qemu -boot d -cdrom /dev/cdrw -hda /dev/hdd -k hu

vagy ha nem írtuk ki lemezre, akkor:

qemu -boot d -cdrom /mnt/ahol/van/freedos.iso -hda /dev/hdd -k hu

Ennek hatására elkezd bootolni a cdromról, és célnak a /dev/hdd lesz megjelölve (mindeközben magyar billentyűzetet használ)

A FreeDOS, ha nem talál megfelelő Fat filerendszerű partíciót, futtatja az fdsik nevű programot. Itt megjegyezném, hogy nekem nem sikerült mountolni a fat16 partíciót (FIXME: én vagyok béna?), ezért célszerű a telepítés elött formázni a cél partíciót vfat (Fat32) tipusúra:

mkfs.vfat /dev/hdd3

Ekkor telepítés után egyszerűen mountolhatjuk a partíciót, így a file-ok mozgatása nem okoz nagyobb gondot

mount -t vfat /dev/hdd3 /mnt/dos

(természetesen a /mnt/dos csatolási pontot előzőleg létrehoztuk)

Ha midnen előkészülettel megvagyunk indíthatjuk a telepítést

qemu -boot d -cdrom /dev/cdrw -hda /dev/hdd -k hu

Itt egy kicsit magunkra maradunk, de nem olyan ördöngős a dolog. Meg kell adni a c:\ partíciót, majd telepíteni és a grafikus telepítőben a next gombot nyomogatni. Ha elkészült, akkor próbáljuk ki az újonnan telepített rendszerünket:

qemu -hda /dev/hdd

Akár a grubba is felvehetjük.

Telepítés kép (image)file-ba (PC)

Ha egy rendszert csak ki akarunk próbálni, illetve telepítés elött biztos ami biztos alapon be akarjuk gyakorolni a lépéseket, célszerű image file-ba telepíteni. Ha elég erős a processzorunk (kb <1500Mhz) és/vagy nem szeretünk állandóan rebootolni, akkor innen is futtathatjuk a telepített rendszert.

A lépéseket egy Windows98 SE telepítése segítségével mutatom be. (FIXME itt szükség lehet boot floppy segítségére). Első lépésként létre kell hozni egy file-t amibe telepíthetünk. legyen a mérete 700Mb (win98 esetnében ez elegendő az alaprendszer számára)

qemu-img create win98.img 700M

Ennek eredményeképpen létrejön egy 700Mb méretű win98.img nevű állomány. Ezt követően helyezzük be a boot lemezt a floppy egységbe és adjuk ki a következő parancsot

qemu -boot a -fda /dev/fd0 -hda win98.img -k hu

vagy bootoljuk be a cdromot és válasszuk a számítógép indítása menüpontot:

qemu -boot -d /dev/cdrom -hda win98.img -k hu

Ettől kezdve nincs igazán sok dolgunk a qemuval, az újraindításnál a win98 felajánlja a bootolás hdd-ről opciót így módosítani sem kell a parancson. Végig megy a komplett telepítés. (megjegyzem nálam mindennel együtt 1:20-30 perc volt az egész egy P3 667Mhz procival valamint 128Mb ram és 256 Swap segítségével)

A telepítés végezetével az alábbi paranccsal indíthatjuk el a rendszert:

qemu -hda win98.img

Ha az emulált rendszeren szükségünk van cdromra, akkor toldjuk meg egy -cdrom /dev/cdrom kapcsolóval, így a /dev/cdrom meghajtót a qemun keresztül használni tudja a windows.

Ha hangot is szeretnénk, akkor használjuk a --enable-audio kapcsolót, majd tegyük a cdromba a windows98 telepítő lemezt és indítsuk el a következő módon:

qemu -hda win98.img -cdrom /dev/cdrom -enable-audio

A qemu emulál egy SoundBlaster 16 hangkártyát, (de ezt a Windows nálam nem látta), így a következő lépések szükségesek: Start menü -> Vezérlőpult -> Új hardver -> Keresés -> Kézzel választom ki a hardvert. Itt Hanggkártyák -> Creative -> SoundBlaster 16 vagy kompatibilis. Telepíti, reboot és zeng a Microsoft Sound.wav :))

Image-be telepített rendszer állományainak elérése samba segítségével

Telepítsük fel a samba servert, majd a /etc/samba/smb.conf fileba vegyük fel az alábbi sorokat:

[qemu]
  comment = Temporary file space
  path = /tmp
  read only = no
  public = yes

Utána a qemut a '-smb qemu' kapcsolóval kell megtoldani, majd el kell indítani a windowst, és 9x esetén a c:\windows\lmhosts fileba bele kell írni: '10.0.2.2 smbserver', majd reboot (FIXME kell?).

Image fájl csatolása (vigyázzon rá, hogy a virtuális gép ilyenkor ne fusson):

sudo mount -o loop,offset=32256 /image/kép/helye /mnt/valahol/smb

(Eltávolítás: umount /mnt/valahol/smb)

Fájlmegosztás

Az alábbi leírás Windows 2000 (VM) és Ubuntu 8.04 (Host) operációs rendszerekkel lett tesztelve.


A Qemu támogatja a fájlmegosztást a virtuális gép és a kiszolgáló gép között, amennyiben azon Samba Server működik és megfelelően be van állítva. Értem ezalatt, hogy a Samba-nak meg van adva egy felhaszánló által megosztott mappa és ennek a megosztásnak adtak egy nevet is.

A feljebb lévő példában a megosztás neve qemu, a megosztott mappa /tmp

Ehhez indítsuk a qemu-t az alábbi paranccsal (ebben az esetben az adott felhasználó összes mappája megosztásra került és a Samba Server ennek megfelelően van beállítva)

 qemu -smb /tmp -localtime windows.img -net nic -net user

A Windows-on belül a következő parancs teszi elérhetővé a megosztott mappát, melyet egy DOS terminálból kell végrehajtani. az "e:" helyettesíthető bármelybetűvel ha az éppen foglalt lenne.

net use e: \\10.0.2.2\tmp

Ekkor egy e: nevű virtuális meghajtó jön létre amit már böngészhetünk. Későbbi indításkor már automatikusan létre fog jönni. Az Ubuntu IP címe mindig 10.0.2.2 és elérhető böngészőből is.

Linkek