MPS E9 - Input driver


Øvelses Steps
I første omgang vil vi prøve at lege lidt med eksemplet fra bogen (ELDD): virtual mouse. Vi kompilerer driveren, indsætter den i kernen og lader udev + evdev registrerer den, således at X11 kan anvende den og lade os styre cursoren via driveren. Vi kan nu give inputs til den virtuelle mus ved at skrive til dens virtuelle-input fil. Dette resulterer i at cursoren bevæger sig.
En virkelig input driver tager input fra f.eks en analog spænding, gpio knapper, you-name-it og får disse omsat til evdev events som kan bruges som input til gpm/X11/QT serveren. 

a) Vi starter i Ubuntu. For at kunne kompilere driverne til din pc. er der en række kerne specifikke filer der skal være på plads. Normalt vil det sige hele kernetræet, men her er det tilstrækkeligt med at installere header filerne til den kørende. Af praktiske grunde er det smartes at udføre samtlige 3 kommandoer nedenfor.
sudo apt-get update
sudo apt-get install linux-image-generic linux-headers-generic
Bemærk at hvis der installeres en ny linux-image-generic pakke, skal I lige genstarte jeres linux bagefter installationen. 
Herefter kompilerer du den virtuelle mus driver:
cd vms
make
Check hvilke input devices som du har på din PC
ls -l /dev/input


Indsæt driveren i Linux på PC'en (Ubuntu)
sudo insmod vms.ko
Check igen dine input devices
ls -l /dev/input
-Her skulle gerne være blevet tilføjet et nyt som hedder mouseXYZ

Udev og Evdev har nu lavet arbejdet under kølerhjelmen og X11 burde kunne detektere events fra den virtuelle mus.
Der ses en mouse3 i stedet for mouseXYZ.

Prøv nu at give den virtuelle mus inputs:
echo <x> <y> <z> > /sys/devices/platform/vms/coordinates

ex:

echo 10 10 0 > /sys/devices/platform/vms/coordinates
Cursoren skulle gerne bevæge sig nu. 


Bevæger sig mod nedre højre hjørne.

b) Nu skal vi prøve på target. Først kompilerer mm vi modulet til Devkit8000:
cd vms
make target
scp vms.ko root@10.9.8.2:
Som med Ubuntu, check nu på target hvilke input devices som eksisterer før du indsætter driveren:
ls -l /dev/input


Indsæt driveren og noter mouse nr
insmod vms.ko
ls -l /dev/input


Nu mangler vi blot en grafisk applikation at prøve det på. Kopier QT applikationen qt_test2 til target:
cd qt/qt_test2
scp qt_test2 root@10.9.8.2:
QT skal vide hvilke input den skal benytte som keyboard, mouse etc. Dette er angivet i nogle system variable, QWS_MOUSE_PROTO og QWS_KEYBOARD Se opsætningen for mouse:
echo $QWS_MOUSE_PROTO
Outputtet fortæller os at den benytter event driveren "tslib" og et device som ligger under /dev/input/eventX. Vi vil nu tilføje vores virtuelle mus som input til system variablen (erstat XYZ med nummeret fundet før):
export QWS_MOUSE_PROTO="Tslib:/dev/input/touchscreen0 IntelliMouse:/dev/input/mouseXYZ"

Start QT applikationen på target:
./qt_test2 -qws
Bemærk hvordan at vi kan flytte på slideren vha touch screen og at progress bar'en flytter sig tilsvarende. Vi vil nu prøve at påvirke den virtuelle mus.
Opret en ny ssh forbindelse til target og skriv nogle nye relative koordinater til musen:


ssh root@10.9.8.2
echo 10 10 0 > /sys/devices/platform/vms/coordinates

Det ses at musen bevæger sig

Ingen kommentarer:

Send en kommentar