BlinkenLEDsPro 1.1/lldrv

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: =


 * 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= [irq=] [hw=] [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  & 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.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: =

Ich habe mir ein kleines Skript geschrieben, das das Starten des Kernel Moduls erledigt:

(Muss ich leider nach jedem reboot neu starten.)

BlinkenOn.sh
 * 1) !/bin/bash

rmmod lp parport_pc parport
 * 1) remove par-prot

insmod /home/user/lldrv/lldrv-1.2.2_2006-01-08/lldrv.ko
 * 1) install lldrv_ubuntu

mknod /dev/lldrv c 176 0
 * 1) make node

chmod 666 /dev/lldrv
 * 1) change permission

= Weitere Seiten: =

BlinkenLEDsPro_1.1_engl

BlinkenArea-Forum thread


 * http://1stein.blinkenarea.org/lldrv/