×
Create a new article
Write your page title here:
We currently have 3,189 articles on s23. Type your article name above or create one of the articles listed here!



    s23
    3,189Articles

    BlinkenLEDsPro 1.1/lldrv

    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
    

    Weitere Seiten[edit]

    BlinkenLEDsPro_1.1_engl#QuickHowTo

    BlinkenArea-Forum thread

    [1]

    [2]

    Cookies help us deliver our services. By using our services, you agree to our use of cookies.
    Cookies help us deliver our services. By using our services, you agree to our use of cookies.