Klaas' Linux-tips
Iosolution versie 02 en 03

Linux driver voor de Leiderdorp Instruments USB I/O Solution

Deze driver is alleen geschikt voor Linux kernel versie 2.4.xx.

Driver voor kernelversie 2.6 is hier

Het programma en de driver zijn alleen in broncode te downloaden.
Voor het installeren van de kernel-driver is het nodig de linuxkernel opnieuw te compileren, dus is de volledige kernelbroncode nodig.
Er is namelijk een kleine aanpassing (hack) nodig die er voor zorgd dat deze driver de I/O solution aanstuurd in plaats van de standaard Linux USB driver voor HID devices.
De Linux driver voor HID devices ziet de I/O solution namelijk als muis.

Stappenplan (hack) voor het installeren van de driver:

  • Download de broncode van de driver (zie verderop).
  • Installeer de linuxkernel. De driver is getest met kernel vanaf versie 2.4.22 , maar werkt waarschijnlijk met elke 2.4.xx kernel die USB ondersteund.
    Zorg dat de kernel goed is geconfigureerd zodat alles juist werkt.
  • Open het bestand linux-2.4.xx/drivers/usb/hid-core.c uit de kernelbroncode, en ga op zoek naar de tabel hid_blacklist[] op ongeveer regel 1200.
    Deze tabel bevat USB devices die door de Linuxdriver genegeerd worden.
    Voeg aan de tabel toe net voor de laatste regel met "{ 0, 0 }"de regel
    "1952,4097,HID_QUIRK_IGNORE }," zonder aanhalingstekens !!!
    Dit zorgt ervoor dat de standaard Linux driver de I/O solution negeert.
    Het eind van de tabel ziet er dan zo uit :

    { USB_VENDOR_ID_MGE, USB_DEVICE_ID_MGE_UPS1, HID_QUIRK_HIDDEV },
    {1952,4097,HID_QUIRK_IGNORE }, // IO/solution
    { 0, 0 }
    };


  • Pak de broncode uit met "tar -xzvf iosolotion.xx.tar.gz" (xx = versienummer).
  • Ga de nieuw aangemaakte directory binnen en pas evt de makefile aan zodat het include directive naar de juiste Linux kernelbroncode wijst.
  • Compileer de broncode door "make" in te voeren als root.
  • Met een beetje geluk ontstaat dan "iosolution.o" .
    Kopieer dit bestand als root naar /lib/modules/2.4.xx (xx = kernelversie) dmv
    "cp iosolution.o /lib/modules/2.4.xx"
  • Voer in "make node" voor het aanmaken van de device-nodes in de /dev/ directory.
    Er worden standaard 8 devices aangemaakt /dev/iosolution0 ..... /dev/iosolution7 met het major node numer 60. Dit is bedoeld voor Lokaal/expirimenteel gebruik.
  • Werk de module dependancy's bij met "/sbin/depmod -a".
  • Laad de driver door het ingeven van "/sbin/insmod iosolution"
  • Bij het aansluiten van de I/O solution moet de driver zich dan in de systemlog melden met :
    Leiderdorp Instruments I/O Solution Aangesloten op usb3:2.0 device :/dev/iosolution0
    xxxx kernel: iosolution.c: v0.2:USB I/O solution driver.

Uitlezen van de I/O solution kan met "cat /dev/iosolution0". Dit levert 16 cijfers 0 of 1 op afhankelijk van het logische niveau van de poorten.
Op deze manier is de I/O solution eenvoudig via shell scripts uit te lezen.
Uitlezen kan ook via een ioctl. (zie de broncode voor details).
Schrijven kan door de data naar /dev/iosolution0 te schrijven. op dezelfde manier als bij de windows driver.
Zie voor uitleg www.elomax.nl.

Laatste versie voor kernel 2.4.xx met enkele aanpassingen (aug 2005): iosolution-0.3.tar.gz .

Oude versie: iosolution-0.2.tar.gz

Kijk hier voor het bijbehorende terminal programma 'io';

Tips:

  • voeg toe aan /etc/modules.conf: "alias char-major-60 iosolution"
    Dit zorgt voor het automatisch laden van de driver "on demand".
  • of laad de driver door "/sbin/insmod iosoloution" toe te voegen aan /etc/rc.d/rc.local.
  • "cut -c2 /dev/iosolution0" geeft het logische niveau van poort 0 bit 1 (handig in shell of cgi scripts)
    scriptvoorbeeld:

    if [ `cut -c3 /dev/iosolution0` = 1 ]; then
    echo " p0.2 is hoog"
    else
    echo " p0.2 is laag"
    fi

  • Besturen van de I/O solution gaat het makkelijkst met het programma "io".

Plaatje van I/O solution setje "geleend" van www.elomax.nl Ideeen voor verbeteringen ? of bugs ? mail naar klaas@iosolution4linux.tk.
Het programma werkt bij mij zonder problemen ondanks dat het een hack is. Ik heb uitgebreid geexpirimenteerd met de standaard drivers voor HID USB devices in de linux-kernel maar kreeg deze niet aan het werk. Daarna heb ik een driver voor een USB muis als voorbeeld genomen en een nieuwe driver geschreven en een bijbehorend programma.
Volgens mij is het eenvoudig mogelijk om de driver aan te passen zodat ook de andere USB elektronica van Leiderdorp Instruments (www.elomax.nl) vanuit Linux is aan te sturen. Dit kan ik niet testen omdat ik deze niet (nodig) heb.
De driver is met de standaard instellingen in staat om 8 I/O solutions aan te sturen. dit aantal is afhankelijk van een constante in de broncode. Dit heb ik niet getest omdat ik er slechts 1 heb.

Update aug. 2005: De laatste aanpassingen versie 0.3 (aug 2005) zijn naar aanleiding van emailwisseling met J Swenker die enkele verbeteringen heeft gestuurd.

Info is (c) Klaas Noordstra | Webmaster:Klaas | disclaimer