Pages

Monday, November 26, 2012

MPS – Exercise 9 – Input Driver


Formål

Linux' input system lader os nemt anvende diverse HID'er i vores applikationer. Ved at registrere vores driver med input systemet, kan f.eks. et ADC input anvendes til at drive systems mus input.

Øvelsen

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) Kompilere og test virtuel mus driver på PC (linux)

For at kompilere driverne til pc’en skal vi installere skal man normalt installere noget på hele kernetræet, men  i dette tilfælde er det nok med kun at installere header filerne til den kørende driver.
Af praktiske årsager starter vi med at gør følgende:
sudo apt-get update
sudo apt-get install linux-image-generic linux-headers-generic

PC’en genstartes efterfølgende.

Hernæst udfører vi følgende steps for at kompilerer den virtuelle mus til PC:

Skifter directory til vms, som er hentet  fra campus svn:
      STEP 1.           cd vms

Maker:
      STEP 2.           make

Tjekker hvilke input devices jeg har på min PC:
      STEP 3.           ls –l /dev/input

Terminal output














Driveren indsættes i Linux på PC’en:
      STEP 4.           sudo insmod vms.ko

Input devices tjekkes igen:
      STEP 5.           ls –l /dev/input


Terminal output
















Udev og Edev har nu gjort arbejedet og derfor burdes X11 kunne detektere events fra den virtuelle mus, vha. følgende input kommando:
      STEP 6.           echo <x> <y> <z> > /sys/devices/platform/vms/coordinates
       ex: echo 10 10 0 > /sys/devices/platform/vms/coordinates

      RESULTAT: Testet på pc og det virker. Cursoren bevæger sig.

 

b) Kompilere og test virtuel mus driver på target

For at kompilere til target gælder samme regler som for PC’en.
Men før vi kan kompilere er det vigtigt at oprette vms.ko filen som dernæst overføres til target:
cd vms
make target
scp vms.ko root@10.9.8.2:

Derefter udføres følgende steps:
Tjekker hvilke input devices jeg har på min target:
      STEP 1.           ls –l /dev/input

Driveren indsættes på target:
      STEP 2.           insmod vms.ko

Input devices tjekkes igen:
      STEP 3.           ls –l /dev/input

Vi kan se at der er blevet oprettet en ekstra mus ”mouse3” samt en ekstra event ”event5” ligesom da vi indsatte driveren på PC’en. Men for at teste om det overhovedet fungerer, skal vi have et grafisk programe til at kører på target. Derfor overføres et Qt program til target. Qt skal vide hvilke input den skal benyttet som keyboard, mus osv., dette er angivet i nogle system variabler. Herunde er variablen som benyttes til mus(mouse):
      STEP 4.           QWS_MOUSE_PROTO

Herunder anvendes kommandoen til at bestemme mouse inputtet for Qt på target:
      STEP 5.           export QWS_MOUSE_PROTO=”Tslib:/dev/input/touchscreen0 InstallMouse: /dev/input/mouse3”

Qt appliaktionen startes på target, der tilføjes ”&” så applikationen kører i baggrunden og vi efterfølgende kan indtaste kommandoen i samme terminal til at bevæge musen:
      STEP 6.           ./qt_test2 –qws &

Kommando til at bevæge musen:
      STEP 7.           echo 10 10 0 > /sys/devices/platform/vms/coordinates

RESULTAT: Testet på target og det virker. Cursoren bevæger sig.


No comments:

Post a Comment