Gentoo LIRC

Aus VDR Wiki
(Unterschied zwischen Versionen)
Wechseln zu: Navigation, Suche
(Konfiguration)
(Änderung 65420 von 76.71.153.205 (Diskussion) wurde rückgängig gemacht.)
 
(7 dazwischenliegende Versionen von 6 Benutzern werden nicht angezeigt)
Zeile 46: Zeile 46:
 
</pre>
 
</pre>
 
Jetzt sollte modprobe irda zum Erfolg führen.
 
Jetzt sollte modprobe irda zum Erfolg führen.
 +
 +
Wenn die Unerstützung für den seriellen Port im Kernel integriert ist, kann man auch folgenden Befehl ausführen, um den seriellen Port freizugeben, damit der <tt>lirc</tt> Treiber ihn benutzen kann:
 +
 +
setserial /dev/ttySx uart none
  
 
==Installation==
 
==Installation==
Nun muß das Linux Infrared Remote Control kurz lirc installiert werden. Dieses befindet sich auch im Portage-Tree und kann mittels emerge installiert werden. Zur Zeit sind 2 Versionen von lirc vorhanden, wobei die neuere (0.6.6) noch maskiert ist. Die Installation von lirc am Beispiel dieses Empfängers geschieht folgendermaßen:
+
Nun muß das Linux Infrared Remote Control kurz lirc installiert werden. Dieses befindet sich auch im Portage-Tree und kann mittels emerge installiert werden.
  
 
Zuerst muß lirc mitgeteilt werden, welchen Treiber es benutzen soll, in unserem Falle seriell. Man trägt dazu die Variable
 
Zuerst muß lirc mitgeteilt werden, welchen Treiber es benutzen soll, in unserem Falle seriell. Man trägt dazu die Variable
 
<pre>
 
<pre>
LIRC_OPTS="--with-driver=serial"
+
LIRC_DEVICES="serial"
 
</pre>
 
</pre>
 
mittels eines Editors in die /etc/[[Gentoo make.conf|make.conf]] ein. Alternativ dazu geht das auch, wenn man diese dem emerge-Befehl voranstellt.
 
mittels eines Editors in die /etc/[[Gentoo make.conf|make.conf]] ein. Alternativ dazu geht das auch, wenn man diese dem emerge-Befehl voranstellt.
 
<pre>
 
<pre>
LIRC_OPTS="--with-driver=serial" emerge lirc
+
LIRC_DEVICES="serial" emerge lirc
 
</pre>
 
</pre>
Anmerkung: app-misc/lirc-0.7.0-r1, app-misc/lirc-0.7.1 und app-misc/lirc-0.7.2 kann man zwar unter sys-kernel/gentoo-sources-2.6.14-r5 kompilieren aber das laden von lirc_serial führt zu Fehlermeldungen. Erst ab app-misc/lirc-0.8.0_pre1 verschwinden die Fehlermeldungen bei modprobe lirc_serial (Stand 2006-01-08).
+
Anmerkung: Versionen älter als app-misc/lirc-0.8.0-r1 produzieren Fehlermeldungen bei modprobe lirc_serial (Stand 2006-09-17).
  
Wer die neuere maskierte Version (0.6.6) installieren möchte, macht das so (es sei denn, man hat die /etc/[[Gentoo make.conf|make.conf]] schon angepaßt):
 
<pre>
 
ACCEPT_KEYWORDS="~x86" LIRC_OPTS="--with-driver=serial" emerge lirc
 
</pre>
 
Ab der Version 0.7.x kann es zu Fehlermeldungen beim kompilieren kommen. Diese resultieren aus dem fehlendem IRQ und dem fehlendem IO-Port. Abhilfe schafft wie folgt am Beispiel für den COM 1 Port:
 
<pre>
 
ACCEPT_KEYWORDS="~x86" LIRC_OPTS="--with-driver=serial --with-irq=4 --with-port=0x3F8" emerge lirc
 
</pre>
 
 
Nach erfolgreicher Installation von lirc ist noch die Datei /etc/modules.d/lirc zu überprüfen oder zu erstellen. Für einen IR-Empfänger an COM1 sollte folgendes in der Datei stehen:
 
Nach erfolgreicher Installation von lirc ist noch die Datei /etc/modules.d/lirc zu überprüfen oder zu erstellen. Für einen IR-Empfänger an COM1 sollte folgendes in der Datei stehen:
 
<pre>
 
<pre>
Zeile 82: Zeile 78:
 
Dies sind übliche Parameter für die seriellen Schnittstellen. Bitte im BIOS des Computers überprüfen. Jetzt ein
 
Dies sind übliche Parameter für die seriellen Schnittstellen. Bitte im BIOS des Computers überprüfen. Jetzt ein
 
<pre>
 
<pre>
rmmod lirc_serial
+
modprobe -r lirc_serial
 
</pre>
 
</pre>
 
gefolgt von einem
 
gefolgt von einem
Zeile 88: Zeile 84:
 
modprobe lirc_serial
 
modprobe lirc_serial
 
</pre>
 
</pre>
und die serielle Unterstützung mit den neuen Parametern sollte installiert sein. Zum Test
+
und die serielle Unterstützung mit den neuen Parametern sollte installiert sein.
 +
 
 +
Sollte an dieser Stelle die Meldung "Device or resource busy" erscheinen, so muss vermutlich erst die serielle Schnittstelle initialisiert werden. Dazu holt man setserial mittels
 
<pre>
 
<pre>
mode2
+
emerge setserial
 
</pre>
 
</pre>
''bei version >= 0.7.X''
+
und fügt der Datei <tt>/etc/serial.conf</tt> die Zeile
 +
<pre>
 +
/dev/ttyS0 uart none
 +
</pre>
 +
für COM1 hinzu. (für COM2 ttyS1, für COM3 ttyS2, ...) Danach kann das Init-Script gestartet (<tt>/etc/init.d/serial start</tt>) und nochmals ein <tt>modprobe lirc_serial</tt> versucht werden. Hat dies das Problem behoben, sollte das Init-Script beim Booten gestartet werden:<br><tt>rc-update add serial default</tt><br> Leider wartet weder das Init-Script von LIRC noch das Kernel-Modul auf serial. Darum muss /etc/init.d/lircd umgeschrieben werden:
 +
<pre>
 +
depend() {
 +
        need serial
 +
}
 +
 
 +
start() {
 +
        ebegin "Starting lircd"
 +
        einfo "modprobe lirc_serial"
 +
        /sbin/modprobe lirc_serial
 +
        einfo "lircd"
 +
        start-stop-daemon --start --quiet --exec /usr/sbin/lircd -- ${LIRCD_OPTS}
 +
        eend $?
 +
}
 +
 
 +
stop() {
 +
        ebegin "Stopping lircd"
 +
        einfo "lircd"
 +
        start-stop-daemon --stop --quiet --exec /usr/sbin/lircd
 +
        einfo "modprobe -r lirc_serial"
 +
        /sbin/modprobe -r lirc_serial
 +
        eend $?
 +
}
 +
</pre>
 +
 
 +
Zum Test
 
<pre>
 
<pre>
 
mode2 -d /dev/lirc/0
 
mode2 -d /dev/lirc/0
Zeile 105: Zeile 132:
 
</pre>
 
</pre>
 
für COM2 von nöten.
 
für COM2 von nöten.
 
Allerdings muß man dazu sagen, das es Probleme mit dem Device /dev/lirc in Verbindung mit dem devfs (Device-Filesystem) geben kann. Falls nach einem Neustart /dev/lirc nicht mehr vorhanden sein sollte weil es von devfs gelöscht wurde, dann muß man lirc "devfs-kompatibel" machen. Dies erreicht man mit einem Eintrag in /etc/devfsd.conf, welches das Device bei jedem Rechnerstart neu erzeugt und entsprechend im Verzeichnis /dev ablegt. Diese Methode ist bei Gentoo sowie allen neueren Distributionen zu bevorzugen, eben weil sie das Device-Filesystem einsetzen. Folgendes sollte in /etc/devfsd.conf eingetragen werden
 
<pre>
 
LOOKUP  ^lirc  EXECUTE /bin/mknod /dev/lirc c 61 0
 
</pre>
 
Einrichten von /etc/conf.d/lircd
 
<pre>
 
LIRCD_OPTS="-d /dev/lirc/0"
 
</pre>
 
  
 
Damit nun das lirc-Modul und der lirc-daemon automatisch bei Systemstart geladen wird:
 
Damit nun das lirc-Modul und der lirc-daemon automatisch bei Systemstart geladen wird:

Aktuelle Version vom 27. September 2010, 23:15 Uhr

[Bearbeiten] Grundlagen

Um den VDR auch über eine IR-Fernbedienung steuern zu können braucht man erstmal das zum IR-Empfänger passende Kernelmodul. Als Empfängerhardware gibt es zahlreiche Möglichkeiten. Eine davon ist das sogenannte Homebrew-Model. Dabei handelt es sich um eine einfache Schaltung für die serielle Schnittstelle, die man auch mit etwas Geschick selber bauen kann. Mehr Infos dazu findet man auf der Lirc-Homepage http://www.lirc.org. Ob die Irda-Unterstützung als Kernelmodul vorhanden ist, kann man z. B. mit

modprobe irda

testen. Wird das Modul geladen, erfolgt keine Ausgabe! Dafür zeigt lsmod, welche Module geladen sind. Ob lirc schon erfolgreich installiert ist, kann mit

modprobe lirc_serial

für seriell Empfänger, oder

modprobe lirc_sir

für Empfänger, die den IR-Port vom Mainboard verwenden, getestet werden. (Hier sind nur zwei mögliche Varianten exemplarisch angeführt.) Sollte modprobe melden:

modprobe: Can't locate module irda

muß der Kernel entsprechend angepasst werden.

cd /usr/src/linux
make menuconfig

Es ist unwahrscheinlich, daß der Kernel keine Module unterstützt. Dies sollte aber zuerst überprüft werden. Dazu muß der Loadable module support ---> und der Kernel module loader aktiviert sein. Weiterhin muß die serielle Unterstützung deaktiviert oder zumindest als Modul kompiliert werden, damit lirc exklusiven Zugriff auf den seriellen Port hat (so man ein serielles Device verwendet). Dazu unter

Device Drivers  --->
    Character devices --->
        Serial drivers  --->
            < > 8250/16550 and compatible serial support

deaktivieren, oder wenn man ab und zu den seriellen Port noch für andere Zwecke braucht als Modul setzen. Dann zu

Networking  --->
    <M>   IrDA (infrared) subsystem support  --->

IrDA subsystem support als Modul aktivieren. Weiter bei

Networking  --->
    <M>   IrDA (infrared) subsystem support  --->
        Infrared-port device drivers  --->
            ...

und die entsprechende Hardware aktivieren. Um ein einfaches serielles IR-Modul (z.B. das o. g. Homebrew, s. hierzu http://www.lirc.org/receivers.html ) muss der Serial dongle support ausgewählt werden. Wenn keine andere Einstellung verändert wurde, und der IR-Support vorher nicht fest einkompiliert war, reicht nach exit und nach dem speichern der neuen Kernelkonfiguration, ein

make modules modules_install

Jetzt sollte modprobe irda zum Erfolg führen.

Wenn die Unerstützung für den seriellen Port im Kernel integriert ist, kann man auch folgenden Befehl ausführen, um den seriellen Port freizugeben, damit der lirc Treiber ihn benutzen kann:

setserial /dev/ttySx uart none

[Bearbeiten] Installation

Nun muß das Linux Infrared Remote Control kurz lirc installiert werden. Dieses befindet sich auch im Portage-Tree und kann mittels emerge installiert werden.

Zuerst muß lirc mitgeteilt werden, welchen Treiber es benutzen soll, in unserem Falle seriell. Man trägt dazu die Variable

LIRC_DEVICES="serial"

mittels eines Editors in die /etc/make.conf ein. Alternativ dazu geht das auch, wenn man diese dem emerge-Befehl voranstellt.

LIRC_DEVICES="serial" emerge lirc

Anmerkung: Versionen älter als app-misc/lirc-0.8.0-r1 produzieren Fehlermeldungen bei modprobe lirc_serial (Stand 2006-09-17).

Nach erfolgreicher Installation von lirc ist noch die Datei /etc/modules.d/lirc zu überprüfen oder zu erstellen. Für einen IR-Empfänger an COM1 sollte folgendes in der Datei stehen:

alias char-major-61 lirc_serial
alias /dev/lirc* lirc_serial
options lirc_serial irq=4 io=0x3F8

entsprechend für COM2

alias char-major-61 lirc_serial
alias /dev/lirc* lirc_serial
options lirc_serial irq=3 io=0x2F8

Dies sind übliche Parameter für die seriellen Schnittstellen. Bitte im BIOS des Computers überprüfen. Jetzt ein

modprobe -r lirc_serial

gefolgt von einem

modprobe lirc_serial

und die serielle Unterstützung mit den neuen Parametern sollte installiert sein.

Sollte an dieser Stelle die Meldung "Device or resource busy" erscheinen, so muss vermutlich erst die serielle Schnittstelle initialisiert werden. Dazu holt man setserial mittels

emerge setserial

und fügt der Datei /etc/serial.conf die Zeile

/dev/ttyS0 uart none

für COM1 hinzu. (für COM2 ttyS1, für COM3 ttyS2, ...) Danach kann das Init-Script gestartet (/etc/init.d/serial start) und nochmals ein modprobe lirc_serial versucht werden. Hat dies das Problem behoben, sollte das Init-Script beim Booten gestartet werden:
rc-update add serial default
Leider wartet weder das Init-Script von LIRC noch das Kernel-Modul auf serial. Darum muss /etc/init.d/lircd umgeschrieben werden:

depend() {
        need serial
}

start() {
        ebegin "Starting lircd"
        einfo "modprobe lirc_serial"
        /sbin/modprobe lirc_serial
        einfo "lircd"
        start-stop-daemon --start --quiet --exec /usr/sbin/lircd -- ${LIRCD_OPTS}
        eend $?
}

stop() {
        ebegin "Stopping lircd"
        einfo "lircd"
        start-stop-daemon --stop --quiet --exec /usr/sbin/lircd
        einfo "modprobe -r lirc_serial"
        /sbin/modprobe -r lirc_serial
        eend $?
}

Zum Test

mode2 -d /dev/lirc/0

und die Fernbedienung betätigen. Jetzt sollten die Zeile space xxxxxxx und pulse xxx nur so über die Konsole flitzen. Falls mode2 meldet, daß es /dev/lirc nicht finden kann, muß noch folgendes getan werden.

mknod -m 666 /dev/lirc c 61 0

für COM1 bzw ein

mknod -m 666 /dev/lirc c 61 1

für COM2 von nöten.

Damit nun das lirc-Modul und der lirc-daemon automatisch bei Systemstart geladen wird:

rc-update add lircd default

[Bearbeiten] Konfiguration

Jetzt muß nur noch die 'Übersetzungsdatei' installiert werden. Mit etwas Glück befindet sich die passende auf http://lirc.sourceforge.net/remotes/. Sonst muß die Datei /etc/lircd.conf mittels

irrecord /etc/lircd.conf
evtl. irrecord /etc/lircd.conf -d /dev/lirc/0

erzeugt werden. (Natürlich muß das Modul lirc_serial, oder welches auf Deine Hardware paßt, geladen sein. Das kann man einfach mit 'lsmod' überprüfen.)

Nun kommt eine Erklärung, die man so befolgen sollte. Es müssen verschiedene Tasten nacheinander gedrückt werden bis irrecord zum nächsten Schritt übergeht. Hier gibt man nun Schüsselwörter an, die man sich selbst aussuchen kann. Empfehlenswert ist aber diese so zu wählen, wie sie von VDR benutzt werden. Nach Eingabe des Schlüsselwortes gefolgt von Enter muß dann die jeweilige Taste auf der Fernbedienung gedrückt werden. Das sieht dann in etwa so aus:

Now start pressing buttons on your remote control.

It is very important that you press many different buttons and hold them
down for approximately one second. Each button should generate at least one
dot but in no case more than ten dots of output.
Don't stop pressing buttons until two lines of dots (2x80) have been
generated.

Press RETURN now to start recording.
................................................................................
Found const length: 107937
Please keep on pressing buttons like described above.
................................................................................
Space/pulse encoded remote control found.
Signal length is 83.
Found possible header: 9131 4365
Found trail pulse: 675
Found repeat code: 9133 4357
Signals are space encoded.
Signal length is 40
Now enter the names for the buttons.

Please enter the name for the next button (press <ENTER> to finish recording)
POWER

Now hold down button "POWER".

Please enter the name for the next button (press <ENTER> to finish recording)
1

Now hold down button "1".

Please enter the name for the next button (press <ENTER> to finish recording)
2

Now hold down button "2".

Please enter the name for the next button (press <ENTER> to finish recording)

Wenn man alle Tasten definiert hat drückt man Enter. Jetzt kommt noch die Abfrage nach dem Toggle-Bit. Dazu drückt man eine Taste so schnell wie möglich nacheinander. Wenn alles gut gelaufen ist wird die Konfigurationsdatei geschrieben.

Checking for toggle bit.
Please press an arbitrary button repeatedly as fast as possible (don't hold it down!).
..............................
Successfully written config file.

Ansonsten muß die Datei wieder gelöscht werden und man macht das Ganze noch einmal.

rm /etc/lircd.conf
irrecord ......

Wenn man jetzt nicht neu starten möchte (wir sind ja Linux-User :-)), kann man den Daemon auch von Hand starten und stoppen.

/etc/init.d/lircd start
/etc/init.d/lircd stop

Mit dem Programm irw kann man - wenn der lircd-Dienst läuft - die Zuordnung der Fernbedienungstasten überprüfen. Einfach irw starten und Tasten auf der Fernbedienung drücken. Das Programm irw gibt dann für jedes Ereignis (drücken, loslassen, wiederholen) eine Zeile mit Informationen aus.

Nun steht der weiteren Konfiguration von VDR und den Plugins nichts mehr im Wege.