SlideShare uma empresa Scribd logo
1 de 17
Baixar para ler offline
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

Mais conteúdo relacionado

Destaque

Introduction To Linux Kernel Modules
Introduction To Linux Kernel ModulesIntroduction To Linux Kernel Modules
Introduction To Linux Kernel Modulesdibyajyotig
 
Debugging linux kernel tools and techniques
Debugging linux kernel tools and  techniquesDebugging linux kernel tools and  techniques
Debugging linux kernel tools and techniquesSatpal Parmar
 
Openstack Installation (ver. liberty)
Openstack Installation (ver. liberty)Openstack Installation (ver. liberty)
Openstack Installation (ver. liberty)Eggy Cheng
 
Linux kernel tracing
Linux kernel tracingLinux kernel tracing
Linux kernel tracingViller Hsiao
 
Scaling Your App With Docker Swarm using Terraform, Packer on Openstack
Scaling Your App With Docker Swarm using Terraform, Packer on OpenstackScaling Your App With Docker Swarm using Terraform, Packer on Openstack
Scaling Your App With Docker Swarm using Terraform, Packer on OpenstackBobby DeVeaux, DevOps Consultant
 
OpenStack Tutorial
OpenStack TutorialOpenStack Tutorial
OpenStack TutorialBret Piatt
 
OpenStack Introduction
OpenStack IntroductionOpenStack Introduction
OpenStack Introductionopenstackindia
 
KVM and docker LXC Benchmarking with OpenStack
KVM and docker LXC Benchmarking with OpenStackKVM and docker LXC Benchmarking with OpenStack
KVM and docker LXC Benchmarking with OpenStackBoden Russell
 
OpenStack Architecture
OpenStack ArchitectureOpenStack Architecture
OpenStack ArchitectureMirantis
 
Deep Dive: OpenStack Summit (Red Hat Summit 2014)
Deep Dive: OpenStack Summit (Red Hat Summit 2014)Deep Dive: OpenStack Summit (Red Hat Summit 2014)
Deep Dive: OpenStack Summit (Red Hat Summit 2014)Stephen Gordon
 

Destaque (13)

Introduction To Linux Kernel Modules
Introduction To Linux Kernel ModulesIntroduction To Linux Kernel Modules
Introduction To Linux Kernel Modules
 
Debugging linux kernel tools and techniques
Debugging linux kernel tools and  techniquesDebugging linux kernel tools and  techniques
Debugging linux kernel tools and techniques
 
Openstack Installation (ver. liberty)
Openstack Installation (ver. liberty)Openstack Installation (ver. liberty)
Openstack Installation (ver. liberty)
 
Linux kernel architecture
Linux kernel architectureLinux kernel architecture
Linux kernel architecture
 
Linux kernel tracing
Linux kernel tracingLinux kernel tracing
Linux kernel tracing
 
Scaling Your App With Docker Swarm using Terraform, Packer on Openstack
Scaling Your App With Docker Swarm using Terraform, Packer on OpenstackScaling Your App With Docker Swarm using Terraform, Packer on Openstack
Scaling Your App With Docker Swarm using Terraform, Packer on Openstack
 
Architecture Of The Linux Kernel
Architecture Of The Linux KernelArchitecture Of The Linux Kernel
Architecture Of The Linux Kernel
 
OpenStack Tutorial
OpenStack TutorialOpenStack Tutorial
OpenStack Tutorial
 
OpenStack Introduction
OpenStack IntroductionOpenStack Introduction
OpenStack Introduction
 
KVM and docker LXC Benchmarking with OpenStack
KVM and docker LXC Benchmarking with OpenStackKVM and docker LXC Benchmarking with OpenStack
KVM and docker LXC Benchmarking with OpenStack
 
OpenStack Framework Introduction
OpenStack Framework IntroductionOpenStack Framework Introduction
OpenStack Framework Introduction
 
OpenStack Architecture
OpenStack ArchitectureOpenStack Architecture
OpenStack Architecture
 
Deep Dive: OpenStack Summit (Red Hat Summit 2014)
Deep Dive: OpenStack Summit (Red Hat Summit 2014)Deep Dive: OpenStack Summit (Red Hat Summit 2014)
Deep Dive: OpenStack Summit (Red Hat Summit 2014)
 

Semelhante a Linux Kernel Input: mouse, teclado, joystick

Sistemas_operacionais_1. KNOBUIBHBBHBHBH
Sistemas_operacionais_1. KNOBUIBHBBHBHBHSistemas_operacionais_1. KNOBUIBHBBHBHBH
Sistemas_operacionais_1. KNOBUIBHBBHBHBHCesarBomgiovani
 
Introdução à plataforma Arduino
Introdução à plataforma ArduinoIntrodução à plataforma Arduino
Introdução à plataforma Arduinoentrebits
 
VDI e Projeto OSDVT
VDI e Projeto OSDVTVDI e Projeto OSDVT
VDI e Projeto OSDVTapsegundo
 
Interfaces fisicas para dispositivos moveis
Interfaces fisicas para dispositivos moveisInterfaces fisicas para dispositivos moveis
Interfaces fisicas para dispositivos moveisTiago Barros
 
Fundamentos de Sistemas Operacionais - Aula 2 - Conceitos Iniciais
Fundamentos de Sistemas Operacionais - Aula 2 - Conceitos IniciaisFundamentos de Sistemas Operacionais - Aula 2 - Conceitos Iniciais
Fundamentos de Sistemas Operacionais - Aula 2 - Conceitos IniciaisHelder Lopes
 
Apresentação pós tic
Apresentação   pós ticApresentação   pós tic
Apresentação pós ticThiago Melo
 
Hackeando um SmartBOX (com android) e instalando Linux & JAVA & OpenDevice
Hackeando um SmartBOX (com android) e instalando Linux & JAVA & OpenDeviceHackeando um SmartBOX (com android) e instalando Linux & JAVA & OpenDevice
Hackeando um SmartBOX (com android) e instalando Linux & JAVA & OpenDeviceRicardo Rufino
 
Introdução a linguagem Python: simples e produtiva
Introdução a linguagem Python: simples e produtivaIntrodução a linguagem Python: simples e produtiva
Introdução a linguagem Python: simples e produtivaÁlvaro Justen
 
OpenDevice IoT - 2016 (LowLevel)
OpenDevice IoT - 2016 (LowLevel)OpenDevice IoT - 2016 (LowLevel)
OpenDevice IoT - 2016 (LowLevel)Ricardo Rufino
 
Hadware software
Hadware softwareHadware software
Hadware softwarenadielle123
 
Rootkits em kernel space - Redshift, um rootkit para o kernel do FreeBSD
Rootkits em kernel space - Redshift, um rootkit para o kernel do FreeBSDRootkits em kernel space - Redshift, um rootkit para o kernel do FreeBSD
Rootkits em kernel space - Redshift, um rootkit para o kernel do FreeBSDNullbyte Security Conference
 
[iv festival games for change américa latina] oficina pt. 2
[iv festival games for change américa latina] oficina pt. 2[iv festival games for change américa latina] oficina pt. 2
[iv festival games for change américa latina] oficina pt. 2Victor Hugo Batista
 
Virtualização de Desktops
Virtualização de DesktopsVirtualização de Desktops
Virtualização de Desktopsapsegundo
 
Arduino e Python: Do It Yourself
Arduino e Python: Do It YourselfArduino e Python: Do It Yourself
Arduino e Python: Do It YourselfBruno Nascimento
 
Arduino + Python: produtividade ao extremo
Arduino + Python: produtividade ao extremoArduino + Python: produtividade ao extremo
Arduino + Python: produtividade ao extremoÁlvaro Justen
 

Semelhante a Linux Kernel Input: mouse, teclado, joystick (20)

Sistemas_operacionais_1. KNOBUIBHBBHBHBH
Sistemas_operacionais_1. KNOBUIBHBBHBHBHSistemas_operacionais_1. KNOBUIBHBBHBHBH
Sistemas_operacionais_1. KNOBUIBHBBHBHBH
 
Introdução à plataforma Arduino
Introdução à plataforma ArduinoIntrodução à plataforma Arduino
Introdução à plataforma Arduino
 
Minicurso GNU/Linux
Minicurso GNU/LinuxMinicurso GNU/Linux
Minicurso GNU/Linux
 
VDI e Projeto OSDVT
VDI e Projeto OSDVTVDI e Projeto OSDVT
VDI e Projeto OSDVT
 
Interfaces fisicas para dispositivos moveis
Interfaces fisicas para dispositivos moveisInterfaces fisicas para dispositivos moveis
Interfaces fisicas para dispositivos moveis
 
Fundamentos de Sistemas Operacionais - Aula 2 - Conceitos Iniciais
Fundamentos de Sistemas Operacionais - Aula 2 - Conceitos IniciaisFundamentos de Sistemas Operacionais - Aula 2 - Conceitos Iniciais
Fundamentos de Sistemas Operacionais - Aula 2 - Conceitos Iniciais
 
Apresentação pós tic
Apresentação   pós ticApresentação   pós tic
Apresentação pós tic
 
Hackeando um SmartBOX (com android) e instalando Linux & JAVA & OpenDevice
Hackeando um SmartBOX (com android) e instalando Linux & JAVA & OpenDeviceHackeando um SmartBOX (com android) e instalando Linux & JAVA & OpenDevice
Hackeando um SmartBOX (com android) e instalando Linux & JAVA & OpenDevice
 
SDAC MODULO 7
SDAC MODULO 7SDAC MODULO 7
SDAC MODULO 7
 
Engenharia reversa
Engenharia reversaEngenharia reversa
Engenharia reversa
 
Introdução a linguagem Python: simples e produtiva
Introdução a linguagem Python: simples e produtivaIntrodução a linguagem Python: simples e produtiva
Introdução a linguagem Python: simples e produtiva
 
OpenDevice IoT - 2016 (LowLevel)
OpenDevice IoT - 2016 (LowLevel)OpenDevice IoT - 2016 (LowLevel)
OpenDevice IoT - 2016 (LowLevel)
 
18. arduino
18. arduino18. arduino
18. arduino
 
Hadware software
Hadware softwareHadware software
Hadware software
 
Rootkits em kernel space - Redshift, um rootkit para o kernel do FreeBSD
Rootkits em kernel space - Redshift, um rootkit para o kernel do FreeBSDRootkits em kernel space - Redshift, um rootkit para o kernel do FreeBSD
Rootkits em kernel space - Redshift, um rootkit para o kernel do FreeBSD
 
IoT para Devs c#
IoT para Devs c#IoT para Devs c#
IoT para Devs c#
 
[iv festival games for change américa latina] oficina pt. 2
[iv festival games for change américa latina] oficina pt. 2[iv festival games for change américa latina] oficina pt. 2
[iv festival games for change américa latina] oficina pt. 2
 
Virtualização de Desktops
Virtualização de DesktopsVirtualização de Desktops
Virtualização de Desktops
 
Arduino e Python: Do It Yourself
Arduino e Python: Do It YourselfArduino e Python: Do It Yourself
Arduino e Python: Do It Yourself
 
Arduino + Python: produtividade ao extremo
Arduino + Python: produtividade ao extremoArduino + Python: produtividade ao extremo
Arduino + Python: produtividade ao extremo
 

Linux Kernel Input: mouse, teclado, joystick

  • 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 ● Conhecem o 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
  • 9. Input Camada base para toda interação de “entrada” do kernel: ● Mouse ● Teclado ● Force feedback ● LEDs dos input devices ● Tablets ● Touch screen
  • 10. Input Para mouse e teclado, 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 que conseguimos 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
  • 17. Obrigado! Contato: ● Email: marcos.souza.org@gmail ● Twitter: @omarcossouza ● Github: github.com/marcosps