# Lirc im Kernel 2.6 läuft nur ein paar Stunden

## oscarwild

Moin zusammen,

jetzt versuche ich mal mein Glück in diesem Forum...

Ich habe über mehrere Jahre lirc ohne Probleme im Kernel 2.4 verwendet.

Seit ich auf Kernel 2.6 umgestellt habe, läuft mein lirc jeweils nur wenige Stunden (max. ca. 1 -  2 Tage), und verabschiedet sich dann sang- und klanglos.

Übel ist, daß im log keinerlei Aufzeichnungen zu finden sind, wann und wo etwas schief gegangen sein könnte. Sowohl der lircd läuft noch, und die Kernelmodule sind ebenfalls geladen, die Infrarotsignale werden einfach nicht mehr ausgewertet. Wenn ich irw starte, verhält sich das ganz normal, d.h., eine Verbindung zu lircd wird aufgebaut (sieht man im log, "new client accepted"), aber es kommt halt kein Output mehr raus.

Meistens hilft

```
/etc/init.d/lircd restart
```

gelegentlich muß ich aber auch den kompletten Rechner neu starten, um meine Fernbedienung wieder einsetzten zu können.

Meine Systemkonfiguration:

- gentoo-dev-sources 2.6.7 ohne lirc-Patch (hatte aber auch schon 2.6.2, 2.6.4 etc. sowie die love-sources mit lirc-patch, alles ohne Erfolg), alle Kernels für DXR3-Videoausgabe gepatched

- Eigenbauempfänger (der ist 100% i.O.) an der seriellen Schnittstelle per lirc-serial 

- lirc-0.7.0-pre6 (auch schon alle anderen 0.7.0er getestet. Auch schon mit dem inzwischen überflüssigen Kernelpatch versucht)

Ich nutze lirc hauptschächlich für die Applikation VDR - aber eigentlich sollte das keine Rolle spielen.

Hat jemand von Euch ähnliches zu berichten? Mir wäre schon geholfen, wenn sich das Problem wenigstens ein bischen einkreisen ließe, sprich: liegts an lirc, vielleicht am lirc_serial-Modul, an der Kernelkonfiguration oder ganz wo anders...

Vielen Dank schon mal für Beiträge aller Art!

Gruß

OscarWildLast edited by oscarwild on Fri Oct 22, 2004 10:43 am; edited 2 times in total

----------

## oscarwild

*bump*

----------

## schmutzfinger

also ich nutze lirc_i2c zusammen mit einer haupauge tv karte. das ging unter 2.4 immer einwandfrei. mit meinem 2.6.3er kern habe ich allerdings auch öfter mal probleme. was irw ist weiss ich gar nicht. bei mir funktioniert das ganze so: lirc_i2c laden, lircd starten, irexec als user starten. irexec ist dann der einzige client für den lircd, und wird im autostart des wm's gestartet. sobald dieser irexec stirbt oder ein anderer versucht sich anzumelden, verweigert lircd den dienst. z.B wenn man sich einfach im kde abmeldet um sich dann wieder anzumelden, oder wenn man einen 2ten Xserver startet. bei mir reicht es nicht einfach nur lircd restart zu machen. ich muss jedesmal das modul aus dem kernel werfen und es dann wieder neu laden. ich habe dsa modul laden und entladen jetzt einfach mit in das init script des lircd aufgenommen und vermute einfach mal das die probleme irgendwo im modul liegen, diese lirc patches für die 2.6er kernel kommen mir sowieso etwas zusammengefriemelt vor da wundert es mich nicht das es am ende nicht richtig funktioniert.

----------

## oscarwild

Hallo schmutzfinger *g*,

vielen Dank für Deine Antwort!

Die von Dir geschilderten Probleme hatte ich z.T. mit den älteren Kernelpatches. Mit der CVS-Version, bzw. der 0.7.0_pre7 läuft das dagegen alles ganz sauber. Ich starte den lircd per init-Skript, die Module werden korrekt geladen etc.

Ich habe normalerweise nur einen einzigen Client dran (VDR), kann aber bei Bedarf auch mehrere gleichzeitig betreiben (so z.B. auch irw, der gibt einfach direkt die vom lircd verschickten Nachrtichten auf dem Bildschirm aus, irexec ist ein Schritt weiter, damit kann man auf bestimmte Nachrichten Kommandos ausführen lassen). Ich kann auch meine Clients mitten im Betrieb hart abschießen - alles kein Problem.

Bis eben irgendwann der lircd ohne (zumindest mit bekannte) äußere Einflüsse keine Nachrichten mehr ausspuckt...

Ich würde gerne nach dem Fehler suchen, und schrecke auch nicht davor zurück, mich direkt mit dem Quellcode auseinanderzusetzen; aber das ist wie die Nadel im Heuhaufen, vor allem würde ich gerne vorher sicherstellen, daß der Fehler tatsächlich innerhalb von lirc liegt, und nicht irgendwo anders auf meinem System.

Gruß

OscarWild

----------

## patwu

Hallo Ihr,

ich habe gerade euren Thread gelesen, da ich mich auch fuer lirc interessiere (haupauge tv karte mit fernbedienung). Ich habe eine Frage:

Wie ist das nun mit dem lirc kernel patch (w.z.b in den love sources) benoetigt man die? Wenn ich das userland tool lircd compiliere, dann kommt irgendwann mal ein Kommentar, ich sollte doch den kernel mit lirc patchen. Wenn ich den patch mir anschaue, dann ist damit ein komplett neuer Menueintrag in der Kernelconfig.

Ich frage deswegen so dringend, da ich einen thread (howto) gefolgt bin, bei dem man ohne kernel patch mit starten von lirc die Fernbedienung zum laufen bekommt, bis auf das bei mir jegliche Tastenzuordnung nicht stimmt kann ich was druecken und es passiert auch was. Ich beziehe mich auf:

https://forums.gentoo.org/viewtopic.php?t=185124

Kann mich jemand ueber diese patch Geschichte aufklaeren?

vielen dank schonmal

patrick

----------

## oscarwild

Moin patwu,

daß man immernoch einen Kernel-Patch benötigt, ist ein - aus mir schleierhaften Gründen - weit verbreiteter Irrglaube. Man _kann_ zwar den Kernel patchen, allerdings ist das schon seit längererm nicht mehr notwendig, wenn man lirc in Version >=0.7.0 anstatt der 0.6 benutzt. Lediglich für die 0.6 musste der 2.6er Kernel zwingend gepatched werden.

Die Version 0.7.0 liegt einerseits als ebuild vor (z.Zt. die 0.7.0_pre7, die ist aber noch als testing gekennzeichnet). Zumindest frühere 0.7er-ebuilds hatten z.T. den Fehler, sich nicht mit Kernel 2.6 compilieren zu lassen (vermutlich auch aus Unwissenheit), und/oder die Kernelmodule einfach bei der Compilierung auszulassen. Möglicherweise ist das beim 'offiziellen' 0.7.0_pre4 noch der Fall, versuchs mal mit der 0.7.0_pre7, da läuft meines Wissens zumindest die Installation problemlos.

Ich bevorzuge allerdings die CVS-Version (siehe http://www.lirc.org/cvs.html), die macht am wenigsten Ärger.

Mein 'kleines' Problem, daß der Dämon nach ein paar Stunden einfach nicht mehr reagiert, habe ich aber sowohl mit Kernel-Patch, Love-Sources, ebuild und CVS...

Gruß

OscarWild

----------

## schmutzfinger

also dieses howto klingt auf jeden fall sehr interessant, ich kann im moment leider nicht sagen welche lirc version ich verwende aber ich denke mal irgendwas mit 0.6. ich komme nächste woche wieder heim an meinen rechner und dann werde ich auf jeden fall mal versuchen meine fernbedienung ohne kernel patch zum laufen zu bringen.

patwu falls du nach dem howto nicht weiter kommst dann versuch es mit dem patch. ich habe das mit kernel 2.6.3 und dem patch für 2.6.4 schon ne ganze weile laufen. ich nutze die patches von http://www.elektronikschule.de/~genannt/kernel-patche/lirc/. das modul heisst in dem fall lirc_i2c und sollte im kernel als modul gebaut werden und anschliessend im autoload stehen. 

das wu steht doch nicht etwa für wundtstrasse?

----------

## patwu

Hallo Jungs,

motiviert mit euren Antworten habe ich noch einen neuen Versuch gewagt. Und ich muss euch sagen, ich habs hinbekommen. Also was tue ich damit ich ordentlich mit meiner Fernbedienung hin und her zappen kann: Das Howto von oben war der Anfang. Bzw. ich beschreibe es nochmal im ganzen:

1. Kernel Einstellungen (ohne lirc patch)

```

Device Drivers  --->

   Input device support  --->

      <*> Event interface

   I2C support  --->

      <M> I2C support

      I2C Algorithms  --->

         <M> I2C PCF 8584 interfaces

   Multimedia devices  --->

      <M> Video For Linux

       Video For Linux  --->

          <M> BT848 Video For Linux   (select the appropriate module for your tv card) 

```

2.  Lirc installieren (hier war es die Version 0.7.0_pre4)

```
LIRC_OPTS="--with-driver=devinput" emerge lirc

```

3. Module laden

```
 modprobe ir-kbd-i2c 
```

die anderen bttv module wurden schon von hotplug geladen.

4. /etc/conf.d/lirc 

```

cat /proc/bus/input/devices

I: Bus=0018 Vendor=0000 Product=0000 Version=0000

N: Name="i2c IR (Hauppauge)"

P: Phys=i2c-0/0-0018/ir0

H: Handlers=kbd event4 

                               ^^^^ -> wichtig

B: EV=100003 

B: KEY=c0010 2010804 0 0 0 3 200a000 180 4801 9e0000 7bb80 0 0

```

dann entsprechend /etc/conf.d/lirc anpassen. 

```

cat /etc/conf.d/lircd 

# Options to pass to the lircd process

LIRCD_OPTS="--driver=dev/input --device=/dev/input/event4"

```

5. /etc/lircd.conf

```
cat /etc/lircd.conf 

begin remote

        name Hauppauge

                begin codes

                        TV              0x80010179

                        RADIO           0x80010074

                        CH+             0x80010192

                        CH-             0x80010193

                        VOL-            0x80010072

                        VOL+            0x80010073

                        FULL_SCREEN     0x8001008b

                        MUTE            0x80010071

                        SOURCE          0x8001016b

                        1               0x8001004f

                        2               0x80010050

                        3               0x80010051

                        4               0x8001004b

                        5               0x8001004c

                        6               0x8001004d

                        7               0x80010047

                        8               0x80010048

                        9               0x80010049

                        0               0x80010052

                        RESERVED        0x800100d9

                        MINIMIZE        0x8001008e

                end codes

end remote

```

6. lircd starten

```

$ /etc/init.d/lircd start

```

7. Als User ~/.lircrc einrichten, das ist fuer den Client. Ist unbedingt notwendig, da ansonsten die Tastenzuordnungen nicht stimmen. (ich nutze als TV Programm tvtime). Achtung die Config ist noch nicht ganz ausgefeilt, habe aber erstmal keine Lust mehr unter /usr/share/doc/lirc-0.7.0_pre4/html/ sind mehr Erklaerungen um dem ganzen noch den noetigen Feinschliff zu geben. Das meiste funktioniert aber erstmal.

```

cat ~/.lircrc

begin

   prog = irxevent

   button = TV

   config = Key q tvtime

end

begin

   prog = irxevent

   button = RADIO

end

begin

   prog = irxevent

   button = CH+ 

   config = Key Up tvtime

end

begin

   prog = irxevent

   button = CH- 

   config = Key Down tvtime

end

begin

   prog = irxevent

   button = VOL-

end

begin

   prog = irxevent

   button = VOL+

end

begin

   prog = irxevent

   button = FULL_SCREEN

   config = Key f tvtime

end

begin

   prog = irxevent

   button = MUTE

   config = Key m tvtime

end

begin

   prog = irxevent

   button = SOURCE

end

begin

   prog = irxevent

   button = 1

   config = Key 1 tvtime

end

begin

   prog = irxevent

   button = 2

   config = Key 2 tvtime

end

begin

   prog = irxevent

   button = 3

   config = Key 3 tvtime

end

begin

   prog = irxevent

   button = 4

   config = Key 4 tvtime

end

begin

   prog = irxevent

   button = 5

   config = Key 5 tvtime

end

begin

   prog = irxevent

   button = 6

   config = Key 6 tvtime

end

begin

   prog = irxevent

   button = 7

   config = Key 7 tvtime

end

begin

   prog = irxevent

   button = 8

   config = Key 8 tvtime

end

begin

   prog = irxevent

   button = 9

   config = Key 9 tvtime

end

begin

   prog = irxevent

   button = 0

   config = Key 0 tvtime

end

begin

   prog = irxevent

   button = RESERVED

end

begin

   prog = irxevent

   button = MINIMIZE

end

```

8. Jetzt die Userland tools starten

```

$ irexec -d

$ irxevent &

```

9. Fertig, 

TVtime starten und zappen.

---------------------------------------------

ich hoffe, dass es euch hilft.

Viele Gruesse

Patrick

PS: wu steht fuer meinen Nachnamen, aber Wundstrasse ist so verkehrt nicht, denn ich bin an der TU Dresden.   :Wink: 

----------

## oscarwild

Hi patwu,

na freut mich, daß es jetzt bei Dir klappt.

Bleibt die Frage, ob es auch stabil läuft - also falls Du Dein System inkl. lirc Rund um die Uhr laufen hast, lass mich bitte wissen, ob der lirc bei Dir auch irgendwann den Geist aufgibt und ein Neustart notwendig ist oder nicht. Danke schon mal im Voraus!

Gruß

OscarWild

----------

## oscarwild

Hallo zusammen,

jetzt ist es mir mal gelungen, einen Logeintrag zu bekommen! Das letzte, was der lirc von sich gibt:

```

...

Sep 13 20:47:28 gargamel lircd 0.7.0-CVS[7234]: c19

Sep 13 20:47:28 gargamel lircd 0.7.0-CVS[7234]: trying "PhilipsRC5" remote

Sep 13 20:47:28 gargamel lircd 0.7.0-CVS[7234]: <48

Sep 13 20:47:28 gargamel lircd 0.7.0-CVS[7234]: sync

Sep 13 20:47:28 gargamel lircd 0.7.0-CVS[7234]: <19

Sep 13 20:47:28 gargamel lircd 0.7.0-CVS[7234]: <19

Sep 13 20:47:28 gargamel lircd 0.7.0-CVS[7234]: failed on bit 1

Sep 13 20:47:28 gargamel lircd 0.7.0-CVS[7234]: failed on code

Sep 13 20:47:28 gargamel lircd 0.7.0-CVS[7234]: failed "PhilipsRC5" remote

Sep 13 20:47:28 gargamel lircd 0.7.0-CVS[7234]: decoding failed for all remotes

```

Insgesamt sind das im Log knapp 300 Zeilen mit ähnlichen Einträgen, alle zur selben Uhrzeit (hier: 20:47:28 ). An meiner Fernbedienung liegts definitiv nicht, ich kann andere Geräte damit noch steuern, und nach einem lirc-Neustart ist wieder alles OK. Kann sich jemand von Euch darauf einen Reim machen? 

Gruß

OscarWild

----------

## oscarwild

Hallo zusammen,

also noch gebe ich nicht auf!  :Wink: 

Ich bin der Ursache meines Problems ein kleines Stückchen näher gekommen.

1. Ergebnisse aus dem Debugger:

Der lircd-Thread läuft grundsätzlich vollkommen zuverlässig und ohne Probleme. An zentraler Stelle wartet die Applikation per select auf neue Ereignisse. Die werden auch sauber ausgewertet, d.h., das an- und abmelden von Clienets funktioniert wunderbar. Infrarotsignale dagegen erzeugen keine neuen Events. Logisch daß da nichts besonderes im log eingetragen wird, schließlich passiert ja aus Sicht von lircd scheinbar auch nichts  :Confused: 

Wenn ich nur den lircd abschieße und neu starte, funktioniert der Empfang immer noch nicht, nur wenn ich lirc_serial entferne und neu lade empfange ich Signale. Die Ursache scheint also definitiv dort begraben zu sein.

2. Beobachtungen zu "decoding failed for all remotes"

Sehr umfangreiche Logeinträge über Dekodierungsfehler, die alle zur selben Uhrzeit auftreten (wie in meinem vorhergehenden Beitrag) kommen auch zu Zeiten vor, zu denen der IR-Empfänger ausgeschaltet ist und definitiv keine Signale empfangen kann (sowohl spät nachts, als auch tagsüber, obwohl niemand zuhause ist). Ich werde die Signalleitung vom Empfänger zum seriellen Port mal kurzschließen, um auch EM-Einstreuungen ausschließen zu können.

Nun die Frage an die Experten:

- wie wahrscheinlich ist es, daß irgendeine andere Applikation Störungen auf meinem seriellen Port erzeugt? Können sich irgendwelche Ressourcenkonflikte so äußern? 

- Kennt ihr eine einigermaßen schnelle Möglichkeit, Kernelmodule zu debuggen, _ohne_ ein UML aufsetzen zu müssen?

Vielen Dank für Eure Ideen!

Gruß

OscarWild

----------

## Mosquito0815

hi

erstmal entschuldigung - habe vor ein paar tagen auch einen lirc thread eröffnet ohne zu wissen das es sowas schon gibt ^^

Ich habe das gleiche Problem wie oben geschildert (irgendwann empfängt er keine signale mehr obwohl ich nix am system geändert hab)

zuerst dachte ich das es daran lag das ich auch lirc-0.7-pre7-r1 geupdatet hab - aber das ist auch nicht der fall

ich nutze einen Lirc patch "lirc-26.patch"

weiß aber nicht ob der noch für meine module gültig ist, da ich die lirc userland tools mit LIRC_OPTS="hauppauge" emerged hab.

hat schonmal jemand nach einem bugreport gesucht, oder sich mit einem lirc entwickler in verbindung gesetzt???

Ich hoffe jemand findet den fehler bald - das nervt nämlich mächtig   :Mad: 

mfg

mq

----------

## oscarwild

Hallo Mosquito0815,

vielen Dank für Deine Antwort, und willkommen im Club  :Twisted Evil: 

Es scheint so, als ob die meisten dieses Problem nicht haben. Ich kann mir durchaus vorstellen, daß die Ursache gar nicht in lirc selbst zu finden ist, sondern irgendwo als Seiteneffekt in einer ungünstigen Kombination (Kernel-Konfiguration, Applikationen etc.) auftritt, sonst kämen denke ich erheblich mehr Meldungen darüber in die Foren.

Inzwischen habe ich Logeinträge gefunden, die aus über 5000 Zeilen innerhalb von 2 Sekunden  (!) bestehen. Die Rx-Leitung am seriellen Port habe ich inzwischen mit einem Pull-Down Widerstand versehen, eine EM-Einstrahlung kann ich damit definitv ausschließen.

Welche lirc-Module werden denn für Deine Hauppauge-Fernbedienung verwendet?

Gruß

OscarWild

----------

## oscarwild

Hallo zusammen (sofern überhaupt noch wer mitliest  :Rolling Eyes: ),

ich denke, ich habe des Pudels Kern gefunden. In meiner Kernelkonfiguration waren beim seriellen Treiber die erweiterten Optionen eingeschaltet:

```

CONFIG_SERIAL_8250_EXTENDED=y

CONFIG_SERIAL_8250_SHARE_IRQ=y

CONFIG_SERIAL_8250_DETECT_IRQ=y

```

Das ist eine Altlast, da ich früher 4 serielle Schnittstellen betrieben habe, die sich die Interrupts teilen mußten. Dank USB ist nun nur noch ein Port im Einsatz, übrig geblieben war die Konfiguration. Unter Kernel 2.4 gabs damit auch nie Probleme, unter 2.6 eben wohl das oben beschriebene.

Ohne die (unnütze) erweiterte Unterstützung läuft mein lirc nun seit über 3 Tagen vollkommen stabil - das ist rekordverdächtig!  :Laughing: 

Wer ähnliche Effekte beobachtet, möge seine Kernelkonfiguration mal darauf prüfen, und zurückmelden. Würde mich sehr freuen, wenn die Lösung (naja, eigentlich nur ein Workaround) allgemeingültig wäre  :Very Happy: 

Gruß

OscarWild

----------

## oscarwild

Tja, leider hielt die Freude nur ein paar Tage lang an, danach wieder die alte Leier: täglicher Neustart. Ausser mit scheinen wohl nur sehr wenige das Problem zu haben, und andere, die wohl ebenfalls Probleme haben, antworten leider nicht mehr. Trotzdem möchte ich das hier nochmal für die Nachwelt festhalten:

Zuletzt war nicht mal der Neustart von lirc möglich, weil sich das Modul lirc-serial nicht mehr sauber entladen ließ, was teilweise sogar zu einer Kernel Panic führte. Irgendetwas scheint dabei mit der Behandlung der Interrupts nicht sauber zu laufen; das Kommando

```
cat /proc/interrupts
```

erzeugt reproduzierbar nach einem rmmod lirc_serial einen Segmentation Fault. Wird das Modul wieder in den Kernel geladen, werden - wie eigentlich erwartet - die Interruptzuordnungen ausgegeben, und lirc_serial hängt dabei eben auf dem seriellen Port - wie das eigentlich auch sein sollte. Funktionieren will es aber trotzdem nicht mehr. Beim Versuch, auf den lircd zuzugreifen, beendet sich dieser sang- und klanglos.

Einzige Abhilfe: Reboot. Das ist nicht nur eine Schande für ein Linux-System, sondern auch extrem nervig.

Ich habe lirc-serial für mich nun endgültig abgehakt und mir statt dessen einen IgorPlug USB-Empfänger für lächerliche 9 Euro gekauft. Dieser wird im aktuellen CVS-snapshot lirc 0.7.0-pre8 durch das Modul lirc_igorplugusb unterstützt. Das hat zwar auch noch so seine Tücken, aber wenns mal läuft, dann läufts.

----------

