Hallo zusammen!
Nachdem ich mit Hilfe von Stefan Lucke (alisas stl) und Mark Adams (DirectFB ML) auch die Bildausgabe über einen CN700er Chipsatz von VIA mittels Softdevice und DirectFB geniessen kann, möchte ich die Ergebnisse hier als Howto zusammenfassen.
Das Howto basiert auf den bereits bekannten CLE266 Howtos von hier oder hier. Dank an dieser Stelle auch an die Verfasser dieser Howtos, da mir diese als Grundlage dienten.
Update 27.01.2007: Der Patch softdevice-dfb-CN700-01.diff ist im CVS drin und wird nicht mehr benötigt. Danke an Stefan Lucke!
Update 29.01.2007: TV Unterstützung und PAL Mode aktualisiert.
Einleitung:
Da der CN700er Chipsatz von VIA keinen echten CLE266 Beschleuniger hat und nicht zu diesem kompatibel ist, muss dieser gesondert behandelt werden. Durch die Inkompatibilität wird leider auch die integrierte MPEG2 Beschleunigung nicht unterstützt.
Weitere Infors zum Chipsatz gibt es bei VIA: http://www.via.com.tw/en/products/chipsets/c-series/cn700/
Aktueller Entwicklungsstand (29.01.2007):
MPEG2: nein
HDTV: nein
TV Out: Ja
Pixelformat: NUR YUY2
CPU Auslastung: C7@1200 - 50-60%
Verwendete Software
Alle benötigten Patches befinden sich im Anhang (Attachment) zu diesem Howto
System: LFS
Kernel: 2.6.19.1
GCC: 4.1.1
VDR: 1.4.4
Softdevice: CVS =>27.01.2007
DirectFB Version: 1.0.0-rc2 (oder CVS 20.01.2007) + DirectFB-unichrome-v3-cn700.diff (von Mark Adams)
Framebuffer: VIATV von VIA (FBDev-2.6.00.02a)
HOWTO (Stand 29.01.2007):
Framebuffer Treiber: Viafb
Der CN700 wird nur richtig vom VIA Originaltreiber unterstützt. Sämtliche Framebuffer Treiber (vesafb, vesafb-tng, viafb,...) sollten also im Kernel deaktiviert werden (bzw. Module dürfen nicht geladen sein).
Anmerkung: Der Treiber von http://davesdomain.org.uk/viafb/ könnte eventuell auch funktionieren, was ich jedoch nicht richtig getestet habe. TVOut wird von diesem Treiber (noch) nicht unterstützt, was aber nicht so schlimm ist, da der DirectFB Treiber das mit diesem Chip auch nicht kann.
Für Kernel =>2.6.18 sollte zusätzlich der Patch Linux-2.6.18-FBDev-2.6.00.02a.patch angewandt werden. Quelle: http://forums.viaarena.com/messageview.aspx?catid=28&threadid=70726&messageid=479718
Der Quellcode kann unter http://www.viaarena.com/default.aspx?PageID=420&OSID=25&CatID=2580&SubCatID=158 (Direktlink) heruntergeladen werden.
Bevor man loslegt, muss man die Kernel-Sourcen installieren. Diese sollten unter /usr/src/linux liegen.
WICHTIG: Im BIOS sollte man "Direct Framebuffer" aktivieren, falls vorhanden.
Folgendes in der Konsole eingeben, wenn alles bereit ist:
cd /usr/src
wget http://www.viaarena.com/Driver/linux-fbdev-kernel-src_2.6.00.02a.tgz
tar -xzf linux-fbdev-kernel-src_2.6.00.02a.tgz
cd Linux-FBDev-kernel-src_2.6.00.02a
Nur für Kernel 2.6.18 und neuer:
wget http://vdr-portal.de/board/attachment.php?attachmentid=13498 -O ../Linux-2.6.18-FBDev-2.6.00.02a.diff
patch -p1 < ../Linux-2.6.18-FBDev-2.6.00.02a.diff
Nun muss man die Beschleunigung reparieren:
cp accel.h accel.h.bak
sed -e 's:#define FB_ACCEL_VIA_UNICHROME 50:#define FB_ACCEL_VIA_UNICHROME 77:' accel.h.bak > accel.h
und anschliessend kompilieren mit:
make && make install
cp /etc/fb.modes /etc/fb.modes.bak
cp ./viafb.modes /etc/fb.modes
Nun kann man das Modul laden.
modprobe viafb accel=1 refresh=60 bpp=32 mode=800x600
Ich verwende mode=800x600, da mein TFT kein 720x576 mit dem Treiber kann.
oder mit TV-Out:
modprobe viafb accel=1 active_dev=TV CRT_ON=0 TV_ON=1 refresh=50 tv_system=2 tv_level=2 tv_out_signal=16 mode=720x576
Weitere Infos zu den Parametern kann man der readme.txt entnehmen. Man kann auch mit entsprechenden Optionen, Monitor und TV gleichzeitig aktivieren, aber dabei wird die Bildausgabe nur auf dem ersten Gerät (active_dev=X) angezeigt.
Wenn man die PAL Ausgabe über fbset aktivieren möchte, muss man zuerst die richtigen Timings in der /etc/fb.modes ergänzen:
cat <<EOF >>/etc/fb.modes
mode "720x576-50"
geometry 720 576 720 576 32
timings 74074 68 12 39 5 64 5
bcast true
laced true
endmode
EOF
und dann mit "fbset 720x576-50" aktivieren.
"fbset -i" sollte jetzt folgendes liefern:
Frame buffer device information:
Name : Via
Address : 0xf4000000
Size : 66830336
Type : PACKED PIXELS
Visual : TRUECOLOR
XPanStep : 0
YPanStep : 1
YWrapStep : 0
LineLength : 3200
MMIO Address: 0xfb000000
MMIO Size : 16777216
Accelerator : Unknown (77)
Display More
libcle266mpegdec:
Obwohl die MPEG2 Beschleunigung nicht verwendet wird, muss man diese Lib installieren, da Softdevice sonst den gesamnten CLE266 Code nicht verwendet.
Die aktuelle Version findet man hier: http://sourceforge.net/project/showfiles.php?group_id=176530&package_id=203064
cd /usr/src
wget http://mesh.dl.sourceforge.net/sourceforge/cle266mpegdec/libcle266mpegdec-0.5.tar.gz
tar xvf libcle266mpegdec-0.5.tar.gz
cd libcle266mpegdec-0.5
./configure --prefix=/usr
make
make install
cd ..
FFmpeg:
Viele Distributionen bringen FFMPEG als Paket mit, was eigentlich reichen sollte. Wenn man sich für das Distributionspaket entscheidet, sollte man das ffmpeg-dev Paket (header) auch installieren. Ansonsten selber kompilieren:
svn checkout svn://svn.mplayerhq.hu/ffmpeg/trunk ffmpeg
cd ffmpeg/
./configure --prefix=/usr --disable-ffserver --disable-ffplay --disable-bktr --disable-ipv6 \
--enable-shared \
--enable-gpl --enable-pp --disable-debug --disable-altivec \
--disable-audio-oss --disable-v4l \
--disable-dv1394 --disable-network
make && make install && make install-libs && make install-headers
cd ..
DirectFB:
Momentan wird der Chipsatz von DirectFB nicht richtig unterstützt. Deshalb muss man die aktuelle Version patchen. Der Patch stammt von Mark Adams und ist hier zu finden: http://mail.directfb.org/pipermail/dire…uly/002037.html
Ich habe diesen Patch an die aktuelle Version von DirectFB angepasst und als Attachment (DirectFB-unichrome-v3-cn700.diff) drangehangen.
Achtung: Der Patch verändert den Treiber, statt diesen zu erweitern! Der Betrieb mit anderen Unichrome Chipsätzden ist mit dem Patch nicht möglich!
Zuerst muss man die Sourcen besorgen. Entweder man nimmt die aktuelle Version (1.0.0-rc2):
wget http://www.directfb.org/downloads/Core/DirectFB-1.0.0-rc2.tar.gz
Oder eine noch aktuellere von CVS:
cvs -d:pserver:anonymous@cvs.directfb.org:/cvs/directfb -z3 co -P DirectFB
Es kann passieren, dass sich was am Quellcode des unichrome Treibers ändert und der Patch sich nicht mehr anwenden lässt. Wenn die Änderung nicht die Unterstützung des CN700er ist (;) was den Patch überflüssig machen würde), dann muss man den Patch anpassen oder eine ältere CVS Version nehmen. Der aktuelle Patch funktioniert mit der Version vom 23.01.2007:
cvs -d:pserver:anonymous@cvs.directfb.org:/cvs/directfb -z3 co -D "2007-01-23" -P DirectFB
Patchen:
wget http://vdr-portal.de/board/attachment.php?attachmentid=13505 -O DirectFB-unichrome-v3-cn700.diff
cd DirectFB/gfxdrivers/unichrome/
patch -p1 < ../../../DirectFB-unichrome-v3-cn700.diff
cd ../../..
Danach muss man DirectFB kompilieren und installieren:
cd DirectFB/
./autogen.sh
./configure --prefix=/usr --disable-video4linux --disable-x11 --disable-vnc --disable-sdl \
--disable-sse \
--with-gfxdrivers=cle266,unichrome --with-inputdrivers=lirc
make && make install
cd ..
DFB++:
Hier kann man einfach die aktuelle CVS Version nehmen:
cvs -d:pserver:anonymous@cvs.directfb.org:/cvs/directfb -z3 co -P DFB++
cd DFB++/
export PKG_CONFIG_PATH=/usr/lib/pkgconfig
./autogen.sh
./configure --prefix=/usr
make && make install
cd ..
DirectFB konfigurieren:
Nun muss man die Datei /etc/directfbrc erzeugen:
cat <<EOF >/etc/directfbrc
fbdev=/dev/fb0
mode=720x576
depth=32
pixelformat=AiRGB
unichrome-revision=17
disable-module=cle266
no-vt
EOF
Ich benutze mode=800x600, da mein Monitor die PAL Auflösung nicht unterstützt.
unichrome-revision=17 ist wichtig, da sonst die Farben nicht richtig dargestellt werden. Falls das nicht hilft, kann man mit
set `od -j246 -N1 -Ax -td1 /proc/bus/pci/00/00.0`; echo $2
versuchen die eigene Revision auszulesen, oder den Eintrag ganz wegzulassen.
Mit "dfbinfo" kann man nun die Konfiguration überprüfen. Folgendes gibt dfbinfo bei mir aus:
# dfbinfo
=======================| DirectFB 1.0.0-rc3 |=======================
(c) 2001-2006 United Cultures of Earth - go for outer space!
(c) 2000-2004 Convergence (integrated media) GmbH
----------------------------------------------------------------
(*) DirectFB/Core: Single Application Core. (2007-01-18 22:15)
(*) Direct/Thread: Running 'LiRC Input' (INPUT, 30078)...
(*) DirectFB/Input: LIRC Device 0.2 (directfb.org)
(*) DirectFB/Genefx: MMX detected and enabled
(*) Direct/Modules: suppress module 'cle266'
(*) DirectFB/Graphics: VIA/S3G CN700/Unichrome Pro 0.4 (-)
(*) DirectFB/Core/WM: Default 0.2 (directfb.org)
Screen (00) FBDev Primary Screen (primary screen)
Caps: VSYNC POWER_MANAGEMENT
Layer (00) VIA CLE266 Graphics (primary layer)
Type: GRAPHICS
Caps: SURFACE OPACITY ALPHACHANNEL SRC_COLORKEY BRIGHTNESS CONTRAST SATURATION
Layer (01) VIA Unichrome Video 3
Type: GRAPHICS VIDEO STILL_PICTURE
Caps: SURFACE OPACITY SCREEN_LOCATION DEINTERLACING DST_COLORKEY LEVELS FIELD_PARITY SCREEN_POSITION SCREEN_SIZE
Layer (02) VIA Unichrome DVD Subpicture
Type: GRAPHICS VIDEO STILL_PICTURE
Caps: SURFACE OPACITY
Input (03) LIRC Device (primary remote control)
Type: REMOTE
Caps: KEYS
Display More
VDR und Softdevice:
Ab CVS Version vom 27.01.2007 erkennt Softdevice dank Stefan Lucke ob der Treiber sich mit "Layer (01) VIA Unichrome Video 3" (neu!) oder mit "Layer (01) VIA Unichrome Video" (alt!) meldet und schaltet bei dem gepatchten Treiber auf YUY2 ohne MPEG2 Decoder um. Für ältere Versionen wird der Patch softdevice-dfb-CN700-01.diff (Anhang) benötigt (siehe Originalthread: http://vdr-portal.de/board/thread.php?threadid=59750).
Die Beschreibung der Installation von VDR lasse ich weg. Ich gehe davon aus, dass man die VDR Sourcen nach /usr/src/VDR entpackt und VDR kompiliert und installiert hat.
cd /usr/src/VDR/PLUGINS/src
cvs -d:pserver:anonymous@cvs.softdevice.berlios.de:/cvsroot/softdevice co softdevice
cd softdevice
Update 26.01.07: Weiter im Thread wurde von Fehlermeldungen wie
"unimplemented: seek offset 159610 whence 0"
berichtet, was auf eine Änderung in der aktuellen SVN Version von FFmpeg zurückzuführen ist. Wenn diese Fehlermeldungen auftreten, muss folgender Patch angewandt werden:
wget -O ffmpeg-streaming.diff http://vdr-portal.de/board/attachment.php?attachmentid=13528
patch -p1 < ffmpeg-streaming.diff
Und dann weiter mit:
./configure --disable-vidix --disable-fb --disable-xv --disable-shm
cd ../../..
make plugins
Nun das Plugin ggf. strippen und ins eigene VDR-Lib Verzeichnis kopieren.
VDR starten:
Nun kann man versuchen ein Bild auf den Monitor zu bekommen indem man Softdevice mit den richtigen Parametern startet:
./vdr -P"softdevice -vo dfb:cle266:viatv"
Wenn alles geklappt hat, sieht man ein Bild auf dem Monitor oder Fernseher.
Quellen:
CLE266 Howtos: http://vdr-portal.de/board/thread.php?threadid=54876 und http://www.mellander.org/per/projects/l…=epia-hw-cle266
DirectFB ML: http://mail.directfb.org/pipermail/dire…ary/002511.html und http://mail.directfb.org/pipermail/dire…uly/002037.html
Diskussion (Basis für dieses Howto): http://vdr-portal.de/board/thread.php?threadid=59750
Besonderer Dank an Stefan Lucke (alisas stl) und Mark Adams für die Hilfe und die Anpassungen der Quellen, sowie an TomSoniq für das ausgiebige Testen und Berichten.
Ich hoffe bald dieses Howto um neue Funktionen und Gegebenheiten anpassen zu können ![smile :)](https://www.vdr-portal.de/images/smilies/emojione/263a.png)
Gruß,
Sevo