====== lcd4linux ====== {{tag>project UEBLES_GEMURKSE software hardware electronics computing howto}} ====== Statisch gelinkt bauen ====== Da lcd4linux aktuell nicht in den Paketquellen von Alpine Linux enthalten ist und der Prozess zum Bauen eines Alpine-Paketes (siehe [[https://wiki.alpinelinux.org/wiki/Creating_an_Alpine_package]]) auch nicht "mal eben schnell" zu durchlaufen ist, wurde es kurzerhand wie im Folgenden beschrieben statisch gelinkt auf einem anderen System gebaut und von dort auf den Snapclient kopiert und dort dem Overlay hinzugefügt.\\ Voraussetzung: ein 32-bittiges x86-Linux, im Beispiel ein Debian 6.0 i386 in einem chroot, Details weichen bei anderen Versionen oder Distributionen natürlich ab.\\ - Paketquellen aktualisieren: ''apt-get update'' - Benötigte Pakete zum Bauen installieren ''apt-get install build-essential autoconf automake libgd2-noxpm-dev'' - Bibliotheken für lcd4linux installieren: ''apt-get build-dep lcd4linux'' - Quellen für lcd4linux herunterladen: ''apt-get source lcd4linux'' - Ins Quellen-Verzeichnis wechseln: ''cd lcd4linux-'' - Skripte zum bauen erstellen: ''./bootstrap'' - Nun folgen ein paar verkettete Befehle, einfach, damit es zügig geht:\\ make clean && CFLAGS="-static -m32 -mcpu=i486" ./configure --enable-static --disable-shared '--with-drivers=all,!EFN,!SamsungSPF,!HD44780-I2C,!LEDMatrix,!X11' '--with-plugins=all,!dbus,!hddtemp,!imon,!kvv,!mpris_dbus,!pop3' && make -j8 CCLD='$(CC) -all-static' && strip lcd4linux - ''make clean'' räumt eventuelle Reste von frühreren Bauvorgängen auf - ''CFLAGS=...'' - weist den Compiler an, statische Binaries zu bauen (''-static'')) - 32bit-Code zu erzeugen (''-m32'') - keine Instruktionen die ein 486er nicht auch könnte zu benutzen (''-mcpu=i486'') - ''./configure ...'' erstellt das Makefile anhand der Parameter und Systemkonfiguration - statische Bibliotheken bauen (''--enable-static'') - **keine** dynamischen Bibliotheken bauen (''--disable-shared'') - alle Treiber zu bauen außer denen, die mit ''!'' angegeben sind, da diese unerfüllbare Abhängigkeiten haben oder sonstwie Probleme bereiten beim statischen Linken ('''--with-drivers=all,!EFN,!SamsungSPF,!HD44780-I2C,!LEDMatrix,!X11''') - alle Plugins bauen außer denen, die mit ''!'' angegeben sind, da diese unerfüllbare Abhängigkeiten haben oder sonstwie Probleme bereiten beim statischen Linken ('''--with-plugins=all,!dbus,!hddtemp,!imon,!kvv,!mpris_dbus,!pop3''') - ''make ...'' compiliert alle Quelldateien und linkt anschließend das Programm - benutze bis zu 8 Kerne gleichzeitig beim Compilieren (''-j8'') - linke alle Programm rein statisch, normalerweise sollte das ''./configure'' einstellen, aber hier scheint das nicht vorgesehen zu sein, deswegen dieser "Trick" (''CCLD='$(CC) -all-static''') - ''strip lcd4linux'' Entferne nicht benötigte Daten aus dem fertigen Program (vor allem Debug-Informationen) - Hat alles geklappt (keine Fehler), sollte ein ''ldd lcd4linux'' folgende Ausgabe erzeugen:\\ '' not a dynamic executable'' - Zum Vergleich: Wäre lcd4linux dynamisch gelinkt, würde die Ausgabe so oder so ähnlich aussehen:\\ linux-gate.so.1 => (0xf7f98000) libncurses.so.5 => /lib/libncurses.so.5 (0xf7f4c000) libX11.so.6 => /usr/lib/libX11.so.6 (0xf7e2f000) libgd.so.2 => /usr/lib/libgd.so.2 (0xf7ded000) ... /lib/ld-linux.so.2 (0xf7f9a000) libXau.so.6 => /usr/lib/libXau.so.6 (0xf7530000) libXdmcp.so.6 => /usr/lib/libXdmcp.so.6 (0xf752b000) - Nun kann man lcd4linux auf einen snapclient kopieren: ''scp lcd4linux root@lounge.snapcast.shack:/usr/local/bin/lcd4linux'' - Fertig! ====== OpenRC-Initscript ====== Damit lcd4linux als Service automatisch gestartet werden kann, braucht es noch ein einfaches OpenRC-Initscript:\\ cat > /etc/init.d/lcd4linux <<< EOF #!/sbin/openrc-run CONFIG=/etc/lcd4linux.conf PID=/var/run/lcd4linux.pid depend() { after lm_sensors modules hwdrivers networking } checkconfig() { if [ ! -f ${CONFIG} ]; then eerror "Configuration file ${CONFIG} not found" return 1 fi } start() { checkconfig || return 1 ebegin "Starting lcd4linux" start-stop-daemon --start --quiet --background --pidfile ${PID} \ --exec /usr/local/bin/lcd4linux -- -f ${CONFIG} -v eend ${?} } stop() { ebegin "Stopping lcd4linux" start-stop-daemon --stop --pidfile ${PID} eend ${?} } EOF Nun einfach mit ''rc-update add lcd4linux default'' lcd4linux dem Default-Runlevel hinzufügen und, wenn man nicht neustarten möchte, noch starten mit ''rc-service lcd4linux start'' ====== 20x4-Zeichen-Display am Parallelport ====== Einige Snapclients haben ein 20x4 Zeichen umfassendes, HD44780-kompatibles Text-LCD am Parallelport angeschlossen. Die für die verwendete Verdrahtung nötige Konfig ist wie folgt:\\ Display HD44780-20x4 { Driver 'HD44780' Model 'generic' Port '/dev/parport0' Size '20x4' Icons '4' Wire { RW 'GND' RS 'AUTOFD' ENABLE 'STROBE' ENABLE2 'GND' GPO 'GND' } }