VESA Framebuffer-Konsole
Unter Linux gibt es schon lange die Möglichkeit, die Auflösung der Konsole zu verändern. Dabei bedient man sich zusätzlichen Text-Modi, die von der Grafikkarte angeboten werden und von Grafikkarte zu Grafikkarte stark variieren. Seit kurzem gibt es allerdings auch die Möglichkeit, sogenannte Frame-Buffer-Devices zu benutzen, diese ermöglichen eine hohe grafische Auflösung auf der Konsole.
Einleitung
Unter Linux gibt es schon lange die Möglichkeit, die Auflösung der Konsole zu verändern. Dabei bedient man sich zusätzlichen Text-Modi, die von der Grafikkarte angeboten werden und von Grafikkarte zu Grafikkarte stark variieren. Seit kurzem gibt es allerdings auch die Möglichkeit, sogenannte Frame-Buffer-Devices zu benutzen, diese ermöglichen eine hohe grafische Auflösung auf der Konsole. Zudem erhält man beim Booten einen netten kleinen Pinguin in der linken oberen Ecke des Bildschirms. Negativ ist nur, daß die Benutzung des Framebuffers etwas langsamer ist als die Verwendung herkömlicher Textmodi. Das Verfahren, das bei der Benutzung des Framebuffer-Device angewendet wird, ist recht einfach. Bevor der Kernel in den 32 Bit Protected Mode springt, wird über einen BIOS-Aufruf der vorher festgelegte Grafikmodus aktiviert. Der Grafikmodus bleibt so lange bestehen, bis ein Reboot erfolgt. Ein Umschalten in einen anderen Modus, sei es ein Textmodus oder ein Grafikmodus, ist nicht mehr möglich. Unterstützt werden alle Grafikkarten, die zu den VESA BIOS Extensions v2.0 kompatibel sind. Ältere Grafikkarten, die zu den VESA BIOS Extensions 1.2 kompatibel sind, werden nicht unterstützt. Heutzutage dürfte fast jede moderne Grafikkarte diesem Standard entsprechen.
Bei der Verwendung des Framebuffers wird das Device /dev/fb0 angelegt. Dieses stellt den Framebuffer der Grafikkarte dar und kann demzufolge ausgelesen und beschrieben werden. Einen Screenshot der Konsole kann man z.B. mit cp /dev/fb0 file
erstellen. Voraussetzung ist also eine entsprechend kompatible Grafikkarte sowie ein Linux-Kernel ab der Version 2.2.0. In dieser Anleitung will ich erklären, wie man Grafik-Modi auf der Konsole mit Hilfe des VESA-Framebuffers benutzt.
Kernel-Konfiguration
Die Unterstützung für VESA Framebuffer Devices muss fest in den Kernel eingebunden werden. Um den Kernel neu zu konfigurieren, wechselt man in das Verzeichnis /usr/src/linux. Dort startet man als Root die Konfiguration des Kernels mittels make xconfig
oder auch über make menuconfig
. Näheres zur Kernelkonfiguration und zur Kernelkompilierung kann man unter Pro-Linux Kernelkonfiguration erfahren.
Da die Unterstützung von Framebuffer-Devices noch in Entwicklung ist, muss im Hauptmenu unter
die Option ausgewählt werden. Im Hauptmenü findet man ferner einen Punkt . Dort wählt man und aus. Theoretisch braucht man die Unterstützung der normalen nicht mehr, wenn man ausschließlich eine Framebuffer-Konsole verwenden will, es kann aber trotzdem sinnvoll sein, diese mit in den Kernel aufzunehmen, z.B. dann, wenn man die Grafikkarte wechselt, und diese nicht dem VESA 2.0 Standard entspricht.Die Option, um ein Auswählen des Videomodus zu ermöglichen, muss ebenfalls mit in den Kernel aufgenommen werden, da sonst nur die Standard-Textkonsole verwendet werden kann. Außerdem wählt man
und zusätzlich aus, da ja Framebuffer-Devices und natürlich die VESA VGA-Konsole verwendet werden sollen. Hat man alle Einstellungen gemacht, kann der Kernel kompiliert werden. In dem Screenshot rechts hat leider der letzte auszuwählende Punkt, die Unterstützung für die VESA grafische Konsole keinen Platz mehr gefunden.Benutzen des Framebuffers
In diesem Abschnitt gehe ich nur auf die Konfiguration des Linux-Bootmanagers LILO ein. Bei der Verwendung von "loadlin" oder anderen Bootmanagern sollten die entsprechenden Parameter ähnlich oder identisch sein. Dem Kernel muss, bevor er in den 32 Bit Protected Modus springt, ein entsprechender Parameter übergeben werden, der den Kernel veranlaßt einen BIOS-Aufruf zu machen, um einen bestimmten VESA-Grafikmodus einzustellen. Der entsprechende Parameter lautet vga
. Nun gibt es zwei bzw. drei Wege, dem Kernel diesen Parameter mitzuteilen. Zum einem kann der Parameter vga
in der Konfigurationsdatei von LILO gesetzt werden. Zum andern gibt es auch die Möglichkeit, den Parameter am LILO-Prompt mitzuteilen. Oder aber man wird beim Starten von Linux nach einem Wert für vga
gefragt. Die Werte der entsprechenden Grafikmodi, die mit dem Parameter vga
gesetzt werden können, kann man der folgenden Tabelle entnehmen.
Wichtig! Wird ein konkreter Wert für den Grafikmodus nicht in der Konfigurationsdatei von LILO angegeben, so muss der Wert für den Grafikmodus ohne das "x" angegeben werden, aber mit der führenden Null.
Die Tabelle der Auflösungen und Farbtiefen:
Farbtiefe | | | | | 1600x1200 |
256 (8bit) | 0x301 | 0x303 | 0x305 | 0x307 | 0x31C |
32000 (15bit) | 0x310 | 0x313 | 0x316 | 0x319 | 0x31D |
65000 (16bit) | 0x311 | 0x314 | 0x317 | 0x31A | 0x31E |
16.7 Mill. (24bit) | 0x312 | 0x315 | 0x318 | 0x31B | 0x31F |
Parameter am LILO-Prompt übergeben
Während LILO auf die Auswahl einer Bootkonfiguration wartet, können der Parameter vga
und die zu startende Konfiguration manuell gesetzt werden. Um sich die verschiedenen Konfigurationen anzusehen, kann man, sobald LILO auf dem Bildschirm erscheint, die Tabulatortaste drücken. In der Ausgabe erscheinen dann die Namen der zur Verfügung gestellten Kernelkonfigurationen. In dem folgenden Beispiel gehe ich davon aus, daß der Name der Konfiguration "linux" ist. Möchte man z.B. die Konfiguration "linux" starten und eine Auflösung von 800x600 bei einer Farbtiefe von 16 Bit benutzen, dies entspricht dem Wert 0x314 aus der Tabelle, so gibt man folgendes am LILO-Prompt ein.
linux vga=0314
Komischerweise funktioniert dies nicht bei allen Linuxen. Bei Red Hat 6.2 wurde der Wert bei mir zumindest nicht angenommen. Mit SuSE 6.3 jedoch hat dies wunderbar funktioniert. Sollte es also nicht klappen, kann man den Wert für vga
in der Datei /etc/lilo.conf auf ask
oder auf einen konkreten Wert setzen. Näheres ist weiter unten beschrieben.