Klaas' Linux-tips
Iosolution versie 06

Linux driver voor de Leiderdorp Instruments USB I/O Solution

Deze driver is alleen geschikt voor Linux kernel versie 2.6.xx tot 2.6.14.

Driver voor kernelversie 2.4 is hier

Driver voor kernelversie vanaf 2.6.14 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 op kernel 2.6.xx op een systeem dat udev gebruikt (getest op Fedora Core 3 met kernel 2.6.11 en 2.6.12).:

  • Download de broncode van de driver (zie verderop).
  • Installeer de linuxkernel. Zorg dat de kernel goed is geconfigureerd zodat alles juist werkt.De driver is o.a. getest met kernel versie 2.6.11.
  • Omdat de Linux kernel de I/O solution als muis herkent is de volgende aanpassing nodig:
    Open het bestand linux-2.6.xx/drivers/usb/input/hid-core.c uit de kernelbroncode, en ga op zoek naar de tabel hid_blacklist[] op ongeveer regel 1400. 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 ongeveer zo uit :

    { USB_VENDOR_ID_MGE, USB_DEVICE_ID_MGE_UPS1, HID_QUIRK_HIDDEV }, {1952,4097,HID_QUIRK_IGNORE }, // IO/solution { 0, 0 } };
    Daarna de kernel(modules) opnieuw compileren en installeren.

  • Pak de broncode van de driver uit met "tar -xzvf iosolotion.xx.tar.gz" (xx = versienummer).
  • Compileer de broncode door "./maak" in te voeren.
    Met een beetje geluk ontstaat dan "iosolution.ko"
  • Als root:
    Kopieer iosolution.ko naar /lib/modules/2.6.xx (xx = kernelversie) dmv "cp iosolution.ko /lib/modules/2.6.xx".
  • Werk de module dependancy's bij met "/sbin/depmod -a"
  • Werkt je systeem met udev dan:
    Kopieer het meegeleverde bestand "20-iosolution.rules" naar de directory /etc/udev/rules.d
    Kopieer het meegeleverde bestand "20-iosolution.permissions naar de directory /etc/udev/permissions.d
    (eventueel naar wens aanpassen zie man page van udev).
    Werkt je systeem niet met udev of devfs (bestaat dat nog?) maak dan device nodes aan door ingeven van "make node". Dit maakt 8 device nodes aan in de /dev directory (iosolution0 ... iosolution7).
  • Als je daarna de iosolution aansluit word de driver automatisch geladen. Zoniet laad dan de driver door het ingeven van "/sbin/insmod iosolution.ko" of "modprobe 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.
  • Installeer het programma io volgens bijgeleverde instruktie's. Je kunt de werking het eenvoudigst testen door uitvoeren van:
    io -ah = zet alle lijken hoog (1)
    io -al = zet alle lijnen laag (0)
    Dit moet dan meetbaar zijn op de uitgangen. (of sluit een paar ledjes aan!)

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.

Download nieuwste versie geschikt voor kernel 2.6 met devfs of udev (oktober 2005): iosolution-0.6.tar.gz .

Kijk hier voor het bijbehorende terminal programma 'io';

Tips:

  • "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. De driver is getest met 2 I/O solutions en werkt daarmee goed. Wel is het met meer dan 1 I/O solution moeilijk te bepalen welke chip op welke device (iosolutionXX) zit.



Update 15 oktober 2005: Aangepast op kernel 2.6.xx

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