Images erstellen und Programme kompilieren unter OE 1.6
Inhaltsverzeichnis
Allgemein
hier will ich mal versuchen auf zu zeigen wie man aus dem CVS/OE ein Image erstellen kann. Und anschließend ein "Programm für die Dreambox selber erstellen bzw. kompilieren kann...
Hier schreibe ich mal das neu auf so das es evlt. Jeder versteht
Zurück zum Inhaltsverzeichnis:
Erstellen eines eigenen CVS/OE images
1. ein Linuxsystem installieren bzw. einrichten (z.B.(K)Ubuntu)
2. adenin "install.sh" Script verwenden, ist hier zu finden:
CVS- sowie OE-Installation und Imagebau für Anfänger (und EgLe ;) )
3. Images erstellen hier gibt es ja mehrere Möglichkeiten.
- ein CVS-Image für die älteren Dreamboxen
- dm500
- dm56x0 (dm5600/dm5620)
- DM7000
- ein OE 1.5 oder ein OE 1.6 Image für die neueren Boxen
- dm500plus
- dm600pvr
- dm7020
- dm7025
- dm500HD
- dm800
- dm8000
Wer beim Kompilieren eines Images auf Probleme stößt, der sollte sich im Bereich
Developer Bereich CVS/Openembedded
etwas genauer umsehen, je nachdem was für ein Image er eben ausprobiert.
Ist es ein Enigma oder Enigma2 Image?
Ist es ein OE 1.5 oder ein OE 1.6 Image?
Wer z.B. Probleme haben sollte mit einem OE 1.5 Image der DB7025, kann sich mal die Fehler ansehen im Thread "OE-git 1.5 DM7025" gleiches gibt es auch für "OE-git 1.6 DM7025".
Oder wenn er in den Threads keine Lösung für sein Problem findet, eben ein neuen Thema eröffnen. Um aber die Übersicht zu wahren, wäre es nett, wenn man die Betreffzeile genauso "treffend" formulieren würde.
Weiterhin sollte man ggfs auch die Board-Suche verwenden.
Bricht z.B. das Kompilieren mit folgender Meldung ab:
NOTE: package dreambox-image-1.0-r0: task do_rootfs: started ERROR: function do_rootfs failed ERROR: see log in /media/sda8/Dreambox-Build/openembedded/1.5/dm7025/build/tmp/work/dreambox-image-1.0-r0/temp/log.do_rootfs.6697 NOTE: Task failed: /media/sda8/Dreambox-Build/openembedded/1.5/dm7025/build/tmp/work/dreambox-image-1.0-r0/temp/log.do_rootfs.6697 NOTE: package dreambox-image-1.0-r0: task do_rootfs: failed ERROR: TaskFailed event exception, aborting NOTE: package dreambox-image-1.0: failed ERROR: Build of dreambox-image failed make: *** [image] Fehler 1
Kann man in der Bordsuche z.B. recht schön nach ERROR: function do_rootfs failed suchen lassen.
Wenn es also nun zu Abbrüchen kommt, sollte man versuchen die Fehlermeldung
zu entschlüsseln und ggfs ein fehlendes Paket nachinstallieren, was man noch
benötigt oder im CVS Bereich dann ein Posting eröffnen ;)
Naja, einige Fehler möchte ich dokumentieren ;)
ERROR: gstreamer-0.10.21: http://gstreamer.freedesktop.org/src/gstreamer/gstreamer-0.10.21.tar.bz2 has no entry in conf/checksums.ini, not checking URI ERROR: Error in executing: ERROR: Exception:<type 'exceptions.SystemExit'> Message:1 ERROR: Printing the environment of the function ERROR: Error in executing: ERROR: Exception:<type 'exceptions.SystemExit'> Message:1 ERROR: Printing the environment of the function ERROR: Build of /home/egle/db8000-image/dm8000/openembedded/packages/gstreamer/gstreamer_0.10.21.bb do_fetch failed ERROR: Task 1400 (/home/egle/db8000-image/dm8000/openembedded/packages/gstreamer/gstreamer_0.10.21.bb, do_fetch) failed NOTE: Tasks Summary: Attempted 286 tasks of which 0 didn't need to be rerun and 1 failed. ERROR: '/home/egle/db8000-image/dm8000/openembedded/packages/gstreamer/gstreamer_0.10.21.bb' failed make: *** [image] Fehler 1
Wenn Ihr so was bekommt, wo Ihr seht, dass der Download fehlgeschlagen ist. Und Ihr aber seht, dass dies in den Sourcen alles aber runter geladen wurde.
Könnte es euch helfen, den checksum-test zu umgehen...
rm openembedded/conf/checksums.ini
Oder wie ich es einfach mit dem Dateimanager gelöscht ;(
Dann geht das Kompilieren weiter, aber es erscheint solch eine Meldung im Fenster:
NOTE: No conf/checksums.ini found, not checking checksums
Eine Bessere Lösung um den Checksum-Error loszuwerden, wäre auch (erspart vor allem Ärger bei einem späteren pull):
echo 'OE_ALLOW_INSECURE_DOWNLOADS = "1"' >> $MACHINE/build/conf/local.conf
Sollte das ganze mal so abbrechen (connetction time out)
Resolving core.fluendo.com... 195.10.6.237 Connecting to core.fluendo.com|195.10.6.237|:80... failed: Connection timed out. Retrying.
--18:58:37-- http://core.fluendo.com/gstreamer/src/gst-fluendo-mpegdemux/gst-fluendo-mpegdemux-0.10.15.tar.gz (try: 2) => `/home/egle/db8000-image/sources/gst-fluendo-mpegdemux-0.10.15.tar.gz' Connecting to core.fluendo.com|195.10.6.237|:80... failed: Connection timed out. Retrying.
--19:01:48-- http://core.fluendo.com/gstreamer/src/gst-fluendo-mpegdemux/gst-fluendo-mpegdemux-0.10.15.tar.gz (try: 3) => `/home/egle/db8000-image/sources/gst-fluendo-mpegdemux-0.10.15.tar.gz' Connecting to core.fluendo.com|195.10.6.237|:80...
und Ihr die angegebe Domain selbst mit dem Browser nicht erreichen könnt, ist der entsprechende Server wohl wirklich zur Zeit nicht erreichbar.
Hier müsst ihr euch eben gedulden und das ganze mal einen Tag später wieder probieren oder einen Workaround zur Hilfe nehmen ;)
Sucht Euch das entsprechende Tarball von einer anderen Quelle und kopiert es dann in den Ordner, in dem die Sourcen abgelegt werden. Hier im Beispiel dann eben "/openembedded/sources". Danach kann es weitergehen....
Einige Stunden an Zeit sollte man sich aber schon einplanen ;)
Zurück zum Inhaltsverzeichnis:
Image erstellt, wie dann aktualisieren?
Hierzu habe ich auch einen Thread im IHAD eröffnet, der Antworten bringt ;)
Image erstellt, wie dann aktualisieren?
Zurück zum Inhaltsverzeichnis:
openembedded reparieren
Sollte es mal vorkommen, dass man sich das openembedded zerschossen hat oder einige der .bb-files gelöscht oder verhunzt hat und weiß nicht mehr, wie man das wieder reparieren kann/soll, gibt es natürlich auch die Möglichkeit, sein openembedded wieder reparieren zu lassen.
Gehe in das Verzeichnis openembedded und führe dort folgende Befehle aus:
git checkout -f git pull
So kann man auch das System reparieren.
Danach muss man natürlich eventuelle Änderungen, die man an den *.bb's gemacht hatte, wieder erneut eintragen (z.B. von 2.5 auf 2.6).
Zurück zum Inhaltsverzeichnis:
Bitbake - Befehle Manuell absetzen
- ins build-Verzeichnis des entsprechenden Images wechseln.
bitbake -cclean dreambox-image rm -rf tmp/deploy/images/* bitbake dreambox-image
Zurück zum Inhaltsverzeichnis:
Beschleunigung der Image-Erstellung durch Doppelkern
Ob dies Sinnvoll ist oder nicht?
Ob es mehr Probleme als Vorteile mit sich bringt?
Will ich hier nicht erläutern, dazu ist das Forum gut..
Aber zu diesem Thema gibt es auch einen eigenen Thread im IHAD-Forum:
Beschleunigung der Image-Erstellung durch Doppelkern
Zurück zum Inhaltsverzeichnis:
Programme für die Dreambox Kompilieren
Hier gibt es natürlich wie Überall auch immer mehrere Varianten und Möglichkeiten.
Einige will ich hier incl. nachvollziehbaren Beispielen aufzeigen.
Zurück zum Inhaltsverzeichnis:
Errichten der Kompilierungsumbebung
Wenn man schon ein OE-Image gebacken hat, heißt das Zauberwort "devshell".
Also man wechselt ins Built-Verzeichnis des entsprechenden Images, hier mal z.B.: openembedded/1.5/dm8000/build
Und führt dort folgende Befehle aus:
source env.source
Danach eben das "devshell" per bitbake ausführen:
bitbake devshell NOTE: Psyco JIT Compiler (http://psyco.sf.net) not available. Install it to increase performance. NOTE: Using cache in '/media/sda8/Gemini/Entwicklung/openembedded/1.5/dm8000/cache/oe-cache.egle' NOTE: Handling BitBake files: / (4131/4131) [100 %] NOTE: Parsing finished. 3942 cached, 0 parsed, 161 skipped, 28 masked. NOTE: build 200901021926: started OE Build Configuration: BB_VERSION = "1.6.8" OE_REVISION = "<unknown>" TARGET_ARCH = "mipsel" TARGET_OS = "linux" MACHINE = "dm8000" DISTRO = "opendreambox" DISTRO_VERSION = "1.5.0" TARGET_FPU = "soft" NOTE: package devshell-1.0: started NOTE: package devshell-1.0-r1: task do_fetch: started NOTE: package devshell-1.0-r1: task do_fetch: completed NOTE: package devshell-1.0-r1: task do_unpack: started NOTE: Unpacking /media/sda8/../openembedded/1.5/openembedded/packages/addons/devshell.bb to /media/sda8/../openembedded/1.5/dm8000/build/tmp/work/devshell-1.0-r1/ NOTE: package devshell-1.0-r1: task do_unpack: completed NOTE: package devshell-1.0-r1: task do_patch: started NOTE: package devshell-1.0-r1: task do_patch: completed NOTE: package devshell-1.0-r1: task do_configure: started NOTE: package devshell-1.0-r1: task do_configure: completed NOTE: package devshell-1.0-r1: task do_compile: started NOTE: package devshell-1.0-r1: task do_compile: completed NOTE: package devshell-1.0-r1: task do_install: started NOTE: package devshell-1.0-r1: task do_install: completed NOTE: package devshell-1.0-r1: task do_package: started NOTE: package devshell-1.0-r1: task do_package: completed NOTE: package devshell-1.0-r1: task do_populate_staging: started NOTE: package devshell-1.0-r1: task do_populate_staging: completed NOTE: package devshell-1.0-r1: task do_build: started NOTE: package devshell-1.0-r1: task do_build: completed NOTE: package devshell-1.0: completed NOTE: build 200901021926: completed Build statistics: Attempted builds: 1
So damit hat man nun die build environment geschaffen um mit fremden oder eigene geschriebene Sourcen kompilieren zu können, zu finden dann in /build/tmp/deploy/addons
Im Verzeichnis /build/tmp/deploy/addons findet man nun die mipsel-linux-opendreambox-dm8000-devshell
Führt man dies nun in der Konsole (Terminal) aus sieht man vorne nun folgendes stehen:
[OE::mipsel-linux-opendreambox-dm8000]:~$
So nun wären wir in dieser Umgebung bereit zum Kompilieren für die Dreambox ;)
Zurück zum Inhaltsverzeichnis:
Kompilieren mit eigenem Programmcode
Als kleines Beispiel für ein eigenes erstes Programm für die Dreambox will ich mal das "wohl bekannteste Programm der Welt als Test misbrauchen. Ich rede hier von dem "Hello World", was ich aber natürlich abgewandelt habe..
Wir erstellen uns erstmal noch ein Test-Verzeichnis in /build/tmp/deploy/addons Namens test.
[OE::mipsel-linux-opendreambox-dm8000]:/..../build/tmp/deploy/addons$ mkdir test
Wechseln nun ins neu erstellte Verzeichnis:
[OE::mipsel-linux-opendreambox-dm8000]:/..../build/tmp/deploy/addons$ cd test [OE::mipsel-linux-opendreambox-dm8000]:/..../build/tmp/deploy/addons/test$[/code]
Dann nehmen wir uns einen guten Editor und erstellen unser erstes eigenes C++ Programm...
#include <stdio.h>
int main(int argc, char *argv[]) { printf("Welcome on your Dreambox 8000\n"); return 0; }
Und speichern dieses mit dem Namen "Hello_Dreambox.c" im Testverzeichis ab. Das .c am Ende zeichnet diese Textdatei als C-code aus ;)
Im Terminal versuchen wir nun unser Programm zu kompilieren:
mipsel-linux-gcc Hello_Dreambox.c -o hello-dreambox
Da ich im OE der Dreambox 8000 bin und diese ja den "mipsel" als CPU nutzt kompilieren wir das ganze als "mipsel-linux-gcc", der fertige Programmname der "bindatei" lautet dann hello-dreambox
nun finden wir in unserem Testverzeichnis folgende Daten:
- Hello_Dreambox.c
- hello-dreambox (das fertige Programm als Bindatei)
Zum testen ob es funktioniert, können wir unser erstes Programm auf die Dreambox ins Tempverzeichnis kopieren und loggen uns in die Dreambox ins Tempverezeichnis ein und versuchen unser erstes erstelltes Programm auszuführen ;)
root@dm8000:~# cd /tmp root@dm8000:/tmp# ./hello-dreambox Welcome on your Dreambox 8000 root@dm8000:/tmp#
Voila unser erstes selbst geschriebenes und Kompiliertes Programm für die Dreambox....
Zurück zum Inhaltsverzeichnis:
Kompilieren aus Tarballs (fremden, eigene oder interne Quellen)
Hierbei gibt es auch mehrere Möglichkeiten wie man dies Bewerkstelligen kann.
Zurück zum Inhaltsverzeichnis:
über OE-RUNCONF
Das nächste was wir nun mal versuchen können wäre ein Tarball zu entpacken und diesen zu kompilieren, hier nehme ich mal als Beispiel das tar-1.21-20081229.tar.gz Dies kann an hier downloaden: ftp://download.gnu.org.ua/pub/alpha/tar/
Nun entpacken wir den Tarball wieder in unser "addons" Verzeichnis und wechlsen dann ins entpackte Tarverzeichnis.
[OE::mipsel-linux-opendreambox-dm8000]:/.../deploy/addons$ cd tar-1.21-20081229/
Tarballs werden normalerweise ja im bekannten dreisatz kompiliert
./configure make make install
Da wir aber in einer OE-Umgebung sind können wir das aber so nicht anwenden.
Hier geben wir nun folgendes ein:
oe_runconf
Das ganze sollte hierbei Fehlerfrei durchlaufen und so ungefähr aussehen:
config.status: executing depfiles commands config.status: executing po-directories commands config.status: creating po/POTFILES config.status: creating po/Makefile config.status: executing tests/atconfig commands [OE::mipsel-linux-opendreambox-dm8000]:/.../1.5/dm8000/build/tmp/deploy/addons/tar-1.21-20081229$[/code]
nun können wir da das Makefile geschrieben wurde es auch kompilieren.
make
auch dies ist wieder sauber durchgelaufen (zum Glück):
make[2]: Verlasse Verzeichnis '/media/sda8/oe-build/openembedded/1.5/dm8000/build/tmp/deploy/addons/tar-1.21-20081229' make[1]: Verlasse Verzeichnis '/media/sda8/oe-build/openembedded/1.5/dm8000/build/tmp/deploy/addons/tar-1.21-20081229' [OE::mipsel-linux-opendreambox-dm8000]:/media/sda8/oe-build/openembedded/1.5/dm8000/build/tmp/deploy/addons/tar-1.21-20081229$
Im Unterverzeichnis src befindet sich hier nun auch das Fertige Progamm tar als Binary
und könnte nun auch in die Dreambox kopiert und benutzt werden.
Zurück zum Inhaltsverzeichnis:
über autotools_do_configure
Kann man z.B. schnell testen mit den cvs sourcen des grabs ...
man legt ein Verzeichnis an und holt sich die sourcen via cvs:
[OE::mipsel-linux-opendreambox-dm8000]:~$ mkdir grabcvs [OE::mipsel-linux-opendreambox-dm8000]:~$ cd grabcvs [OE::mipsel-linux-opendreambox-dm8000]:~/grabcvs$ cvs -d :pserver:anonymous@cvs.schwerkraft.elitedvb.net:/cvsroot/aio-grab checkout aio-grab cvs checkout: CVS password file /home/seddi/.cvspass does not exist - creating a new file cvs checkout: Updating aio-grab U aio-grab/.cvsignore U aio-grab/LICENSE U aio-grab/Makefile.am U aio-grab/README U aio-grab/configure.ac U aio-grab/main.c [OE::mipsel-linux-opendreambox-dm8000]:~/grabcvs$
Dann könnt ihr in das heruntergeladene Verzeichnis wechseln ein autotools_do_configure (erzeugt aus der configure.ac das configure script und führt es aus) machen und danach das Ganze mit make kompilieren:
[OE::mipsel-linux-opendreambox-dm8000]:~/grabcvs$ cd aio-grab/ [OE::mipsel-linux-opendreambox-dm8000]:~/grabcvs/aio-grab$ autotools_do_configure automake (GNU automake) 1.9.3 Written by Tom Tromey <tromey@redhat.com>.
Copyright 2004 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. AUTOV is 1.9 ... ... ... configure: creating ./config.status config.status: creating Makefile config.status: executing depfiles commands [OE::mipsel-linux-opendreambox-dm8000]:~/grabcvs/aio-grab$
[OE::mipsel-linux-opendreambox-dm8000]:~/grabcvs/aio-grab$ make NOTE: make if ccache mipsel-linux-gcc -DPACKAGE_NAME=\"\" -DPACKAGE_TARNAME=\"\" -DPACKAGE_VERSION=\"\" -DPACKAGE_STRING=\"\" -DPACKAGE_BUGREPORT=\"\" -DPACKAGE=\"grab\" -DVERSION=\"0.8\" -I. -I. -I/home/seddi/openembedded/dm8000/build/tmp/staging/mipsel-linux/include -I/home/seddi/openembedded/dm8000/build/tmp/staging/mipsel-linux/include -fexpensive-optimizations -fomit-frame-pointer -frename-registers -O2 -MT main.o -MD -MP -MF ".deps/main.Tpo" -c -o main.o main.c; \ then mv -f ".deps/main.Tpo" ".deps/main.Po"; else rm -f ".deps/main.Tpo"; exit 1; fi ccache mipsel-linux-gcc -I/home/seddi/openembedded/dm8000/build/tmp/staging/mipsel-linux/include -fexpensive-optimizations -fomit-frame-pointer -frename- egisters -O2 -L/home/seddi/openembedded/dm8000/build/tmp/staging/mipsel- linux/lib -Wl,-rpath-link,/home/seddi/openembedded/dm8000/build/tmp/staging/mipsel-linux/lib -Wl,-O1 -o grab main.o -ljpeg -lpng -lz [OE::mipsel-linux-opendreambox-dm8000]:~/grabcvs/aio-grab$
Schwupp und schon habt ihr das fertige grab das ihr auf die Box kopieren könnt (chmod nicht vergessen) und benutzen :)
[OE::mipsel-linux-opendreambox-dm8000]:~/grabcvs/aio-grab$ ls -la grab -rwxr-xr-x 1 seddi seddi 106738 2009-01-02 19:46 grab
Zurück zum Inhaltsverzeichnis:
über die .bb-Datei (Recipe)
"Recipe" ist nur der coole Ausdruck für "Anleitung für bitbake damit es weiss wie das Paket gebaut werden muss"
TEXT fehlt noch muss erst genauerer Recherchiert werden von mir...
Zurück zum Inhaltsverzeichnis:
Externe Links
Was brauche ich um eigene Programme auf der Dreambox zu kompilieren?
Zurück zum Inhaltsverzeichnis:
Zurück zur Übersicht:Gemini-Wiki:Portal oder Hauptseite