LittleLights driver[edit]
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[edit]
Installation[edit]
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/user/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.
MODULE_PARM( io, "i" );
kann man durch
module_param( io, int, 0400 );
(und die anderen beiden analog) ersetzen...
Dann z.B.:
insmod lldrv.ko io=0x378 irq=7 gamma=15
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 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 <[email protected]> & 1stein <[email protected]> [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.1 anstatt der benötigten Version 4.0 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[edit]
Ich habe mir ein kleines Skript geschrieben, das das Starten des Kernel Moduls erledigt:
(Muss ich leider nach jedem reboot neu starten.)
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