Buildroot/LIRC/KODI: Remote funktioniert nicht

  • Ich versuche auf meinem Raspberry PI b+ ein Mediacenter einzurichten. Buildroot kommt daher sehr gelegen da man es bis auf 2 mb runtertrimmen
    kann ein kodi somit (ohne schnickschnack) bei einem raspberry pi aif 25ßMB.

    Da ich aus erfahrung kenne, je mehr komponenten man hat, dest so problematischer und anfälliger wird es. Daher auch den weg des "eigenen" MC die zielstellung ist:
    Somit sollte es nach dem prinzip "einschalten, genießen ausschalten und fertig". Libreelect hat patches welche einige meiner ziele einfacher machen aber ist mir trotzdem
    Brandet und nicht upstream patches.

    • Kernel sollte stable und so klein wie möglich sein. (4.4-36)
    • Erlaube keine custom-repos ("Unbekannte quellen wurde direkt aus dem kodi quellcode entfernt") das git-repo ist offiziell "Krypton-17".
    • Das benden von KODI mittels Exit ist nicht möglich und da busybox keine Signale (EXIT und TERM) handelt sogar nötig.
    • Startzeit so schnell wie möglich (aktuell 12 Sekunden laut printk-timer)
    • Partitionen: Boot und rootfs
    • USB kann verwendet werden (nur storage)
    • SSH/Telnet/SMB sind deaktiviert (per default) (kodi kann per smbclient jedoch die medien abrufen)
    • Buildroot muss eine erstkonfiguration beinhalten (kopiere also ein userdata ordner).
    • Beim shutdown schreibe ein "dmesg > /kernel.[definition='1','0']log[/definition]" und "logread > /syslog.[definition='1','0']log[/definition]" damit man die kernel und system logs nachvollziehen kann.
    • Bei probleme SD-karte also am rechner einhängen

    Es ist klar dass es bei dem Umfang schwer wird. Daher versuche ich den aufbau wie weit ich bin hier in den thread einzubauen. Da das problem meiner meinung
    an zwei orten liegen kann. KODI <-> LIRC oder Lircmap.xml Ich besitze die MCE 2005 Remote von Microsoft!

    Externer Inhalt koodinvuoksi.net
    Inhalte von externen Seiten werden ohne Ihre Zustimmung nicht automatisch geladen und angezeigt.

    Versuche das System jedoch nur auf das nötigste zu beschränken:

    Hier mein Standpunkt im Kernel:

    - Remote Controller support
    - Compile Remote Controller keymaps
    - Remote Controller decoders (Alle einkompiliert)
    - Remote Controller Devices (Alle einkompoiliert) bis auf "GPIO IR" und "Loopback" (beide deaktiviert)

    Kernel boot:

    Der kernel beim booten, registriert die remote als "ir-rc6-mce" und gibt mir ein "rc0" sowie ein lirc_dev(mceusb) ein "/dev/lirc0" aber auch ein /dev/lircd
    Beim login habe ich auch die möglichkeit einige tasten zu drücken (asci zeichen erscheinen beim drücken von "UP DOWN LEFT RIGHT"
    Kodi im buildroot navigiert auch soweit mit Navigation und KEY_ENTER jedoch nicht KEY_OK. Da lirc und kernel beide die signale verarbeiten habe ich das kernel protocol deaktiert

    Bash
    echo lirc > /sys/class/rc/rc0/protocols

    Das deaktiviert die kernel [definition=10,0][definition='3','0']keymap[/definition][/definition] und konnte somit auch mit irreccord problemlos eine saubere KEYMAP für mceusb als mceusb.lircd.conf erstellen. ohne dem deaktivieren habe ich Störungen beim erstellen der keymaps. Die [definition=10,0][definition='3','0']keymap[/definition][/definition] wurde kopiert und der pi mittels reboot neugestartet. Die mceusb.lircd.conf wird geladen und funktioniert auch mit irw nach dem reboot. irw reagiert auf alle tasten sauber und schnell. Beim erstellen der Keymap habe ich mich an die namen der KEY_* tasten im kernel gehalten. DAHER auch KEY_SLEEP. lirc lädt auf meinem MCE die remote mit dem treiber default, da ich ansonsten nicht das rc6 decodieren kann (toggle mask)... Die Keymap ist mit toggle mask und toggle bit.

    Da kodi mittels busybox startet hat es vor dem login kein homeverzeichnis. buildroot legt es mittels Makefile als symlink auf "/var/kodi" in diesemfall HOME=/var/kodi verifiziert und kodi läuft auch normal
    Laut dem wiki soll eine lircmap.xml nach /.kodi/userdata


    Somit liegt meine Lircmap.conf in:
    Diese wird jedoch nicht geladen und taucht auch nicht in der [definition=9,2]kodi.[definition='1','0']log[/definition][/definition] auf!

    Code
    /var/kodi/userdata/Lircmap.xml

    welche folgendes beinhaltet:

    Im Wiki habe ich gelesen dass man als device="<how lirc calls the remote>" das "<how lirc calls the remote>" zu "mceusb" ändern soll, default-templates haben ebenso "mceusb" und in osmc sowie libreelec haben ebenso die sektion "mceusb".
    In einem weiteren reboot wurde kodi als autostart deaktiviert um funktionen nochmals zu testen:

    irw: gibt mir die gesamte [definition=10,0][definition='3','0']keymap[/definition][/definition] aus...
    lircd: ist aktiv und gestartet (sichtbar in ps output)

    Das kodi [definition='1','0']log[/definition] habe ich ebenfalls angehangen sowie auch die defconfig.

  • nur als Denkanstoß

    Kernel sollte stable und so klein wie möglich sein. (4.4-36)

    du brauchst aber 4.9 + die Popcornmix Patches (die nicht Upstreambar sind aus "Gründen") oder du hast ein "Vanilla" Kodi was relativ fürn Popo ist für den RPi ;)
    Außer bei Generic ist bei Kodi der RPi/AML Support nicht viel Wert im Vergleich zu dem was möglich ist.

    25MB

    halt ich jetzt für Sportlich da Kodi an sich schon größer ist

  • Um nochmal zu erklähren, Ja im script ist libcec aktiviert (buildroot) kannst doch also auch die TV remote nutzen.
    Leider nicht, da mein Fernseher nicht alle commands der TV-Remote durch hdmi schleust. und meine remote hat kein back button.

    @CvH: Ich meinte 250MB nicht 25MB Entschuldigung (Die 0 wurde geschluckt). Ich habe (noch) nicht in gedanken Popcornmix zu verwenden.

    Gestern habe ich mich belesen und den Libreelec system-part durchgeschaut.
    LibreElec startet einen dienst namens "lircd-uinput" welcher (so wie ich es verstanden habe signale die an input* gesendet werden auf keycodes übersetzt.


    Zeile 12 sagt also für mich aus "lirc geht aber kodi wird niemals was empfangen, da es keine signale (events) erhält.
    Ich änderte also das Startscript von lirc und nach einem reboot war auch ein /dev/lircd als input gerät vorhanden.

    Code
    lircd -n --uinput --driver=default --output=/var/run/lirc/lircd --device=/dev/lirc0

    Kodi meldet auch dass es ein event4 (lircd) hat.

    Bash
    04:07:42.008 T:3016019968    INFO: Found input device /dev/input/event0
    04:07:42.008 T:3016019968    INFO: opened device 'BTC USB Multimedia Keyboard' (file name /dev/input/event0), m_bSkipNonKeyEvents 0
    04:07:42.059 T:3016019968    INFO: Found input device /dev/input/event1
    04:07:42.059 T:3016019968    INFO: opened device 'BTC USB Multimedia Keyboard' (file name /dev/input/event1), m_bSkipNonKeyEvents 0
    04:07:42.129 T:3016019968    INFO: Found input device /dev/input/event2
    04:07:42.129 T:3016019968    INFO: opened device 'Media Center Ed. eHome Infrared Remote Transceiver (0471:0815)' (file name /dev/input/event2), m_bSkipNonKeyEvents 0
    04:07:42.185 T:3016019968    INFO: Found input device /dev/input/event3
    04:07:42.186 T:3016019968    INFO: opened device 'MCE IR Keyboard/Mouse (mceusb)' (file name /dev/input/event3), m_bSkipNonKeyEvents 0
    04:07:42.262 T:3016019968    INFO: Found input device /dev/input/event4
    04:07:42.263 T:3016019968    INFO: opened device 'lircd' (file name /dev/input/event4), m_bSkipNonKeyEvents 0


    Da der Drfolg nicht lange anhalten würde (nicht reboot persistent) muss ich udev benutzen, damit das gerät wieder von Kodi erkannt wird. LIrc bietet mir dazu im Quellcode die udev-regeln.
    Da diese nicht ansich gehen, weil setfacl nicht im image ist, muss ich mein image um das Packet acl erweitern, also das mk-schript von lirc-tools erweitert und neu gebaut. Im overlay wurde gleich besagt
    Dass das logging von udev aktiviert wird. (info).

    Bash
    KERNEL=="lirc[0-9]*", SUBSYSTEM=="lirc", GROUP="root", MODE="0666"
    ACTION=="add", SUBSYSTEM=="usb", RUN+="/usr/bin/setfacl -m g:root:rw $env{DEVNAME}"
    
    
    SUBSYSTEMS=="input",ATTRS{name}=="lircd-uinput",SYMLINK+="lircd-uinput"
    SUBSYSTEMS=="input",ATTRS{name}=="lircmd",SYMLINK+="lircmd"
    KERNEL=="uinput",GROUP:="root",MODE:="0666"

    Beim start mit dem aktualisierten Image ist das device "lircd" vorhanen und in kodi vorhanden.

    Die remote funktioniert jedoch immernoch nicht in kodi, somit den Autostart von kodi deaktivert und den pi neugestartet,
    Nach dem neustart eingeloggt und irw ist auch tot. (Kann also nicht an kodi liegen).

    Fassen wir zusammen:

    * Wir haben dank lircd-uinput nun ein lircd welches events empfängt.
    * Kodi findet es ebenso und kann es öffnen.
    * irw zeigt keine ausgaben mehr. irrecord jedoch ja.

  • Nach dem man den Tag halbwegs überstanden hat, das image nochmal aufgeräumt hat habe ich mir nochmal dem Lirc problem zugewand.
    Wie man gelesen hat hat Kodi nun ein lircd-input (/dev/lircd) Jedoch war irw nicht in der lage etwas zu empfangen.

    Ich entschloss mich den Gedanken zu fassen, in der lirc_options.conf den Eintrag "logfile" und Loglevel zu aktivieren, abzuspeichern und neuzustarten.
    Danach sofort in die logdatei wo ich dem problem schon näher war. Lirc hat probleme mit einer [definition=10,0][definition='3','0']keymap[/definition][/definition] (mceusb) in Zeile 15 (Die Map ist unverändert!).
    Also entfernte ich die Zeile und neugestartet. Kodi empfängt Signale der von lirc :)

    Im Anhang die test-keymap mit dem von lirc gemeldeten Fehler: (Zeile 15 ist hier Zeile 15)


    Jetzt haperte es noch an der Lircmap.xml, welche nach näheren forschen im git-repo (ButtonTranslator-cpp) irgendwie nicht mitkompiliert wird, wenn "HAVE_LIRC" nicht definiert ist.
    Die definition wurde local definiert, Ein Ticket wurde im Buildroot-Bugtracker eingereicht (https://bugs.busybox.net/show_bug.cgi?id=9596).

  • Nachdem Gestern, dann die Lircmap.xml mittels ändern der Compiler-Option doch geladen wurde, habe ich jedoch immernoch das Problem, dass die OK-Taste nicht funktioniert.
    Darf man eigentlich Tastenaktionen Mehrmals identisch definieren (ich verweise auf die Lircmap.xml aus dem ersten Post).

    Ich habe daher an anderer Stelle weitergemacht, Da busybox auf tty1 läuft, kodi aber auf einem anderen fb-Terminal, habe ich entschlossen den den Verlassen-Button auszublenden.
    Sowie die Cache-Settings definiert. Kodi verlangt die Angabe der Memsize glaube in bytes. Zum Laufzeitpunkt waren 20 Minuten lang 364MB frei, habe also 300 MB erlaubt
    und 64mb Spielraum gelassen und unter Beachtung einer Werkseinstellung für den PI1 es dann auf 256MB festgelegt.

    Bash
    256 * 1024 * 1024

    Hier die [definition='2','1']advancedsettings[/definition].xml:

  • Da Thema ist in der Tat erledigt, Das Ergebnis ist hier zu finden: Der Name piBMC kam eigentlich von XBMC, nur dass man halt das "X" durch "pi" ersetzte.
    Dass die OK-Taste nicht funktioniert, liegt daran, dass keine in XBMC definiert ist. XBMC definiert eine KEY_SELECT taste. welche Ihren Sinn in dem Namen hat,
    Das resultierende SDCard image ist: 234 mb groß. Wer zufällig eine alte SD karte hat, und einen PI 1 b+, kann sich das ja installieren,

    Boot-FS: 30mb (FAT)
    Root-FS: 200mb (ext4) welches noch per Hand vergrößert werden muss. (mit gparted)

    piBMC

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!