BlinkenLEDsPro 1.1/lldrv

From S23Wiki
Jump to: navigation, search

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/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 <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.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

#!/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

BlinkenArea-Forum thread

[1]

[2]