Framebuffer i810fb

Aus VDR Wiki

Wechseln zu: Navigation, Suche

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 Authors (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

Links

  1. Siehe auch Framebuffer, softdevice-plugin, xine-plugin, graphtft-plugin
  2. Alternative Bildausgabemöglichkeiten mit Softwaredecoder
  3. i810fb Projektseite bei sf.net
  4. Anleitung des Authors
  5. Linux Graphics Drivers from Intel