Kernel Linux
Input
Quem sou eu
● Marcos Paulo de Souza - Prazer :)
● Bacharel em Ciência da Computação pela FURB
● Engenheiro de Software
● Contribuidor do LibreOffice
● Contribuidor do Kernel Linux
Agenda
● O que é o kernel
● Device Drivers
● Classes de drivers
● Input
● HID
● Juntando tudo
● Referências
O que é o kernel
● Gerenciador de recursos
● Provê recursos os programas quando requisitado
● Controle de acessos
● A camada abaixo dele “da choque”
Device Drivers
● Conhecem o dispositivo em sua intimidade
● 70% do código do kernel são drivers
Classes de drivers
● Subdivisões dos drivers
● Servem para descrever o propósito do
driver
● Facilidade em encontrar um device
específico
Classes de drivers
Classes de drivers
Input
Camada base para toda interação de “entrada” do kernel:
● Mouse
● Teclado
● Force feedback
● LEDs dos input devices
● Tablets
● Touch screen
Input
Para mouse e teclado, input utiliza os protocolos para interagir diretamente com o
device:
● PS/2
● RMI4
● I2C
● AT
● USB
● Bluetooth
● ...
Input -> hid
hid == Human Interface Devices
● Utiliza as interfaces do input
● Mapeia entrada/saída para o kernel de devices como um controle
● Exemplos de drivers HID
○ DragonRise controller
○ PS{2,3,4} controller
○ Nintendo Wii/WiiU devices
○ IR controller
Input - evdev
● Cada device manipulado pelo input tem eventos relacionados a ele
● Esses eventos podem ser “lidos” por um programa e então efetuar
● Emuladores conseguem pegar eventos de controles e então envia-los para o jogo
Input - uinput - libevdev
● Permite manipular o subsistema de input da camada do usuário
● Com ele, é possível criar um “device virtual”, possibilitando enviar eventos para o
Servidor de Tela (X11 ou Wayland)
● Libevdev serve para facilitar o setup do uinput, podendo de forma fácil monitorar
e enviar eventos
Juntando tudo
O que conseguimos fazer com isso tudo?
● Ler e emitir eventos
● Emitir force feedback (para controles)
● Criar devices virtuais para utilizar como controles
● Se divertir
Referências
● http://lxr.free-electrons.com/source/Documentation/hid/
● http://lxr.free-electrons.com/source/Documentation/input/
● https://www.freedesktop.org/software/systemd/man/libudev.html
● https://www.freedesktop.org/software/libevdev/doc/latest/
● http://thiemonge.org/getting-started-with-uinput
● http://who-t.blogspot.com.br/2016/05/the-difference-between-uinput-and-evdev.html
● https://github.com/marcosps/kernel_experiments/blob/master/userspace/evdev_libudev.c
Dúvidas
Obrigado!
Contato:
● Email: marcos.souza.org@gmail
● Twitter: @omarcossouza
● Github: github.com/marcosps

Linux Kernel Input: mouse, teclado, joystick

  • 1.
  • 2.
    Quem sou eu ●Marcos Paulo de Souza - Prazer :) ● Bacharel em Ciência da Computação pela FURB ● Engenheiro de Software ● Contribuidor do LibreOffice ● Contribuidor do Kernel Linux
  • 3.
    Agenda ● O queé o kernel ● Device Drivers ● Classes de drivers ● Input ● HID ● Juntando tudo ● Referências
  • 4.
    O que éo kernel ● Gerenciador de recursos ● Provê recursos os programas quando requisitado ● Controle de acessos ● A camada abaixo dele “da choque”
  • 5.
    Device Drivers ● Conhecemo dispositivo em sua intimidade ● 70% do código do kernel são drivers
  • 6.
    Classes de drivers ●Subdivisões dos drivers ● Servem para descrever o propósito do driver ● Facilidade em encontrar um device específico
  • 7.
  • 8.
  • 9.
    Input Camada base paratoda interação de “entrada” do kernel: ● Mouse ● Teclado ● Force feedback ● LEDs dos input devices ● Tablets ● Touch screen
  • 10.
    Input Para mouse eteclado, input utiliza os protocolos para interagir diretamente com o device: ● PS/2 ● RMI4 ● I2C ● AT ● USB ● Bluetooth ● ...
  • 11.
    Input -> hid hid== Human Interface Devices ● Utiliza as interfaces do input ● Mapeia entrada/saída para o kernel de devices como um controle ● Exemplos de drivers HID ○ DragonRise controller ○ PS{2,3,4} controller ○ Nintendo Wii/WiiU devices ○ IR controller
  • 12.
    Input - evdev ●Cada device manipulado pelo input tem eventos relacionados a ele ● Esses eventos podem ser “lidos” por um programa e então efetuar ● Emuladores conseguem pegar eventos de controles e então envia-los para o jogo
  • 13.
    Input - uinput- libevdev ● Permite manipular o subsistema de input da camada do usuário ● Com ele, é possível criar um “device virtual”, possibilitando enviar eventos para o Servidor de Tela (X11 ou Wayland) ● Libevdev serve para facilitar o setup do uinput, podendo de forma fácil monitorar e enviar eventos
  • 14.
    Juntando tudo O queconseguimos fazer com isso tudo? ● Ler e emitir eventos ● Emitir force feedback (para controles) ● Criar devices virtuais para utilizar como controles ● Se divertir
  • 15.
    Referências ● http://lxr.free-electrons.com/source/Documentation/hid/ ● http://lxr.free-electrons.com/source/Documentation/input/ ●https://www.freedesktop.org/software/systemd/man/libudev.html ● https://www.freedesktop.org/software/libevdev/doc/latest/ ● http://thiemonge.org/getting-started-with-uinput ● http://who-t.blogspot.com.br/2016/05/the-difference-between-uinput-and-evdev.html ● https://github.com/marcosps/kernel_experiments/blob/master/userspace/evdev_libudev.c
  • 16.
  • 17.
    Obrigado! Contato: ● Email: marcos.souza.org@gmail ●Twitter: @omarcossouza ● Github: github.com/marcosps