Következő
Előző
Tartalom
4. Framebuffer eszközök használata Intel platformokon4.1 Mi az a vesafb?A vesafb egy VESA 2.0 kompatibilis grafikus kártyákkal működő framebuffer eszköz Intel architektúrára. Nagyban hasonlít a kernelben levő framebuffer eszköz meghajtókhoz. A vesafb képernyőmeghajtó lehetővé teszi, hogy grafikus módokat használj Intel platformon bitmap-es szöveges konzolokon. Lehetővé teszi továbbá, hogy logo-t jeleníts meg, ami valószínűleg a fő oka annak, hogy vesafb-t használj. Sajnos, nem használhatod a vesafb-vel a VESA 1.2-es kártyákat. Ez azért van, mert az 1.2-es kártyák nem lineáris frame buffering-et használnak. A lineáris framebuffering egyszerűen azt jelenti, hogy a rendszer processzor közvetlenül hozzáfér a képernyő minden egyes bitjéhez. A történelmet tekintve, a régebbi grafikus kártyák csak 64K-t engedtek egyszerre hozzáférni a kernelnek, mivel a fantasztikus CGA/EGA üzemmódoknak ez volt a korlátja. Elképzelhető, hogy valaki írni fog egy vesafb12-es eszközmeghajtót ezekhez a kártyákhoz, de értékes kernel memóriát használna, és meglehetősen ronda patch-re lenne szükség. Létezik azonban egy potenciális lehetőség, VESA 2.0-s kiegészítést adhatsz a VESA 1.2-es kártyádnak. Letölthetsz egy DOS alól futó rezidens programot, amit ha loadlin-el használsz, segíthet a kártya megfelelő grafikus üzemmódba konfigurálásában. Jegyezzük meg, hogy ez nem mindig működik, például néhány Cirrus Logic kártya, mint például a VLB 54xx-es sorozat, a frame buffering-hez olyan memória címeket használ (például a 15-16MB-os tartomány), amik megakadályozzák, hogy 32MB memóriánál több memóriával rendelkező rendszerek rendesen működjenek. Van mód arra, hogy működésre bírjuk, ha a BIOS-ban szerepel egy olyan opció, amely lyukat hagy a 15-16Mbyte területen a memóriában. Így talán működne, de a Linux nem támogatja a memórialyukakat. Bár van patch ennek az opciónak a megvalósítására [Kinek van, és honnan lehet beszerezni?]. Ha szeretnél kísérletezni ezzel az opcióval, rengeteg TSR szerű program rendelkezésedre áll, a legjobb példa például az UNIVBE, amit megtalálsz az Interneten. Elképzelhető, hogy találsz kernel patch-et, hogy működésre bírd a VESA 1.2-es kártyád a VESA framebuffer meghajtóval. Például, léteznek patch-ek a régebbi S3 kártyákhoz (mint az S3 Trio, S3 Virge), melyek VESA 1.2-es támogatással rendelkeznek. Ezekhez a kártyákhoz választhatsz patch-et a ftp://ccssu.crimea.ua/pub/linux/kernel/v2.2/unofficial/s3new.diff.gz címről.
4.2 Hogy aktíváljam a vesafb meghajtót?Tegyük fel, hogy menuconfig-ot használsz, ekkor a következő lépésekre van szükséged: Ha a processzorod (Intel platformokon) támogatja az MTRR-t, engedélyezd. Ez felgyorsítja a processzor és a grafikus kártya között a memóriamásolást, de nem feltétlen szükséges. Ezt megteheted természetesen a konzol eszköz sikeres beállítása után is. FONTOS: A 2.1.x kernelverziók esetén, menj a Code Maturity Level menübe, és engedélyezd a fejlesztés alatt álló ésvagy nem teljes meghajtóprogramok kiválasztási lehetőségét. Erre a 2.2.x kernelverziók esetében már nincs szükség. Menj a Consol Drivers menübe, és engedélyezd a következőket:
VGA Chipset Support (text only) - vgafb - szerepelnie kellene a fenti listában, de mivel már helytelenítik a használatát, és többé nem támogatott, így nem szerepeltettük a listában. Rövidesen el is lesz távolítva. Használd inkább a VGA Text Console-t (fbcon). A VGA Character/Attributes csak VGA Chipset támogatással használatos, és nem szükséges kiválasztani. Biztosítsd, hogy a Mac változó bpp tömörített pixel támogatás nem engedélyezett. A Linux 2.1.111-es kernelverziója (és a 112-es) úgy tűnik, hogy automatikusan engedélyezi, ha az Advanced Low Level Drivers elsőre ki lett választva. Ez a 2.1.113-ban már nem így történik többé. Fennáll ezenkívük a karakterek memóriábafordításának lehetősége is, de erre valójában nincs szükség és mindig használhatod a kbd-0.99 setfont szerszámát (lásd a karakterekről szóló fejezetet), amivel megváltoztathatod a karaktereket úgy, hogy betöltöd a karaktereket a konzol eszközbe. Győződj meg róla, hogy ezek nem modulok lesznek. [Nem vagyok benne biztos, hogy lehetséges már modulba fordítani őket - kérlek javíts ki, ha tévednék] El kell készítened a framebuffer eszközöket a /dev alkönyvárban. Framebuffer eszközönként egyre lesz szükséged, így mindössze annyi a teendőd, hogy kiadod az első alkalommal a mknod /dev/fb0 c 29 0 parancsot. A következők 32 többszörösei lesznek, például a /dev/fb1 elkészítéséhez mknod /dev/fb1 c 29 32 parancsot kell kiadnod, és így tovább, egészen a nyolcadik framebuffer eszközig (mknod /dev/fb7 c 29 224). Ezután fordítsd újra a kernelt, módosítsd a /etc/lilo.conf-ot, és csatold a VGA=ASK paramétert, majd futtasd a lilo-t, erre azért van szükség, hogy kiválaszthasd, melyik módot szeretnéd majd használni. Íme egy példa a LILO konfigurációra (az én gépemről vettem):
# LILO konfigurációs állomány boot = /dev/hda3 delay = 30 prompt vga = ASK # Engedjük, hogy a felhasználó adja meg a kívánt módot image = /vmlinuz root = /dev/hda3 label = Linux read-only # A nem-UMSDOS állományrendszert célszerű csak olvashatónak beilleszteni az ellenőrzéshez Indítsd újra a kernelt, és próbaképpen, írj be 0301-et a VGA promptnál (ez 640x480-as felbontást ad 256 színnel) és máris egy aranyos pici pingvin logót láthatsz. Jegyezzük meg, hogy a VGA promptnál a szám beírásánál 'x' nélkül kell beírnod a számot "0" és 3 számjegy formában. Erre nincs szükség LILO használatával. Ha látod, hogy jól működik, felfedezheted a különböző VESA módokat (lásd lejjebb), eldöntheted, hogy melyik tetszik a legjobban és be bedrótozhatod a "VGA=x" paraméter használatával a lilo.conf állományba. Ha kiválasztottad, hogy melyik tetszik a legjobban, keresd ki a neki megfelelő hexadecimális számot a lentebb található táblázatból (pl. 1280x1024 @ 256-hoz "VGA=0x307"-et találsz), és újra le kell futtatnod a lilo-t. Mindössze ennyi a teendő. A későbbi hivatkozásokhoz olvasd el a LoadLin/LILO HOGYANokat. MEGJEGYZÉS! A vesafb nem engedélyezi a scrollback buffering-et alapértelmezés szerint. Neked kell átadni az engedélyező kernel paramétert. Az engedélyezéshez használd a video=vesa:ypan vagy a video=vesa:ywrap paramétereket. Mindkettő ugyanazt a dolgot teszi, de másképpen. Az ywrap lényegesen gyorsabb, mint az ypan, de nem, vagy részben rosszul működik VESA 2.0-s grafikus kártyákkal. Az ypan lassabb az ywrap-nál, de nagyobb mértékben kompatibilis. Ez az opció csak a 2.1.116-os és magasabb verziószámú kernelekben van jelen. A korábbi kernelekben nem volt meg a scrollback buffering engedélyezésének képesség a vesafb-hez.
4.3 Milyen VESA módok állnak rendelkezésemre?Ez valójában a rendszered VESA 2.0 kompatibilis grafikus kártyájától függ, valamint a rajta lévő video memória mennyiségétől. Az csak a tesztelés kérdése, hogy melyik video üzemmód a legjobb a grafikus kártyádnak. A következő tábla a VGA promptnál beadható, vagy a LILO programmal használható üzemmódok számait mutatja. (jelenleg ezek a számok 0x200 felettiek, hogy könnyebb legyen a táblára hivatkozni)
Színek 640x400 640x480 800x600 1024x768 1280x1024 1600x1200 ---------+----------------------------------------------------- 4 bites | ? ? 0x302 ? ? ? 8 bites | 0x300 0x301 0x303 0x305 0x307 0x31C 15 bites | ? 0x310 0x313 0x316 0x319 0x31D 16 bites | ? 0x311 0x314 0x317 0x31A 0x31E 24 bites | ? 0x312 0x315 0x318 0x31B 0x31F 32 bites | ? ? ? ? ? ? Kulcs: 8 bites = 256 színű, 15 bites = 32,768 színű, 16 bites = 65,536 színű, 24 bites = 16.8 millió színű, 32 bites - ugyanaz, mint a 24 bites, de az extra 8 bit más dolgok tárolására is felhasználható, ami tökéletesen megfelel a 32 bites PCI/VLB/EISA busznak. Egyéb üzemmódok a gyártó diszkréciójától függ, mivel a VESA 2.0 dokumentációja csak a 0x31F feletti üzemmódokat definiálja. Némi próbálkozásra lesz szükséged az extra üzemmódok felfedezéséhez.
4.4 Matrox kártyád van?
Ha Matrox grafikus kártyád van, nincs is szükséged a vesafb-re, annál inkább a matroxfb meghajtóra. Ez nagyban kiszélesíti a kártyád képességeit. A Matroxfb a Matrox Mystique Millennium I & II, G100 és G200 kártyákkal működik. Támogatja ezen kívül a többfejes rendszereket (ez az, ha két Matrox kártyád van a gépedben, két megjelenítőt használhatsz ugyanabban a gépben!). Ahhoz, hogy beállítsd rendszered a Matroxhoz, a következőket kell tenned: Esetleg szükséged lehet a BIOS frissítésére, amihez le kell töltened a BIOS frissítést a http://www.matrox.com/mgaweb/drivers/ftp_bios.htm honlapról. Ügyelj rá, hogy a frissítéshez majd DOS-ra lesz szükséged. Menj a Code Maturity Level menübe és engedélyezd a fejlesztés alatt álló és/vagy nem teljes meghajtóprogramok kiválasztási lehetőségét. Erre a 2.2.x kernelverziók esetében már nincs szükség.
Menj a Console Drivers menübe és engedélyezd a következőket:
Fordítsd újra a kernelt. Ezután módosítanod kell a lilo.conf állományt, hogy engedélyezd a Matroxfb eszközt. A leggyorsabb és legegyszerűbb módja, ha felhasználod az enyémet.
# LILO konfigurációs állomány boot = /dev/hda3 delay = 30 prompt vga = 792 # Erre azért van szükség, hogy használható állapotban induljon # A Linux bootolható partíció beállítása következik image = /vmlinuz append = "video=matrox:vesa:440" # akkor váltsunk Matroxfb-re root = /dev/hda3 label = Linux read-only # A nem-UMSDOS állományrendszert célszerű csak olvashatónak beilleszteni az ellenőrzéshez Végül kell készítened a framebuffer eszközöket a /dev alkönyvárban. Framebuffer eszközönként egyre lesz szükséged, így mindössze annyi a teendőd, hogy kiadod az első alkalommal a mknod /dev/fb0 c 29 0 parancsot. A következők 32 többszörösei lesznek, például a /dev/fb1 elkészítéséhez mknod /dev/fb1 c 29 32 parancsot kell kiadnod, és így tovább, egészen a nyolcadik framebuffer eszközig (mknod /dev/fb7 c 29 224). És ennyi. [MEGJEGYZÉS: Ha valaki használ többfejes támogatást, kérem, vegye fel a kapcsolatot velem - beszélnem kell valakivel róla, hogy dokumentálhassam!]
4.5 Permedia kártyád van?
A Permedia kártyákat nem lehet a vesafb-vel használni, de szerencsére elkészült egy használható Permedia framebuffer meghajtó. Feltéve, hogy menuconfig-ot használsz, tedd a következőket:
Menj a Code Maturity Level menübe és engedélyezd a fejlesztés alatt álló és/vagy nem teljes meghajtóprogramok kiválasztási lehetőségét. Erre a 2.2.x kernelverziók esetében már nincs szükség. Menj a Console Drivers menübe és engedélyezd a következőket:
Fordítsd újra a kerneled. Ezután módosítanod kell a lilo.conf állományt, hogy engedélyezd a pm2fb eszközt. A leggyorsabb, és legyegyszerűbb módja, ha felhasználod a következő példát:
# LILO konfigurációs állomány boot = /dev/hda3 delay = 30 prompt vga = 792 # Erre azért van szükség, hogy használható állapotban induljon # A Linux bootolható partíció beállítása következik image = /vmlinuz append = "video=pm2fb:mode:1024x768-75,font:SUN12x22,ypan" # akkor váltsunk át pm2fb root = /dev/hda3 label = Linux read-only # A nem-UMSDOS állományrendszert célszerű csak olvashatónak beilleszteni az ellenőrzéshez A "pm2fb:mode:1024x768-75,font:SUN12x22,ypan" sor jelzi, hogy 1024x768-as felbontást választottál 75Hz-en, SUN12x22 karakterkészlettel (ha nem választottad ki), és ypan scrollback támogatással. Kívánságod szerint választhatsz más üzemmódot is. Végül kell készítened a framebuffer eszközöket a /dev alkönyvárban. Framebuffer eszközönként egyre lesz szükséged, így mindössze annyi a teendőd, hogy kiadod az első alkalommal a mknod /dev/fb0 c 29 0 parancsot. A következők 32 többszörösei lesznek, például a /dev/fb1 elkészítéséhez mknod /dev/fb1 c 29 32 parancsot kell kiadnod, és így tovább, egészen a nyolcadik framebuffer eszközig (mknod /dev/fb7 c 29 224). További információkat a Permedia framebuffer meghajtóról a http://www.cs.unibo.it/ nardinoc/pm2fb/index.html honlapon találsz. video=pm2fb:[opció[,opció[,opció...]]] ahol az opciók a következők lehetnek:
4.6 ATI kártyád van?
[MEGJEGYZÉS: Ez az információ a legjobb formájában látható, csak másod vagy harmadkézből van, mivel nincs ATI kártyám, hogy tesztelhessem. Kérlek javíts ki, ha tévednék, vagy égess meg!] 8) Az ATI kártyák használhatóak a vesafb meghajtóval, de lehetnek problémáid a használatával, attól függően, hogy milyen súlyosan károsodott a kártyád. Szerencsére az atyfb framebuffer meghajtó rendelkezésedre áll. Feltéve, hogy menuconfig-ot használsz, a következőket kell tenned: Menj a Code Maturity Level menübe és engedélyezd a fejlesztés alatt álló és/vagy nem teljes meghajtóprogramok kiválasztási lehetőségét. Erre a 2.2.x kernelverziók esetében már nincs szükség. Menj a Console Drivers menübe és engedélyezd a következőket:
Fordítsd újra a kerneled. Ezután módosítanod kell a lilo.conf állományt, hogy engedélyezd a atyfb eszközt. A leggyorsabb, és legyegyszerűbb módja, ha felhasználod a következő példát:
# LILO konfigurációs állomány boot = /dev/hda3 delay = 30 prompt vga = 792 # Erre azért van szükség, hogy használható állapotban induljon # A Linux bootolható partíció beállítása következik image = /vmlinuz append = "video=atyfb:1024x768,font:SUN12x22" root = /dev/hda3 label = Linux read-only # A nem-UMSDOS állományrendszert célszerű csak olvashatónak beilleszteni az ellenőrzéshez Az "atyfb:mode:1024x768,font:SUN12x22" jelzi, hogy egy 1024x768 üzemmódot választottál. Végül kell készítened a framebuffer eszközöket a /dev alkönyvárban. Framebuffer eszközönként egyre lesz szükséged, így mindössze annyi a teendőd, hogy kiadod az első alkalommal a mknod /dev/fb0 c 29 0 parancsot. A következők 32 többszörösei lesznek, például a /dev/fb1 elkészítéséhez mknod /dev/fb1 c 29 32 parancsot kell kiadnod, és így tovább, egészen a nyolcadik framebuffer eszközig (mknod /dev/fb7 c 29 224). video=atyfb:[opció[,opció[,opció...]]] ahol opció a következő lehet:
4.7 Mely grafikus kártyák VESA 2.0 kompatibilisek?A következő felsorolás tartalmazza az összes olyan grafikus kártyát, melyekről ismert, hogy működnek a vesafb eszközzel:
A következő felsorolás alaplapon elhelyezkedő chip készleteket tartalmaz:
Az alábbi feketelista olyan grafikus kártyákat tartalmaz, melyek nem működnek együtt a vesafb eszközzel:
4.8 Lefordíthatom a vesafb-t modulként?
Tudomásom szerint a vesafb nem modularizálható, hacsak valamikor a vesafb fejlesztői úgy nem döntenek, hogy módosítják a forrást, és modularizálhatóvá teszik. Jegyezzük meg, hogy ha még lehetségessé is válik a modularizálhatóság, indulásidőben akkor sem fogsz semmi kimenetet látni a megjelenítőn, amíg a vesafb nincs modulpróbálva. Talán sokkal ésszerűbb lenne a kernelben hagyni, azokra az esetekre, ha indításkor probléma lépne fel.
4.9 Hogyan módosíthatom a kurzort?
[A VGA-softcursor.txt-ből vettem - köszönet Martin Mares-nek érte!] A Linuxnak most már többféle képessége is lehetővé teszi a kurzor megjelenésének módosítását. Általában átállíthatod a hardver kurzor méretét (és körüljárhatsz néhány csúnya hibát azokon a csapnivaló Trident kártyákon -- nézd meg a #define TRIDENT_GLITCH-et a drivers/char/vga.c állományban). Ebben az esetben ha engedélyezed a "Software generated cursor"-t a rendszer konfigurációdban, eljátszhatsz néhány új trükkel: átalakíthatod a kurzorod nem villogó piros blokká, a karakter inverz hátterévé változtathatod, vagy kiemeltté teheted az adott karaktert, és még mindig választhatsz, hogy az eredeti hardver kurzor látható maradjon, vagy sem. Lehet még néhány dolog, amire sose gondoltam még. A kurzor megjelenítését a <ESC>[?1;2;3cescape szekvencia szabályozza, ahol 1, 2 és 3 lejjebb megmagyarázott paraméterek. Ha kihagyod bármelyiket, az alapértelmezésre állnak, ami 0. Az 1. paraméter a kurzor méretét határozza meg (0=alapértelmezett, 1=láthatatlan, 2=aláhúzás, ..., 8=teljes blokk) + 16 ha a szoftver kurzort szeretnéd alkalmazni, + 32 ha mindig szeretnél a háttérszínen változtatni + 64 ha nem szertnéd ugyanazd a hátteret, mint ami az előtér. A kiemelést nem veszi figyelembe az utolsó két flag esetén. A második paraméter kiválasztja az általad megváltoztatandó karakter attribútum bitet (egyszerűen össze XOR-olva e paraméter értékével). Hagyományos VGA-n a négy magas bit határozza meg a hátteret, az alsó négy pedig az előteret. Mindkét csoportban, a három alacsony bit állítja a színt (mint a konzol hagyományos színkódjai esetén), s a legértékesebb bit állítja be a kiemelést (vagy néhány esetben a villogást -- a VGA-d konfigurációjától függően). A harmadik paraméter az általad beállítandó karakter attribútum bitekből áll. A bit beállítása a bit átállítása előtt lép érvénybe, így egyszerűen törölhetsz egy bitet a beállító és az átállító maszkba illesztve. Hagyományos villogó aláhúzás beállításához: echo -e '\033[?2c' Villogó blokk beállításához: echo -e '\033[?6c' Nem villogó piros blokk beállításához: echo -e '\033[?17;0;64c'
Következő Előző Tartalom |