Login
Newsletter
Werbung

Do, 8. Juni 2000, 00:00

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.

Von Boris

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

Kernelkonfiguration des Framebuffers

Boris Woeste

Kernelkonfiguration des Framebuffers

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 Code maturity level options die Option Prompt for development andor incomplete codedrivers ausgewählt werden. Im Hauptmenü findet man ferner einen Punkt Console drivers. Dort wählt man VGA text console und Video mode selection support aus. Theoretisch braucht man die Unterstützung der normalen VGA text console 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 Support for frame buffer devices (EXPERIMANTAL) und zusätzlich VESA VGA graphics console 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
640x480
800x600
1024x768
1280x1024
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.

Kommentare (Insgesamt: 0 )
Pro-Linux
Pro-Linux @Facebook
Neue Nachrichten
Werbung