Bootlogo durch Framebuffer
1. Hae?
Man kann in der Konsole hoehere Aufloesungen verwenden und beim Booten klebt
links oben ein Pinguin-Logo :) Ok das ist nicht alles wozu der Framebuffer
gut ist. Wer mehr wissen will, guckt mal in das
Framebuffer-HOWTO.
Ein kleiner Nachteil ist, dass es ein bisschen langsamer ist, als die normale
Methode.
2. Anforderungen
Erstmal, mein System: Debian Woody, Kernel 2.4.18
Damit ging's :) Dass eventuell Pfade bei anderen Distributionen abweichen
koennen, wird hier nicht beruecksichtigt.
Das ganze muesste auch schon auf 2.2.x Kernels laufen. Habe ich aber
nicht getestet.
Dann braucht man noch eine VESA 2.0 Grafikkarte. Das Geraet sollte
also nicht zu alt sein, dann wird's schon klappen.
3.1. Sicherungskopie erstellen
Der Kernel muss neu kompiliert werden und wer da nicht so ganz sicher
ist, legt vorher mal ein Backup des Kernels an.
Bei Unklarheiten im Umgang mit dem Kernel, koennte ein Blick ins
Kernel-HOWTO
Abhilfe schaffen.
3.2. Den Kernel bearbeiten
Erstmal konfigurieren...
Diese Optionen mussten bei mir aktiviert werden:
Code maturity level options --->
[*] Prompt for development and/or incomplete code/drivers
<optional>
Das hier muss nicht unbedingt aktiviert werden, sollte aber, sofern es
unterstuetzt wird, da es das Ganze ein bisschen schneller macht.
Processor type and features --->
[*] MTRR (Memory Type Range Register) support
</optional>
Console drivers --->
[*] VGA text console
[*] Video mode selection support
< > MDA text console (dual-headed) (EXPERIMENTAL)
Frame-buffer support --->
[*] Support for frame buffer devices (EXPERIMENTAL)
<M> nVidia Riva support (EXPERIMENTAL)
...
[*] VESA VGA graphics console
...
Das mit dem nVidia Support sollte man natuerlich nur aktivieren,
wenn man eine Karte mit einem Riva oder Geforce Chipsatz hat. Anderenfalls
den jeweiligen Chipsatz der eigenen Grafikkarte...
Das war's schon fast. Jetzt den Kernel neu backen und installieren.
Das hier muss noch in der lilo.conf geaendert werden:
...
# Specifies the VGA text mode at boot time. (normal, extended, ask,
<mode>)
vga=791
...
Dies legt den VGA-Modus fuer das Booten fest.
Dann noch das
$ lilo
nicht vergessen und es sollte klappen.
3.3. 791..?
In
/usr/src/linux-2.4.18/Documentation/fb/vesafb.txt
findet man diese Tabelle:
So the table for the Kernel mode numbers are:
|
640x480 |
800x600 |
1024x768 |
1280x1024 |
| 256 |
0x301 |
0x303 |
0x305 |
0x307 |
| 32k |
0x310 |
0x313 |
0x316 |
0x319 |
| 64k |
0x311 |
0x314 |
0x317 |
0x31A |
| 16M |
0x312 |
0x315 |
0x318 |
0x31B |
Im
Framebuffer-HOWTO
gibts noch eine groessere:
| Colours |
640x400 |
640x480 |
800x600 |
1024x768 |
1152x864 |
1280x1024 |
1600x1200 |
| 4 bits |
? |
? |
0x302 |
? |
? |
? |
? |
| 8 bits |
0x300 |
0x301 |
0x303 |
0x305 |
0x161 |
0x307 |
0x31C |
| 15 bits |
? |
0x310 |
0x313 |
0x316 |
0x162 |
0x319 |
0x31D |
| 16 bits |
? |
0x311 |
0x314 |
0x317 |
0x163 |
0x31A |
0x31E |
| 24 bits |
? |
0x312 |
0x315 |
0x318 |
? |
0x31B |
0x31F |
| 32 bits |
? |
? |
? |
? |
0x164 |
? |
? |
Dies sind die Hexwerte fuer die Grafikmodi.
Abhaengig von der lilo Version kann man gleich zum Beispiel vga=0x317
angeben oder, wenn lilo das nicht erkennt (sieht man dann an einer Fehlermeldung,
nach dem Aufrufen von lilo), muss man das eben in einen Dezimalwert umrechnen.
kcalc oder aehnliche Programme koennen da behilflich sein, wenn man es mal
nicht im Kopf ausrechnen will. Der Dezimalwert von 0x317 ist z.B. 791. Also
laeuft meine Konsole in der Aufloesung 1024x768 mit 16bit Farbtiefe.
Das waer's dann.. Mal neustarten und gucken ob's klappt. Wenn nicht,
auf das Kernel-Backup zurueckgreifen :)
4. Punguin gegen eigenes Bild ersetzen
Es gibt ein GIMP-Plugin, mit dem das funktionieren soll (siehe
Framebuffer-HOWTO),
ich bevorzuge aber fblogo.
Das sieht dann so aus:
Erstmal wandelt man sein Bild in das PNG Format um, falls es nicht
schon in diesem Format ist. Es gibt aber eine Limitierung hinsichtlich
der Farbtiefe. Das Bild darf hoechstens 223 Farben haben. Sollte mit GIMP
(v1.2.3) kein Problem sein:
- Bild oeffnen
- Image / Mode / Indexed...
- [x] Generate Optimal Palette: 223
- den Rest hab ich einfach so gelassen
- File / Save As...
- und als PNG speichern
- fblogo konnte mit alle PNG-Varianten (z.B. Interlaced) die ich getestet
habe umgehen
In der fblogo Manpage werden noch zwei Moeglichkeiten der Konvertierung
beschrieben: Einmal mit netbpm und mit ImageMagick. Bei diesen Varianten
ist die Konvertierung durch fblogo gleich mit drin.
Bei der GIMP-Variante muss man aber auch nicht mehr viel machen:
$ fblogo -v <bild>.png linux_logo.h
Wer einen 2.2.x Kernel hat, gibt noch die Option -2 mit an. Bei 2.4.x
und 2.5.x Kernels werden keine weiteren Optionen angegeben. Das -v sorgt
dafuer, dass ausfuehrlich beschrieben wird, was man noch machen muss. Naemlich
die erzeugte linux_logo.h nach
.../include/linux/linux_logo.h
zu kopieren und in der Datei
.../drivers/video/fbcon.c
zwei Zeilen, die die Bildabmessungen enthalten, zu aendern.
Beispiel:
$ cp linux_logo.h /usr/src/linux-2.4.18/include/linux/linux_logo.h
$ vi /usr/src/linux-2.4.18/drivers/video/fbcon.c
Das waere dann auch erledigt.
Jetzt noch den Kernel neu backen und fertig.
Zu den Bildabmessungen: Ein Logo mit 100x162 hat bei mir ohne Probleme
geklappt. Das Standard Logo hat aber die Abmessungen 80x80. Wenn also etwas
nicht klappt (mit aelteren Kernels koennten vielleicht Probleme auftauchen),
kann man zuerst mal versuchen das Bild auf diese Abmessungen anzupassen.
5. Noch was..
Benutzung auf eigene Gefahr :)
Wie oben schon erwaehnt, koennen Interessierte ja mal ins
Framebuffer-HOWTO
gucken. Leute mit Matrox/Permedia/ATI-Karten sollten das auch mal machen.
mfg,
mxp
(mx.p@gmx.net)