SyntaxHighlighter

Montag, 14. April 2014

Kompilieren von XBMC

Hier will ich nur kurz erläutern wie man xbmc auf dem Raspberry Pi "per Hand" baut.
(Alle hier verwendeten Befehle müssen als "root" ausgeführt werden.)

Voraussetzungen

  • oracle-jdk-bin (zRpi-overlay)
  • raspberrypi-userland (zRpi-overlay)
  • libmicrohttpd
  • ffmpeg
  • libbluray
  • libdvdread
  • libnfs (optional)
  • samba (optional)

Die restlichen Programme können direkt per emerge installiert werden:
# emerge raspberrypi-userland libmicrohttpd libbluray libdvdread ffmpeg libnfs samba rtmpdump

Vorbereiten der Buildumgebung (Raspberry-Pi native)

Nun müssen wir die benötigten Scripts herunterladen (wget).
# cd /usr/src/
# wget http://pastebin.com/raw.php?i=Zk47Z6gU && mv raw.php\?i\=Zk47Z6gU build.sh
# wget http://pastebin.com/raw.php?i=bA0q5FnG && mv raw.php\?i\=bA0q5FnG RPB.cpp.patch

XBMC - Kompilieren

Kommen wir nun zum "etwas" komplizierterem Teil, dem Kompilieren von XBMC:
# cd /usr/src/
# chmod + x ./build.sh
# ./build.sh

Systemd - xbmc.service

Hier der dazugehörige systemd service:

[Unit]
Description = Starts instance of XBMC using xinit
After = remote-fs.target

[Service]
User = pi
Type = simple
ExecStart = /usr/bin/xbmc-standalone --no-test

[Install]
WantedBy = multi-user.target

Ihr solltet nun stolze Besitzer eines selbst-kompiliertem xbmc sein.

Dienstag, 14. Mai 2013

Motorola Lapdock JHDMI pinout


Motorola Lapdock JHDMI pinout

Nachdem ich mir ne halbe Nacht mit dem abisolieren und zerlegen des Lapdock-PCB JHDMI connectors verbracht habe habe ich nun eine komplette Pinout-Tabelle der JHDMI Belegung und der dazugehörigen HDMI-A Belegung erstellt. Vielleicht hilft es ja jemandem sein Raspberry Pi an das Lapdock zu knoten, ich werde weiter berichten.



Mittwoch, 13. Februar 2013

distcc - Endlich schneller kompilieren

Da ich selber ab und zu mit der Konfiguration von distcc auf die Nase fliege, schreib ich heute mal nen kurzen Leitfaden für distcc (hier nur aufs Raspberry Pi bezogen).

Vorab, was ist distcc?
Distcc ist eine Server/Client Anwendung mit der sich der Kompilierprozess auf mehrere Maschinen(Knoten) verteilen lässt. Hierbei wird das Sourcefile (C/C++/Objective C/Objective C++) an den jeweiligen Knoten gesendet, kompiliert und als Objekt zurückgegeben. Dies beschleunigt, je nachdem wie viele "Jobs" auf den einzelnen Knoten zugelassen sind, die Zeit die der eigentliche Kompillierprozess benötigt erheblich.

Konfiguration eines Kontens(nicht das Raspberry PI)


Da wir distcc ja zum beschleunigen des Kompilierens auf dem Raspberry Pi verwenden wollen, bietet es sich an als erstes den cross-compiler einzurichten, siehe dazu "Crossdev für den Host".

Installtion von distcc:
# emerge distcc

Konfiguration von distcc:
Die Konfiguration von distcc ist recht einfach, hier ein Beispiel, wichtig ist das "--allow" alle zu erlaubenden Client(Raspberry Pi) IPs oder eben deren IP-Adressraum wie im unten aufgeführten beispiel enthält. Die zweite wichtige Einstellung ist --listen, sie enthält die Adresse der Netzwerkschnittstelle auf der gelauscht werden soll, 0.0.0.0 bedeutet, das auf allen Netzwerkschnittstellen gelauscht wird.
# /etc/conf.d/distccd: config file for /etc/init.d/distccd
DISTCCD_OPTS="-j8"
DISTCCD_EXEC="/usr/bin/distccd" 
DISTCCD_PIDFILE="/var/run/distccd/distccd.pid" 
DISTCCD_OPTS="${DISTCCD_OPTS} --port 3632"
DISTCCD_OPTS="${DISTCCD_OPTS} --log-level error --log-file /var/log/distcc.log"
DISTCCD_OPTS="${DISTCCD_OPTS} --allow 192.168.0.0/24"
DISTCCD_OPTS="${DISTCCD_OPTS} --listen 0.0.0.0"
DISTCCD_OPTS="${DISTCCD_OPTS} -N 15"
DISTCCD_OPTS="${DISTCCD_OPTS} --zeroconf"
Danach muss der distcc Daemon nur noch gestartet werden via:
# /etc/init.d/distccd start
Alternativ (automatischer Start des Daemons)
# rc-update add distccd default

Konfiguration des Clients (Raspberry Pi)

Auf dem Raspberry Pi muss als Erstes natürlich auch distcc installiert werden:
# emerge distcc
Als nächstes müssen wir der Portage mitteilen in Zukunft per distcc zu kompilieren, dazu fügen wir "distcc" den FEATURES hinzu. z.B. FEATURES="distcc fixlafiles". Danach sollten wir auch unsere MAKEOPTS="-j2" anheben, (bei einem Knoten mit 4 jobs wäre es dann -j6)

Jetzt muss distcc noch wissen welche Knoten es verwenden darf. Die einzelnen Knoten werden in /etc/distcc/hosts gespeichert. Um einen neuen Knoten hinzuzufügen reicht ein simpeles:
# echo "192.168.0.1/4,cpp,lzo" >> /etc/distcc/hosts
/4 bedeutet das der Knoten(192.168.0.1) maximal 4 parallele Jobs akzeptiert.

Ale letztes muss das Masquerading erstellt werden, so das auch ein händisches "make" oder "g++" distcc verwendet. Dazu sind folgende Befehle nötig:
mkdir -p /var/tmp/.distcc
chown users.portage /var/tmp/.distcc
chmod 775 /var/tmp/.distcc
cd /usr/lib/bin/distccd/bin
rm armv6j-hardfloat-linux-gnueabi-wrapper
echo -e "#!/bin/bash\nexec /usr/lib/distcc/bin/armv6j-hardfloat-linux-gnueabi-g\${0:\$[-2]} \"\$@\"" >> armv6j-hardfloat-linux-gnueabi-wrapper
chmod +x armv6j-hardfloat-linux-gnueabi-wrapper
ln -s /usr/bin/distcc armv6j-hardfloat-linux-gnueabi-c++
ln -s /usr/bin/distcc armv6j-hardfloat-linux-gnueabi-g++
ln -s /usr/bin/distcc armv6j-hardfloat-linux-gnueabi-gcc
ln -s armv6j-hardfloat-linux-gnueabi-wrapper c++
ln -s armv6j-hardfloat-linux-gnueabi-wrapper g++
ln -s armv6j-hardfloat-linux-gnueabi-wrapper gcc
sed -i '1 s/^/#/' /etc/env.d/04gcc-armv6j-hardfloat-linux-gnueabi
echo -e "PATH=\"/usr/lib/distcc/bin:\${PATH}\"\nDISTCC_DIR=\"/var/tmp/.distcc\"" > /etc/profile.d/99distcc.sh
source /etc/profile


Wenn alles geklappt hat sollte das Raspberry Pi nun erheblich schneller kompilieren.