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