Framebuffer i810fb
Inhaltsverzeichnis |
Allgemein
Die Installation des i810fb gilt als nicht trivial und im Netz finden sich kaum erfolgreiche Bauanleitungen - zumal der Kernelpatch schon länger nicht gepflegt wird. Mit einigen Kniffs und tricks lässt sich der Framebuffer jedoch recht schnell in einen neuen Kernel integrieren.
In dieser Anleitung wird exemplarisch ein Kernel für Debian Sarge (2.4.27) gebaut. Mit Hilfe einer distributionsabhängigen Anleitung zur Kernelerstellung lässt sich das aber auf jede andere Distribution erweitern.
Es gibt zwei Versionen, die eine (i810fb) erfordert einen weiteren Patch fuer xFree86, die andere (i810fb-lite) nicht. Sie unterscheiden sich aber bis auf x86 nicht in der Installation. Unten wurden die Sourcen fuer die "lite"-Variante geladen.
Installation bei 2.4er Kerneln (hier:Debian)
Zunächst werden diverse Programme benötigt, um einen Kernel braten zu können. Bei Debian geht das z.B. so:
pc_name:/# apt-get install dpkg-dev gcc g++ libc6-dev make patch wget autoconf automake bzip2 devscripts dh-make debhelper kernel-package fakeroot dpatch libncurses5-dev
Dann muss man die jeweiligen Kernel Sourcen und Header laden. Dazu erstmal den richtigen Kernel finden und dann zuschlagen:
pc_name:/# uname -a pc_name:/# apt-cache search kernel-source pc_name:/# apt-get install kernel-source-2.4.27 pc_name:/# apt-get install kernel-headers-2.4.27
Die Sourcen in /usr/src entpacken:
pc_name:/# cd /usr/src/ pc_name:/# tar xjf kernel-source-2.4.27.tar.bz2 pc_name:/usr/src # ln -s kernel-source-2.4.27 linux
Den i810 Kernelpatch laden und entpacken. Da die letzte Version für Kernel der 2.4er Reihe war 2.4.23 - man muss daher ein bisschen mogeln. Ob es aktuellere Versionen gibt und wie bei 2.6er Kerneln zu verfahren ist erfährt man hier: [1]
pc_name:/usr/src # mkdir /usr/local/src/i810tvout pc_name:/usr/local/src/i810tvout # cd /usr/local/src/i810tvout pc_name:/usr/local/src/i810tvout # wget http://heanet.dl.sourceforge.net/sourceforge/i810fb/linux-2.4.23-24-i810fb-lite.diff.bz2 pc_name:/usr/local/src/i810tvout # bunzip2 linux-2.4.23-24-i810fb-lite.diff.bz2
Der Patch erwartet die Sourcen in Verzeichnis /usr/src/linux-2.4.23 (Symlink setzen)
pc_name:/usr/local/src/i810tvout # ln -s /usr/src/kernel-source-2.4.27 /usr/src/linux-2.4.23
Patch anwenden:
pc_name:/# cd /usr/src/ pc_name:/usr/src # cat /usr/local/src/i810tvout/linux-2.4.23-24-i810fb-lite.diff|patch -p0
=> Meldung:
"1 out of 1 hunk FAILED -- saving rejects to file linux-2.4.23/include/linux/fb.h.rej"
Also in "linux-2.4.23/include/linux/fb.h" einfuegen:
#define FB_ACCEL_I810 43 /*Intel 810 */
(Zahl auch aendern! Eins hoeher als die Zeile vorher- bei mir 43)
pc_name:/usr/src # pico linux-2.4.23/include/linux/fb.h
Dann das Kernel Config-File erstellen und bearbeiten
pc_name:/usr/src # cp /boot/config-2.4.27-2-386 /usr/src/linux/ pc_name:/usr/src # mv /usr/src/linux/config-2.4.27-2-386 /usr/src/linux/.config pc_name:/usr/src # cd /usr/src/linux pc_name:/usr/src/linux # make menuconfig
Dort wie hier beschrieben vorgehen: [2] Jeweils alle Punkte als Kernelmodul laden (mit "y", dass sie mit einem Sternchen gekennzeichnet sind):
Character devices ---> Watchdog Timer Support --> i810 TCO Character devices ---> /dev/agpgart (AGP Support) Character devices ---> Intel I810/I815/I830M (on-board) support Console->Video->Framebuffer -> i810/815 Framebuffer Console->Video->Framebuffer -> i810 use VESA GTF Console->Video->Framebuffer -> i810 enable accelerated drawing functions Console->Video->Framebuffer -> Advanced LowLevelDriver Console->Video->Framebuffer -> Advanced LowLevelDriver Optionen von Monocrom bis 32 bpp packed pixels support Console->Video->Framebuffer -> VGA 16-color planar support
menuconfig verlassen, zur Kontrolle:
pc_name:/usr/src/linux # cat .config | grep I810
Ausgabe sollte sein:
CONFIG_I810_TCO=y CONFIG_AGP_I810=y CONFIG_DRM_I810=y # CONFIG_DRM_I810_XFREE_41 is not set CONFIG_FB_I810=y CONFIG_FB_I810_GTF=y CONFIG_FB_I810_ACCEL=y
Sowie:
pc_name:/usr/src/linux# cat .config | grep FBCON
Ausgabe sollte sein:
CONFIG_FBCON_ADVANCED=y CONFIG_FBCON_MFB=y CONFIG_FBCON_CFB2=y CONFIG_FBCON_CFB4=y CONFIG_FBCON_CFB8=y CONFIG_FBCON_CFB16=y CONFIG_FBCON_CFB24=y CONFIG_FBCON_CFB32=y # CONFIG_FBCON_AFB is not set # CONFIG_FBCON_ILBM is not set # CONFIG_FBCON_IPLAN2P2 is not set # CONFIG_FBCON_IPLAN2P4 is not set # CONFIG_FBCON_IPLAN2P8 is not set # CONFIG_FBCON_MAC is not set CONFIG_FBCON_VGA_PLANES=y CONFIG_FBCON_VGA=y CONFIG_FBCON_HGA=m # CONFIG_FBCON_FONTWIDTH8_ONLY is not set # CONFIG_FBCON_FONTS is not set
Prima. Dann kanns jetzt ans Kernelbacken gehen. Erstmal reinemachen:
pc_name:/usr/src/linux # make-kpkg clean
So, dann Kernel compilieren (dauert bei mir so 20 Minuten (800MHz)) Revisionsnummer kann man sich frei ueberlegen, am einfachsten ist am Ende eine laufende Nummer, da man oft mehrere Versuche braucht... ggf muss noch in /usr/src/linux/debian/changelog die Revisionsnummer angepasst werden, sonst meckert er...
pc_name:/usr/src/linux # fakeroot make-kpkg --initrd --revision=i810fb.01 kernel_image modules_image
Fertig. Jetzt nur noch ein bisschen Ordnung reinbringen - das neue Sourcenpaket sichern
pc_name:/usr/src/linux # tar cz kernel-source-2.4.27 -f kernel-source-2.4.27-i810fb.01.tgz
Und installieren (wieder nach Debian-Art):
pc_name:/usr/src/linux # dpkg -i kernel-image-2.4.27_i810fb.01_i386.deb
In der Menu.lst ggf. noch die Modul-Optionen anpassen:
pc_name:/usr/src# pico /boot/grub/menu.lst
Beim jeweiligen Kernel als Option angeben (z.B. vor dem "ro"):
video=i810fb
Last but not least den Müll wegräumen: Symlink löschen (war je nur fuer den Patch) pc_name:/usr/src/linux # rm /usr/src/linux-2.4.23
Modulparameter
Eine Liste der Modulparameter findet sich auf der Seite des Autors (s.u.). Als erster Test kann als Kerneloption
video=i810fb
übergeben werden, wenn der Pinguin beim Booten erscheint ist alles wunderbar ;-) Finetuning dann mit den u.g. Infos.
Xine und GraphTFT haben z.B. Schwierigkeiten mit einer Pixeltiefe von 8 Bit pro Pixel. Daher sollte als Modulparameter bpp=16 übergeben werden.
Eine funktionierende Beispielkonfiguration für grub-Parameter ist z.B.
video=i810fb:bpp=16:hsync1=30:hsync2=65:vsync1=60:vsync2=60:xres=800:yres=600:vram=16:accel:mtrr:render