Xen VGA passthrough

GNU/Linux

Ez a leírás a továbbiakban egy kicsit modernizált, magyarra fordított verziója ennek a leírásnak. Köszönöm LordOfElm, hogy ezt leírtad, mielőtt megtaláltam, hetekig a sötétben tapogatózva próbáltam működésre bírni a rendszert.

BIOS

Első lépésként nyálazzuk át a BIOS beállításokat. Az IOMMU támogatás például nálam alapértelmezettként ki volt kapcsolva, és beállítottam az alapértelmezett videokártyát is a leendő GNU/Linux videokártyájára.

GNU/Linux disztribúció

Hirdetés

Ezután tegyünk föl egy GNU/Linux disztrót a gépre. Szerintem mindegy, hogy melyiket választod, nem látom miért ne működne bármelyiken. Hozzáteszem, hogy nem vagyok nagy GNU/Linux guru, tehát ez az állítás lehet, hogy nem helytálló.

Amire figyelj telepítés közben: hagyj szabadon (ne particionáld) egy akkora területet, ahová az általad kigondolt összes virtuális gép elfér.

Én a Debian testing-et választottam. Ubuntu stílusban telepítettem, tehát nincs root felhasználó, hanem az első felhasználó sudo joggal jön létre. A leírás ezzel a telepítéssel való munkát írja le.

Linux kernel

A következő lépés fordítani egy saját Linux kernelt. Nem egy akkora durranás mint gondoltam, nem kell megijedni. Bevallom először én is tartózkodtam ettől, így utólag nem is értem miért, de belevágtam és nem bántam meg. A kernelfordításhoz olyan 7 GB szabad helyre lesz szükségünk.

A hivatalos Debian repóban elérhető kernel számunkra azért nem megfelelő, mert az egy általános célú kernel és nem tartalmazza beépítve azokat a Xen drivereket amik nekünk kellenek.

Azzal, hogy saját kernelünk lesz, annak karbantartása is ránk hárul, nem kapjuk meg a hivatalos Debian kernelekhez járó biztonsági frissítéseket, de ha egyszer konfiguráltunk egy kernelfordítást, utána a config fájl átmásolásával konfigurálhatunk akárhányat, így csak egyszer kell ezzel érdemben foglalkozni.

A 3.5-ös Linux kernel állítólag bugos (nem próbáltam), a 3.6 pedig éppen csak elkészült, én így a 3.4-es kernel legfrissebb (3.4.12) kiadásával dolgoztam. Töltsük le a kernel.org-ról a kernelkódot. A [Full Source] (újabban [.tar.xz]) linkre kattintva már csorog is a gépünkre a becsomagolt forráskód.

Először is telepítsük a szükséges csomagokat a kernelfordításhoz:

sudo apt-get install tar bzip2 build-essential libncurses-dev kernel-package fakeroot

Ezután adjuk ki a következő parancsokat abban a mappában ahová a forráskódot letöltöttük:

tar jxf linux-3.4.12.tar.bz2
cd linux-3.4.12
cp /boot/config-3.2.0-3-amd64 .config
make menuconfig

Újabban .tar.xz kiterjesztésűek a fájlok. Ezek kicsomagolására a következő parancs használható:

tar Jxf <fájl>

A cp /boot/config-3.2.0-3-amd64 .config sor az alapértelmezett Debian kernelkonfigurációt másolja a nekünk kellő helyre, ha ez a te GNU/Linux disztribúciódban máshol van, akkor módosítsd a parancsot.

Ha kiadtuk a make menuconfig parancsot, akkor készen állunk a kernelünk konfigurálására. Nem olyan bonyolult mint amilyennek tűnik, nyílgombokkal navigálunk, "Enter"-rel kibontunk egy csoportot, "Esc"-el kilépünk egy csoportból, "y" gombbal kernelbe fordítandónak, "m" gombbal kernelmodulként fordítandónak, "n" gombbal pedig nem lefordítandóként jelöljük meg az adott kernelkomponenst.

Nekünk az alábbi összetevők kellenek, az "y" gomb lenyomásával jelezzük az összeset kernelbe fordítandónak:

Bus options (PCI etc.)
PCI Stub driver
Xen PCI Frontend
Device Drivers
Block devices
Xen virtual block device support
Xen block-device backend driver
Network device support
Xen network device frontend driver
Xen backend network device
Ethernet driver support
QLogic devices
NetXen Multi port (1/10) Gigabit Ethernet NIC
Xen driver support
Xen memory balloon driver
Dynamically self-balloon kernel memory to target
Memory hotplug support for Xen balloon driver
Scrub pages before returning them to system
Xen /dev/xen/evtchn device
Backend driver support
Xen filesystem
Create compatibility mount point /proc/xen
Create xen entries under /sys/hypervisor
userspace grant access device driver
User-space grant reference allocator driver
Xen PCI-device backend driver

Van egy opció a "Device Drivers -> Xen driver support -> Xen ACPI processor", ezt hagyjuk meg kernelmodulnak, különben mindenféle hibát tapasztalhatunk a továbbiakban.

Dupla "Esc" gombnyomásra kiléphetünk a menuconfig-ból, nincs más hátra mint maga a fordítás. Mivel úgyis saját kernelt fordítunk, ezért miért ne optimalizáljuk a saját gépünkre egy kicsit jobban. Beállíthatunk cflag-eket amelyek segítségével a fordító a mi processzorunkra optimalizált kernelt tud előállítani. Ennek hátránya, hogy a lefordított bináris nem lesz hordozható különböző processzorú gépek között, de ez minket nem hátráltat.

A biztonságosan alkalmazható cflag-ekről a Gentoo wikin találtam egy nagyon jó összefoglalót, az Intel processzorokra itt, AMD társaikra itt van egy nagyon jó lista. Ezeket a következő parancsok kiadásával tudjuk alkalmazni:

export CFLAGS="..."
export CXXFLAGS="..."
export CHOST="..."

A fordítás egy nagyon jól párhuzamosítható feladat, hogy kihasználjuk mindegyik CPU magunkat, először meg kell állapítani, hogy hány szálon szeretnénk fordítani. Van, aki szerint elég a CPU_magszám+1 szál, mások szerint a CPU_magszám*2 a megfelelő. Én az utóbbit választottam, ha több szálon fordítasz mint az optimális, attól elméletileg nem lassul be a fordítás. Ha megvan a nekünk kellő szám, adjuk ki a következő parancsot:

export CONCURRENCY_LEVEL=<szálak száma>

Az én esetemben a parancs az alábbi volt:

export CONCURRENCY_LEVEL=8

Adjuk ki az alábbi parancsokat:

make-kpkg clean
fakeroot make-kpkg --initrd --revision=3.4.12~xen~custom kernel_image

Ezután elmehetünk főzni egy kávét, kinyújtóztatni elmacskásodott tagjainkat, ugyanis a fordítás elég időigényes. Az én processzorommal fél óra volt.

Ha megvan a fordítás akkor nézzünk be abba a mappába ahová a forráskódot letöltöttük. Találunk ott egy új .deb fájlt. Ez a mi új kernelünk szépen becsomagolva. Adjuk ki ebből a mappából a következő parancsot:

sudo dpkg -i <csomagnév>.deb

Az én esetemben:

sudo dpkg -i linux-image-3.4.12_3.4.12~xen~custom_amd64.deb

Ezután indítsuk újra a gépet, majd ha az uname -r parancs a 3.4.12 kimenetet adja, akkor minden rendben ment.

A cikk még nem ért véget, kérlek, lapozz!