Serielles IR mit Lirc 0.10 unter Debian9

  • Nachdem ich mir die Ausgaben mal selber genauer angeschaut habe, habe ich mal die ganzen Fehler beseitigt, die da gemeldet werden:


    -> .conf-Dateien der Fernbedienungen bereinigt

    -> in der /etc/lirc/lirc_options.conf die Zeile /var/run/... in /run/... geaendert

    -> in der Datei /etc/modules-load.d/serial_ir.conf wieder auf Ausgangs-Eisntellung: Da steht einfach nur noch serial_ir drin.


    Ergebnis ist ein deutlich kuerzeres Log nach dem Booten:


    cat /var/log/syslog|grep lirc

    Pastebin-Link



    cat /var/log/syslog|grep serial


    Pastebin-Link


    Die /var/lib/setserial/autoserial.conf ist gleich geblieben:


    Code
    1. /dev/ttyS1 uart none port 0x02f8 irq 3
    2. /dev/ttyS0 uart 16550A port 0x03f8 irq 4 baud_base 115200 spd_normal skip_test

    Es ist schon wie ich vermute: Setserial wird nicht oder zu spaet ausgefuehrt. Sonst staend das nicht extra im Log beim module-load:


    Zusammengeschnitten steht da ja:

    Quote

    port 02f8 already in use

    use 'setserial /dev/ttySX uart none'

    or compile the serial port driver as module and

    make sure this module is loaded first

    Wenn ich das richtig auswerte, wird laut Log versucht, einfach COM1 zu benutzen.

  • Das, was vorher


    install serial_ir setserial /dev/ttyS1 uart none; modprobe --ignore-install serial_ir irq=3 io=0x2f8


    war, war vermutlich nicht richtig. Da fehlt vermutlich ein Semikolon hinter "install serial_ir".


    Lars.

  • Ok, hab jetzt einfach mal die manpage gesucht, da soll wohl doch kein Semikolon nach dem zweiten Wort (ich wollte es eigentlich nach dem "install serial_ir", aber da soll keins hin. Ich hatte das als einzelne Befehle interpretiert...):

    https://linux.die.net/man/5/modprobe.d


    Eigentlich sollten die Befehle dahinter ausgeführt werden, warum das auf deinem System nicht funktioniert, weiß ich nicht.


    Lars

  • Hab hier auch was gefunden: Link. Da hatte einer genau mein Problem. Bei ihm heisst der Befehl allerdings preinstall statt install und braucht keine Semikolons. Hat trotzdem nicht funktioniert.


    Ich werde Deinen Vorschlag ausprobieren.


    Alternativ habe ich versucht, die Reihenfolge in /etc/rc0.d zu aendern. Die Start-Skripte sind ja durchnummeriert K01lircd kommt natuerlich (alphabetisch) VOR K01setserial. Habe also die Reihenfolge geaendert und dabei ein neues Skript eingefuegt, in dem einfach


    Code
    1. modprobe serial_ir


    steht. Wieder kein Erfolg.


    Wenn ich schon dabei bin das Modul per Skript zu laden, kann das eigentlich auch das Lirc-script machen (wie eigentlich ja vorgesehen). Also wieder /etc/lirc/lirc_options.conf editiert und da die Kommentarzeichen vor den Code-Zeilen (am Ende der Datei) wieder weg. Dann muessten ja setserial und modprobe ausgefuehrt werden...passiert aber nicht. Wieso fuehrt das lirc-skript eigentlich nicht diese Befehle aus?

    Wuerde mir ja schon reichen, der unelegante Weg. Es geht aber einfach gar keiner! Das kann doch nicht sein! Ich werd' doch noch ein Skript beim Boot-Up ausfuehren koennen!


    Ich probier jetzt noch Deine Methode aus.


    Edit:


    Ich hatte noch vergessen zu erwaehnen, dass der Kernel sicherheitshalber noch folgende Option von mir in der /etc/default/grub spendiert bekommen hat:


    Code
    1. GRUB_CMDLINE_LINUX_DEFAULT="quiet 8250.nr_uarts=4"


    8250.nr_uarts=4 teilt dem Kernel mit, dass es ings. 4 Serial-Ports gibt. Leider hat das aber nichts geholfen.

  • Bei Lösungen von vor über 10 Jahren sollte man immer eine gewisse Skepsis haben. Auch unter Debian ändert sich manchmal was... :)


    Viel Erfolg!


    Lars

  • Vielleicht solltest du das Startscript unter /etc/rc0.d mal ganz wegmachen und systemd benutzen:

    http://lirc.sourceforge.net/li…-guide.html#systemd-setup


    Lars

  • Wieviele Startup-Dienste gibt es denn bei Debian? lircd habe ich bisher mit systemctl gestartet, dann gibt es den Befehl service, es gibt ausserdem einen Ordner /etc/init.d mit Startup-Skripten, nicht zu vergessen diese runlevel-Ordner /etc/rc[0-6].d. Sind das jetzt nicht mindestens drei verschiedene Bootup-Dienste?


    Edit:


    So wie ich das sehe, nutzt Debian bereits systemd. Wollte da mal kurz ein paar Docs zu ueberfliegen...keine Chance..dafuer braucht man ein Studium. Auch sytemd-gui ist nicht hilfreich. Reihenfolgen lassen sich da nicht festlegen.

  • Natürlich lassen sich da Reihenfolgen festlegen, indem man z.B. im lircd.service sagt, das es "after" einem anderen Dienst gestartet werden soll.


    Und es gibt PreStart und PostStop Optionen, mit denen man Sachen direkt beim Start/Stop des Services ausführen lassen kann.


    Lars.

  • Oder man legt einen neuen Service an, der dann eine "before"-Regel mitbekommt, so dass es auf alle Fälle vor lirc ausgeführt wird.


    Lars.

  • geht das ein bisschen genauer? lircd soll ganz am Schluss starten. Vielleicht fuehrt es dann ja doch den modprobe-Befehl aus, der in seiner /etc/lirc/lirc_options.conf am Schluss steht.


    Das vollautomatische Laden des Kernel-Modules beim Booten wuerde ich dafuer entfernen. COM2 ist ja am Ende des Bootvorgangs stets richtig konfiguriert. Irgendeins der vielen Bootup-Skript fuehrt setserial also korrekt aus...nur eben immer NACH dem Laden des Kernel-Modules serial_ir. Ich brauche also ein "modprobe serial_ir" ganz am Schluss des Bootvorgangs, aber VOR lircd.

  • Sind das jetzt nicht mindestens drei verschiedene Bootup-Dienste?

    Nein, eigentlich sollte es da nur systemd geben. Skripte aus /etc/init.d im SysV-Init Stil werden über einen Kompatibilitätslayer dynamisch in systemd-Skripte überführt, dabei gibt es einige Besonderheiten - die kann man in https://www.freedesktop.org/wi…ystemd/Incompatibilities/ nachlesen. In /etc/rc[0-6].d sollen K- und S-Symlinks nicht beachtet werden.


    Wollte da mal kurz ein paar Docs zu ueberfliegen...keine Chance..dafuer braucht man ein Studium.

    So schlimm ist das nicht (insbesondere wenn man das Upstart-Cookbook kennt) - und als Debian-Nutzer hattest du ab dem Release von jessie in 2015 Gelegenheit dir das genauer anzusehen...

    yaVDR-Dokumentation (Ceterum censeo enchiridia esse lectitanda.)

  • https://www.freedesktop.org/so…ervice.html#ExecStartPre=


    Wenn du das ExecStartPre von lirc update-sicher überschreiben willst, dann empfiehlt sich ein Drop-In:

    https://coreos.com/os/docs/lat…ystemd-drop-in-units.html


    Genaues kann ich jetzt auch nicht sagen, dazu müsste ich sehen, wie deine lircd.service aussieht.


    Lars.

  • Oh nein, noch mehr Hausaufgaben... OK, werde mir das anschauen und mich dann melden. Unterdessen hier die geforderte lircd.service:



  • Da siehst du z.B. das lircd.service immer nach lircd-setup.service ausgeführt wird. Das klingt doch auch nach einer passenden Stelle, wo das Modul geladen werden sollte. Magst du das auch noch posten?

  • Wenn ich schon dabei bin das Modul per Skript zu laden, kann das eigentlich auch das Lirc-script machen (wie eigentlich ja vorgesehen). Also wieder /etc/lirc/lirc_options.conf editiert und da die Kommentarzeichen vor den Code-Zeilen (am Ende der Datei) wieder weg. Dann muessten ja setserial und modprobe ausgefuehrt werden...passiert aber nicht. Wieso fuehrt das lirc-skript eigentlich nicht diese Befehle aus?

    Weil du das Kommentarzeichen vor [modinit] nicht entfernt hast? Dann wird nämlich die ganze modinit-section nicht berücksichtigt.


    Falls du das testen willst, den Rechner nach der Änderung am besten neu starten!

  • Danke für die Adleraugen tomas - wenn ich mir die gepostete lirc_options.conf in den ersten Posts ansehe, ist das [modinit] immer auskommentiert. Da muss das führende # natürlich auch weg, wenn lirc-setup das ausführen soll...


    Lars.

  • Weil du das Kommentarzeichen vor [modinit] nicht entfernt hast? Dann wird nämlich die ganze modinit-section nicht berücksichtigt.

    Au Mann! DAS WARS! Kommentarzeichen weg, IR läuft sofort!

    Ich hab das einfach nicht gesehen. Wer zur Hölle kommentiert 'ne Kategorie aus???


    Also Thomas, der ist für Dich:


    :gott