imported>mutante mNo edit summary |
No edit summary |
||
Line 1: | Line 1: | ||
== '''L'''ittle'''L'''ights '''dr'''i'''v'''er == |
|||
little lights driver |
|||
Der lldrv für Benutzung mit der vereinheitlichten Software-Architektur (BlinkenSend, BlinkenOutput - Teile von [http://1stein.blinkenarea.org/BlinkenLib/ BlinkenLib] unterstützt neben BLINKENmini und BlinkenLeds auch das [[BlinkenLEDsPro_1.1]]. |
|||
= Quelle: = |
|||
* [http://1stein.blinkenarea.org/lldrv/ lldrv-xxx.tar.bz2] |
|||
= Installation: = |
|||
'''Aus lldrv.txt: (in lldrv-xxx.tar.bz2)''' |
|||
''LittleLights driver'' |
|||
''kernel driver for LittleLights / BlinkenLEDs(Pro) / BLINKENmini'' |
|||
... |
|||
''As root, type:'' |
|||
make |
|||
... |
|||
rmmod lp parport_pc parport |
|||
... |
|||
insmod lldrv.ko io=<IO port> [irq=<IRQ number>] [hw=<hw>] [gamma=<gamma>] |
|||
... |
|||
mknod /dev/lldrv c 176 0 |
|||
chmod 666 /dev/lldrv |
|||
... |
|||
'''BSP:''' |
|||
als root |
|||
cd /home/user/myfiles/Blinken/lldrv/lldrv-1.2.2_2006-01-08/ |
|||
make |
|||
rmmod lp parport_pc parport |
|||
insmod lldrv.ko io=0x378 irq=7 gamma=15 |
|||
mknod /dev/lldrv c 176 0 |
|||
chmod 666 /dev/lldrv |
|||
Leider klappt das unter Ubuntu / Kubuntu 6.06 nicht so richtig gut: |
|||
'''Fehler bei ''make'':''' |
|||
root@rechner:~/lldrv/lldrv-1.2.2_2006-01-08# make |
|||
make default_2.6 |
|||
make[1]: Betrete Verzeichnis '/home/user/lldrv/lldrv-1.2.2_2006-01-08' |
|||
make -C /lib/modules/2.6.17-10-386/source SUBDIRS=/home/user/lldrv/lldrv-1.2.2_2006-01-08 modules |
|||
make[2]: Betrete Verzeichnis '/lib/modules/2.6.17-10-386/source' |
|||
make[2]: *** Keine Regel, um »modules« zu erstellen. Schluss. |
|||
make[2]: Verlasse Verzeichnis '/lib/modules/2.6.17-10-386/source' |
|||
make[1]: *** [default_2.6] Fehler 2 |
|||
make[1]: Verlasse Verzeichnis '/home/mvqcxfb6/lldrv/lldrv-1.2.2_2006-01-08' |
|||
make: *** [default] Fehler 2 |
|||
Es werden die Kernel-Quellen/Header Dateien nicht 'gefunden' |
|||
--> Makefile editieren (1.): |
|||
In meinem Fall befinden sich die Dateien in: /usr/src/linux-headers-2.6.17-10-386 |
|||
Die Variable KERNEL_SRC muss angepasst werden: |
|||
KERNEL_SRC := /usr/src/linux-headers-2.6.17-10-386 |
|||
Ich habe das direkt im Makefile gemacht. Danach lief es schon etwas weiter. |
|||
root@rechner:~/lldrv/lldrv-1.2.2_2006-01-08# make |
|||
make default_2.6 |
|||
make[1]: Betrete Verzeichnis '/home/user/lldrv/lldrv-1.2.2_2006-01-08' |
|||
make CC=gcc-4.0 -C /usr/src/linux-headers-2.6.17-10-386 SUBDIRS=/home/user/lldrv/lldrv-1.2.2_2006-01-08 modules |
|||
make[2]: Betrete Verzeichnis '/usr/src/linux-headers-2.6.17-10-386' |
|||
CC [M] /home/user/lldrv/lldrv-1.2.2_2006-01-08/lldrv.o |
|||
/home/user/lldrv/lldrv-1.2.2_2006-01-08/lldrv.c:44: Fehler: syntax error before string constant |
|||
/home/user/lldrv/lldrv-1.2.2_2006-01-08/lldrv.c:44: Warnung: »int« ist Standardtyp in Deklaration von »MODULE_PARM« |
|||
/home/user/lldrv/lldrv-1.2.2_2006-01-08/lldrv.c:44: Warnung: Funktionsdeklaration ist kein Prototyp |
|||
/home/user/lldrv/lldrv-1.2.2_2006-01-08/lldrv.c:44: Warnung: Datendefinition hat keinen Typ oder Speicherklasse |
|||
/home/user/lldrv/lldrv-1.2.2_2006-01-08/lldrv.c:46: Fehler: syntax error before string constant |
|||
/home/user/lldrv/lldrv-1.2.2_2006-01-08/lldrv.c:46: Warnung: »int« ist Standardtyp in Deklaration von »MODULE_PARM« |
|||
/home/user/lldrv/lldrv-1.2.2_2006-01-08/lldrv.c:46: Warnung: Funktionsdeklaration ist kein Prototyp |
|||
/home/user/lldrv/lldrv-1.2.2_2006-01-08/lldrv.c:46: Warnung: Datendefinition hat keinen Typ oder Speicherklasse |
|||
/home/user/lldrv/lldrv-1.2.2_2006-01-08/lldrv.c:48: Fehler: syntax error before string constant |
|||
/home/user/lldrv/lldrv-1.2.2_2006-01-08/lldrv.c:48: Warnung: »int« ist Standardtyp in Deklaration von »MODULE_PARM« |
|||
/home/user/lldrv/lldrv-1.2.2_2006-01-08/lldrv.c:48: Warnung: Funktionsdeklaration ist kein Prototyp |
|||
/home/user/lldrv/lldrv-1.2.2_2006-01-08/lldrv.c:48: Warnung: Datendefinition hat keinen Typ oder Speicherklasse |
|||
/home/user/lldrv/lldrv-1.2.2_2006-01-08/lldrv.c:50: Fehler: syntax error before string constant |
|||
/home/user/lldrv/lldrv-1.2.2_2006-01-08/lldrv.c:50: Warnung: »int« ist Standardtyp in Deklaration von »MODULE_PARM« |
|||
/home/user/lldrv/lldrv-1.2.2_2006-01-08/lldrv.c:50: Warnung: Funktionsdeklaration ist kein Prototyp |
|||
/home/user/lldrv/lldrv-1.2.2_2006-01-08/lldrv.c:50: Warnung: Datendefinition hat keinen Typ oder Speicherklasse |
|||
make[3]: *** [/home/user/lldrv/lldrv-1.2.2_2006-01-08/lldrv.o] Fehler 1 |
|||
make[2]: *** [_module_/home/user/lldrv/lldrv-1.2.2_2006-01-08] Fehler 2 |
|||
make[2]: Verlasse Verzeichnis '/usr/src/linux-headers-2.6.17-10-386' |
|||
make[1]: *** [default_2.6] Fehler 2 |
|||
make[1]: Verlasse Verzeichnis '/home/user/lldrv/lldrv-1.2.2_2006-01-08' |
|||
make: *** [default] Fehler 2 |
|||
Es sind zwar 'nur' Warnungen, dennoch treten Fehler auf, die zum Abbruch führen. Die Zeilen: |
|||
lldrv.c:44: MODULE_PARM( io, "i" ); |
|||
lldrv.c:48: MODULE_PARM( irq, "i" ); |
|||
lldrv.c:50: MODULE_PARM( hw, "i" ); |
|||
aus lldrv.c verhindern das Kompilieren. |
|||
--> lldrv.c anpassen: |
|||
Um erfolgreich zu kompilieren, kann man die Zeilen wie Folgt anpassen: |
|||
44: MODULE_PARM_DESC( io, "i" ); |
|||
45: int irq = 7; //IRQ number (-1 for none) |
|||
46: MODULE_PARM_DESC( irq, "i" ); |
|||
47: int hw = 0; //hardware type |
|||
48: MODULE_PARM_DESC( hw, "i" ); |
|||
49: int gamma = 10; //gamma correction value |
|||
50: MODULE_PARM_DESC( gamma, "i" ); |
|||
Leider funktioniert dann die Übergabe der Parameter bei |
|||
insmod lldrv.ko io=0x378 irq=7 gamma=15 |
|||
nicht mehr. Aus diesem Grund, habe ich die Zeilen 45, 47 u. 50 gleich mit editiert. |
|||
'''Fehler bei ''insmod'':''' |
|||
Es kann auch passieren, das |
|||
insmod |
|||
immer noch nicht funktioniert. |
|||
Hier hilft ein Blick in die log-Dateien. Mit |
|||
dmesg |
|||
kann man mal gucken woran es liegen könnte. |
|||
'''BSP:''' |
|||
dmesg |
|||
[17181252.944000] lldrv: module license 'unspecified' taints kernel. |
|||
[17181252.948000] lldrv: LittleLights driver |
|||
[17181252.948000] lldrv: kernel driver for LittleLights / BlinkenLEDs(Pro) / BLINKENmini |
|||
[17181252.948000] lldrv: version 1.2.2 date 2006-01-08 |
|||
[17181252.948000] lldrv: Copyright (C) 2004-2005 ST <st@littlelights.de> & 1stein <1stein@schuermans.info> |
|||
[17181252.948000] lldrv: Copyleft: GNU public license - http://www.gnu.org/copyleft/gpl.html |
|||
[17181252.948000] lldrv: trying to load (io=0x378 irq=7 hw=0 gamma=10)... |
|||
[17181252.952000] lldrv: loaded (io=0x378 irq=7 hw=0 gamma=10)... |
|||
Hier ist alles OK! |
|||
Ich hatte allerdings auch das Problem, das lldrv mit gcc-4.0 anstatt der benötigten Version 4.1 kompiliert wurde. Dies kann man z.B. in der log-Datei sehen. |
|||
--> Makefile editieren (2.): |
|||
Um make die gcc-Version mitzuteilen, habe ich die Zeilen |
|||
27: default_2.6: |
|||
28: $(MAKE) CC=gcc-4.0 -C $(KERNEL_SRC) SUBDIRS=$(PWD) modules |
|||
um 'CC=gcc-4.0' erwitert. |
|||
= Kernel Modul laden: = |
|||
Ich habe mir ein kleines Skript geschrieben, das das Starten des Kernel Moduls erledigt: |
|||
BlinkenOn.sh |
|||
#!/bin/bash |
|||
# remove par-prot |
|||
rmmod lp parport_pc parport |
|||
# install lldrv_ubuntu |
|||
insmod /home/user/lldrv/lldrv-1.2.2_2006-01-08/lldrv.ko |
|||
# make node |
|||
mknod /dev/lldrv c 176 0 |
|||
# change permission |
|||
chmod 666 /dev/lldrv |
|||
= Weitere Seiten: = |
|||
[[BlinkenLEDsPro_1.1_engl#QuickHowTo]] |
[[BlinkenLEDsPro_1.1_engl#QuickHowTo]] |
||
Line 6: | Line 193: | ||
* http://1stein.blinkenarea.org/lldrv/ |
* http://1stein.blinkenarea.org/lldrv/ |
||
[http://blinkenmini.schuermans.info/software.de.html] |
|||
[http://wiki.blinkenarea.org/bin/view/Blinkenarea/BlinkenLEDs] |
Revision as of 16:38, 17 January 2007
LittleLights driver
Der lldrv für Benutzung mit der vereinheitlichten Software-Architektur (BlinkenSend, BlinkenOutput - Teile von BlinkenLib unterstützt neben BLINKENmini und BlinkenLeds auch das BlinkenLEDsPro_1.1.
Quelle:
Installation:
Aus lldrv.txt: (in lldrv-xxx.tar.bz2)
LittleLights driver
kernel driver for LittleLights / BlinkenLEDs(Pro) / BLINKENmini
...
As root, type:
make
...
rmmod lp parport_pc parport
...
insmod lldrv.ko io=<IO port> [irq=<IRQ number>] [hw=<hw>] [gamma=<gamma>]
...
mknod /dev/lldrv c 176 0 chmod 666 /dev/lldrv
...
BSP:
als root
cd /home/user/myfiles/Blinken/lldrv/lldrv-1.2.2_2006-01-08/ make rmmod lp parport_pc parport insmod lldrv.ko io=0x378 irq=7 gamma=15 mknod /dev/lldrv c 176 0 chmod 666 /dev/lldrv
Leider klappt das unter Ubuntu / Kubuntu 6.06 nicht so richtig gut:
Fehler bei make:
root@rechner:~/lldrv/lldrv-1.2.2_2006-01-08# make make default_2.6 make[1]: Betrete Verzeichnis '/home/user/lldrv/lldrv-1.2.2_2006-01-08' make -C /lib/modules/2.6.17-10-386/source SUBDIRS=/home/user/lldrv/lldrv-1.2.2_2006-01-08 modules make[2]: Betrete Verzeichnis '/lib/modules/2.6.17-10-386/source' make[2]: *** Keine Regel, um »modules« zu erstellen. Schluss. make[2]: Verlasse Verzeichnis '/lib/modules/2.6.17-10-386/source' make[1]: *** [default_2.6] Fehler 2 make[1]: Verlasse Verzeichnis '/home/mvqcxfb6/lldrv/lldrv-1.2.2_2006-01-08' make: *** [default] Fehler 2
Es werden die Kernel-Quellen/Header Dateien nicht 'gefunden'
--> Makefile editieren (1.):
In meinem Fall befinden sich die Dateien in: /usr/src/linux-headers-2.6.17-10-386
Die Variable KERNEL_SRC muss angepasst werden:
KERNEL_SRC := /usr/src/linux-headers-2.6.17-10-386
Ich habe das direkt im Makefile gemacht. Danach lief es schon etwas weiter.
root@rechner:~/lldrv/lldrv-1.2.2_2006-01-08# make
make default_2.6 make[1]: Betrete Verzeichnis '/home/user/lldrv/lldrv-1.2.2_2006-01-08' make CC=gcc-4.0 -C /usr/src/linux-headers-2.6.17-10-386 SUBDIRS=/home/user/lldrv/lldrv-1.2.2_2006-01-08 modules make[2]: Betrete Verzeichnis '/usr/src/linux-headers-2.6.17-10-386' CC [M] /home/user/lldrv/lldrv-1.2.2_2006-01-08/lldrv.o /home/user/lldrv/lldrv-1.2.2_2006-01-08/lldrv.c:44: Fehler: syntax error before string constant /home/user/lldrv/lldrv-1.2.2_2006-01-08/lldrv.c:44: Warnung: »int« ist Standardtyp in Deklaration von »MODULE_PARM« /home/user/lldrv/lldrv-1.2.2_2006-01-08/lldrv.c:44: Warnung: Funktionsdeklaration ist kein Prototyp /home/user/lldrv/lldrv-1.2.2_2006-01-08/lldrv.c:44: Warnung: Datendefinition hat keinen Typ oder Speicherklasse /home/user/lldrv/lldrv-1.2.2_2006-01-08/lldrv.c:46: Fehler: syntax error before string constant /home/user/lldrv/lldrv-1.2.2_2006-01-08/lldrv.c:46: Warnung: »int« ist Standardtyp in Deklaration von »MODULE_PARM« /home/user/lldrv/lldrv-1.2.2_2006-01-08/lldrv.c:46: Warnung: Funktionsdeklaration ist kein Prototyp /home/user/lldrv/lldrv-1.2.2_2006-01-08/lldrv.c:46: Warnung: Datendefinition hat keinen Typ oder Speicherklasse /home/user/lldrv/lldrv-1.2.2_2006-01-08/lldrv.c:48: Fehler: syntax error before string constant /home/user/lldrv/lldrv-1.2.2_2006-01-08/lldrv.c:48: Warnung: »int« ist Standardtyp in Deklaration von »MODULE_PARM« /home/user/lldrv/lldrv-1.2.2_2006-01-08/lldrv.c:48: Warnung: Funktionsdeklaration ist kein Prototyp /home/user/lldrv/lldrv-1.2.2_2006-01-08/lldrv.c:48: Warnung: Datendefinition hat keinen Typ oder Speicherklasse /home/user/lldrv/lldrv-1.2.2_2006-01-08/lldrv.c:50: Fehler: syntax error before string constant /home/user/lldrv/lldrv-1.2.2_2006-01-08/lldrv.c:50: Warnung: »int« ist Standardtyp in Deklaration von »MODULE_PARM« /home/user/lldrv/lldrv-1.2.2_2006-01-08/lldrv.c:50: Warnung: Funktionsdeklaration ist kein Prototyp /home/user/lldrv/lldrv-1.2.2_2006-01-08/lldrv.c:50: Warnung: Datendefinition hat keinen Typ oder Speicherklasse make[3]: *** [/home/user/lldrv/lldrv-1.2.2_2006-01-08/lldrv.o] Fehler 1 make[2]: *** [_module_/home/user/lldrv/lldrv-1.2.2_2006-01-08] Fehler 2 make[2]: Verlasse Verzeichnis '/usr/src/linux-headers-2.6.17-10-386' make[1]: *** [default_2.6] Fehler 2 make[1]: Verlasse Verzeichnis '/home/user/lldrv/lldrv-1.2.2_2006-01-08' make: *** [default] Fehler 2
Es sind zwar 'nur' Warnungen, dennoch treten Fehler auf, die zum Abbruch führen. Die Zeilen:
lldrv.c:44: MODULE_PARM( io, "i" );
lldrv.c:48: MODULE_PARM( irq, "i" );
lldrv.c:50: MODULE_PARM( hw, "i" );
aus lldrv.c verhindern das Kompilieren.
--> lldrv.c anpassen:
Um erfolgreich zu kompilieren, kann man die Zeilen wie Folgt anpassen:
44: MODULE_PARM_DESC( io, "i" ); 45: int irq = 7; //IRQ number (-1 for none) 46: MODULE_PARM_DESC( irq, "i" ); 47: int hw = 0; //hardware type 48: MODULE_PARM_DESC( hw, "i" ); 49: int gamma = 10; //gamma correction value 50: MODULE_PARM_DESC( gamma, "i" );
Leider funktioniert dann die Übergabe der Parameter bei
insmod lldrv.ko io=0x378 irq=7 gamma=15
nicht mehr. Aus diesem Grund, habe ich die Zeilen 45, 47 u. 50 gleich mit editiert.
Fehler bei insmod:
Es kann auch passieren, das
insmod
immer noch nicht funktioniert.
Hier hilft ein Blick in die log-Dateien. Mit
dmesg
kann man mal gucken woran es liegen könnte.
BSP:
dmesg
[17181252.944000] lldrv: module license 'unspecified' taints kernel. [17181252.948000] lldrv: LittleLights driver [17181252.948000] lldrv: kernel driver for LittleLights / BlinkenLEDs(Pro) / BLINKENmini [17181252.948000] lldrv: version 1.2.2 date 2006-01-08 [17181252.948000] lldrv: Copyright (C) 2004-2005 ST <st@littlelights.de> & 1stein <1stein@schuermans.info> [17181252.948000] lldrv: Copyleft: GNU public license - http://www.gnu.org/copyleft/gpl.html [17181252.948000] lldrv: trying to load (io=0x378 irq=7 hw=0 gamma=10)... [17181252.952000] lldrv: loaded (io=0x378 irq=7 hw=0 gamma=10)...
Hier ist alles OK!
Ich hatte allerdings auch das Problem, das lldrv mit gcc-4.0 anstatt der benötigten Version 4.1 kompiliert wurde. Dies kann man z.B. in der log-Datei sehen.
--> Makefile editieren (2.):
Um make die gcc-Version mitzuteilen, habe ich die Zeilen
27: default_2.6: 28: $(MAKE) CC=gcc-4.0 -C $(KERNEL_SRC) SUBDIRS=$(PWD) modules
um 'CC=gcc-4.0' erwitert.
Kernel Modul laden:
Ich habe mir ein kleines Skript geschrieben, das das Starten des Kernel Moduls erledigt:
BlinkenOn.sh
#!/bin/bash
# remove par-prot rmmod lp parport_pc parport
# install lldrv_ubuntu insmod /home/user/lldrv/lldrv-1.2.2_2006-01-08/lldrv.ko
# make node mknod /dev/lldrv c 176 0
# change permission chmod 666 /dev/lldrv