skazzo
30-11-2004, 12:38
Visto che ho fatto un po' di ricerche per fare andare il mio touchscreen su linux, e che da queste parti il Lilliput lo conoscono in un discreto numero, spero di rendere la vita più semplice per chi come me vuole utilizzare questo bell'oggetto con il pinguino.
Più avanti pubblicherò il tutto anche sul mio sito.
Lilliput 7" Touchscreen USB HOWTO
Tratto dalla discussione sul forum mp3car.com (http://www.mp3car.com/vbulletin/showthread.php?t=22651)
e dal Linux-Input-USB-Touchscreen-HowTo (http://www.groomlakelabs.com/grandamp/code/microtouch/Linux-Input-USB-Touchscreen-HowTo.txt)
Il monitor LCD 7" Lilliput modello 619GL-70NP ha un touchscreen incorporato, ma il suporto per linux da parte della casa produttrice è praticamente inesistente.
Il controller touchscreen utilizzato da questo schermo è costruito da eGalax Inc. che fornisce il driver TouchKit per windows, dos, mac e alcune distribuzioni linux. http://www.egalax.com.tw/Download.htm
Tale driver è ora presente nel kernel dalla versione 2.6, per cui non è necessario scaricarlo dal produttore.
Il problema, però sta nel fatto che non è persente il driver per XFree86 e che il driver presente nel kernel non funziona perfettamente con i monitor lilliput, in quanto gli assi sono stati invertiti.
Ecco quindi i passi per far funzionare correttamente il touchscreen sotto Linux.
Correggere il modulo touchkitusb
Per correggere il driver, dobbiamo agire sul codice sorgente del modulo touchkitusb.
Possiamo approfittare di questa modifica per ricompilare il kernel, ma non rientra nei nostri obiettivi.
Scarichiamo i sorgenti del kernel in nostro possesso, oppure un kernel più aggiornato. per sapere l'esatta versione del vostro kernel basterà chiamare il comando
$ uname -r
Con debian è facile scaricare i sorgente, basta utilizzare il comando
# apt-get install kernel-source-"versionekernel"
dove "versionekernel" è il risultato del comando "uname -r".
Vi ricordo che abbiamo bisogno della versione 2.6 del kernel, o più aggiornata.
Inoltre abbiamo bisogno dei tool di sviluppo per poter compilare il tutto. Per chi ha debian, basterà utilizzare il comando
# apt-get install kernel-package
e
# apt-get install libc6-dev
scaricherà gli headers necessari per poter compilare il modulo
Decomprimiamo le sorgenti, che sono state scaricate nella directory /usr/src:
# cd /usr/src
# tar xfz kernel-source-"versionekernel".tar.gz
oppure
# tar xfj kernel-source-"versionekernel".tar.bz2
a seconda del tipo di compressione dell'archivio.
Creiamo un link "linux" che punta alla cartella appena decompressa:
# ln -s kernel-source-"versionekernel" linux
modifichiamo quindi il nostro driver:
# cd linux
# vi drivers/usb/input/touchkitusb.c
andiamo alla linea 55 (basta digitare 55G)
55:#define TOUCHKIT_GET_X(dat) (((dat)[3] << 7) | (dat)[4])
56:#define TOUCHKIT_GET_Y(dat) (((dat)[1] << 7) | (dat)[2])
e invertiamo X e Y:
#define TOUCHKIT_GET_Y(dat) (((dat)[3] << 7) | (dat)[4])
#define TOUCHKIT_GET_X(dat) (((dat)[1] << 7) | (dat)[2])
per gli atei di VI, basta spostare il cursore sulla 'X' con le frecce, premere il tasto 'r' e 'Y'; lo stesso si fa con la linea successiva: ci si spoasta sulla Y, si prame 'r' e 'X'.
Il driver è modificato, ora dobbiamo compilare il modulo.
Se volete aggiornare il kernel, allora vi rimando a guide specifiche sulla configurazione e compilazione del kernel.
Se invece volete aggiornare il solo modulo procedete come segue:
copiamo il file di configurazione del kernel attuale nella cartella dei sorgenti del kernel:
# cp /boot/config-"versionekernel" .config
lanciamo quindi il comando:
# make oldconfig
Per creare i moduli abbiamo bisogno di MODPOST:
# make scripts
Fatto questo compiliamo solo i moduli presenti nella cartella drivers/usb/input:
# make M=drivers/usb/input modules
Ok, il modulo è pronto per essere sostituito!
# cp drivers/usb/input/touchkitusb.ko \
> /lib/modules/2.6.8-1-686/kernel/drivers/usb/input/
Se la copia è andata a buon fine ci siamo...
# depmod -ae
assicura che non ci siano errori di dipendenza dei moduli.
Fatto! Avviate il driver e proseguite con la configurazione...
Installazione del driver per XFree86
XFree86 non contiene i driver per il touchscreen (o meglio non nel pacchetto base di debian).
Scarichiamo allora il pacchetto
http://stz-softwaretechnik.com/~ke/lifebook/evtouch-0.6.1.tar.gz
Per versioni più aggiornate o per il codice sorgente visitate la pagina
http://www.conan.de/lifebook/lifebook-2.6.html
Possiamo scaricare l'archivio nella nostra home.
decomprimiamo l'archivio appena scaricato:
$ tar xfz evtouch-0.6.1.tar.gz
e copiamo il file "evtouch_drv.o" nella cartella /usr/X11R6/lib/modules/input
# cp evtouch-0.6.1/evtouch_drv.o \
> /usr/X11R6/lib/modules/input
Configurazione del driver per XFree86
Per configurare correttamente il driver dobbiamo sapere quale handler di eventi viene utilizzato dal touchscreen.
Colleghiamo il touchscreen. Se il driver del kernel era già installato, vi basterà eseguire il coomando
$ cat /proc/bus/input/devices
tale comando dovrebbe visualizzare qualcosa del genere (oltre a mouse e tastiera):
I: Bus=0003 Vendor=0596 Product=0001 Version=0200
N: Name="MicroTouch Systems, Inc. MicroTouch USB Touchscreen"
P: Phys=usb-0000:00:01.3-2.1/input0
H: Handlers=mouse1 event2
B: EV=b
B: KEY=400 0 0 0 0 0 0 0 0 0 0
B: ABS=3
il nome potrebbe essere (come nel mio caso) "eGalax Inc....".
La linea che a noi interessa è H: ... se anche il vostro output riporta event2, allora la'handler da specificare sarà
/dev/input/event2
Modifichiamo quindi il file /etc/X11/XF86Config-4:
# vi /etc/X11/XFConfig-4
aggiungiamo queste righe:
Section "InputDevice"
Identifier "touchscreen0"
Driver "evtouch"
Option "Device" "/dev/input/event2"
Option "DeviceName" "touchscreen"
Option "MinX" "49"
Option "MaxX" "1980"
Option "MinY" "100"
Option "MaxY" "1960"
Option "DragTimer" "500"
Option "MoveLimit" "100"
Option "ReportingMode" "Raw"
EndSection
e aggiugniamo la linea
InputDevice "touchscreen0"
nella sezione "ServerLayout".
nell'opzione "Device" sostituite "event2" con l'handler trovato precedentemente, se questo è differente.
Bene, siamo pronti!
Avviate X, il touchscreen dovrebbe funzionare alla grande!
Più avanti pubblicherò il tutto anche sul mio sito.
Lilliput 7" Touchscreen USB HOWTO
Tratto dalla discussione sul forum mp3car.com (http://www.mp3car.com/vbulletin/showthread.php?t=22651)
e dal Linux-Input-USB-Touchscreen-HowTo (http://www.groomlakelabs.com/grandamp/code/microtouch/Linux-Input-USB-Touchscreen-HowTo.txt)
Il monitor LCD 7" Lilliput modello 619GL-70NP ha un touchscreen incorporato, ma il suporto per linux da parte della casa produttrice è praticamente inesistente.
Il controller touchscreen utilizzato da questo schermo è costruito da eGalax Inc. che fornisce il driver TouchKit per windows, dos, mac e alcune distribuzioni linux. http://www.egalax.com.tw/Download.htm
Tale driver è ora presente nel kernel dalla versione 2.6, per cui non è necessario scaricarlo dal produttore.
Il problema, però sta nel fatto che non è persente il driver per XFree86 e che il driver presente nel kernel non funziona perfettamente con i monitor lilliput, in quanto gli assi sono stati invertiti.
Ecco quindi i passi per far funzionare correttamente il touchscreen sotto Linux.
Correggere il modulo touchkitusb
Per correggere il driver, dobbiamo agire sul codice sorgente del modulo touchkitusb.
Possiamo approfittare di questa modifica per ricompilare il kernel, ma non rientra nei nostri obiettivi.
Scarichiamo i sorgenti del kernel in nostro possesso, oppure un kernel più aggiornato. per sapere l'esatta versione del vostro kernel basterà chiamare il comando
$ uname -r
Con debian è facile scaricare i sorgente, basta utilizzare il comando
# apt-get install kernel-source-"versionekernel"
dove "versionekernel" è il risultato del comando "uname -r".
Vi ricordo che abbiamo bisogno della versione 2.6 del kernel, o più aggiornata.
Inoltre abbiamo bisogno dei tool di sviluppo per poter compilare il tutto. Per chi ha debian, basterà utilizzare il comando
# apt-get install kernel-package
e
# apt-get install libc6-dev
scaricherà gli headers necessari per poter compilare il modulo
Decomprimiamo le sorgenti, che sono state scaricate nella directory /usr/src:
# cd /usr/src
# tar xfz kernel-source-"versionekernel".tar.gz
oppure
# tar xfj kernel-source-"versionekernel".tar.bz2
a seconda del tipo di compressione dell'archivio.
Creiamo un link "linux" che punta alla cartella appena decompressa:
# ln -s kernel-source-"versionekernel" linux
modifichiamo quindi il nostro driver:
# cd linux
# vi drivers/usb/input/touchkitusb.c
andiamo alla linea 55 (basta digitare 55G)
55:#define TOUCHKIT_GET_X(dat) (((dat)[3] << 7) | (dat)[4])
56:#define TOUCHKIT_GET_Y(dat) (((dat)[1] << 7) | (dat)[2])
e invertiamo X e Y:
#define TOUCHKIT_GET_Y(dat) (((dat)[3] << 7) | (dat)[4])
#define TOUCHKIT_GET_X(dat) (((dat)[1] << 7) | (dat)[2])
per gli atei di VI, basta spostare il cursore sulla 'X' con le frecce, premere il tasto 'r' e 'Y'; lo stesso si fa con la linea successiva: ci si spoasta sulla Y, si prame 'r' e 'X'.
Il driver è modificato, ora dobbiamo compilare il modulo.
Se volete aggiornare il kernel, allora vi rimando a guide specifiche sulla configurazione e compilazione del kernel.
Se invece volete aggiornare il solo modulo procedete come segue:
copiamo il file di configurazione del kernel attuale nella cartella dei sorgenti del kernel:
# cp /boot/config-"versionekernel" .config
lanciamo quindi il comando:
# make oldconfig
Per creare i moduli abbiamo bisogno di MODPOST:
# make scripts
Fatto questo compiliamo solo i moduli presenti nella cartella drivers/usb/input:
# make M=drivers/usb/input modules
Ok, il modulo è pronto per essere sostituito!
# cp drivers/usb/input/touchkitusb.ko \
> /lib/modules/2.6.8-1-686/kernel/drivers/usb/input/
Se la copia è andata a buon fine ci siamo...
# depmod -ae
assicura che non ci siano errori di dipendenza dei moduli.
Fatto! Avviate il driver e proseguite con la configurazione...
Installazione del driver per XFree86
XFree86 non contiene i driver per il touchscreen (o meglio non nel pacchetto base di debian).
Scarichiamo allora il pacchetto
http://stz-softwaretechnik.com/~ke/lifebook/evtouch-0.6.1.tar.gz
Per versioni più aggiornate o per il codice sorgente visitate la pagina
http://www.conan.de/lifebook/lifebook-2.6.html
Possiamo scaricare l'archivio nella nostra home.
decomprimiamo l'archivio appena scaricato:
$ tar xfz evtouch-0.6.1.tar.gz
e copiamo il file "evtouch_drv.o" nella cartella /usr/X11R6/lib/modules/input
# cp evtouch-0.6.1/evtouch_drv.o \
> /usr/X11R6/lib/modules/input
Configurazione del driver per XFree86
Per configurare correttamente il driver dobbiamo sapere quale handler di eventi viene utilizzato dal touchscreen.
Colleghiamo il touchscreen. Se il driver del kernel era già installato, vi basterà eseguire il coomando
$ cat /proc/bus/input/devices
tale comando dovrebbe visualizzare qualcosa del genere (oltre a mouse e tastiera):
I: Bus=0003 Vendor=0596 Product=0001 Version=0200
N: Name="MicroTouch Systems, Inc. MicroTouch USB Touchscreen"
P: Phys=usb-0000:00:01.3-2.1/input0
H: Handlers=mouse1 event2
B: EV=b
B: KEY=400 0 0 0 0 0 0 0 0 0 0
B: ABS=3
il nome potrebbe essere (come nel mio caso) "eGalax Inc....".
La linea che a noi interessa è H: ... se anche il vostro output riporta event2, allora la'handler da specificare sarà
/dev/input/event2
Modifichiamo quindi il file /etc/X11/XF86Config-4:
# vi /etc/X11/XFConfig-4
aggiungiamo queste righe:
Section "InputDevice"
Identifier "touchscreen0"
Driver "evtouch"
Option "Device" "/dev/input/event2"
Option "DeviceName" "touchscreen"
Option "MinX" "49"
Option "MaxX" "1980"
Option "MinY" "100"
Option "MaxY" "1960"
Option "DragTimer" "500"
Option "MoveLimit" "100"
Option "ReportingMode" "Raw"
EndSection
e aggiugniamo la linea
InputDevice "touchscreen0"
nella sezione "ServerLayout".
nell'opzione "Device" sostituite "event2" con l'handler trovato precedentemente, se questo è differente.
Bene, siamo pronti!
Avviate X, il touchscreen dovrebbe funzionare alla grande!