SlideShare uma empresa Scribd logo
1 de 16
Baixar para ler offline
dxtec.inf.furb.brMarcos Paulo de Souza1
Do kernel ao user space:
Como funciona a captura de imagens de uma webcam
dxtec.inf.furb.brMarcos Paulo de Souza2
Quem sou eu
● Desenvolvedor Linux a 4 anos
● Contribuidor do Kernel Linux e LibreOffice
● Usuário Linux a mais de 6 anos
● Trabalho como Engenheiro de Software na ZPE Systems
dxtec.inf.furb.brMarcos Paulo de Souza3
Tópicos
● Introdução
● Kernel space vs user space
● Dispositivos de mídia no kernel
● Ferramentas
● sysfs
● v4l2-ctl
● Integração
● SDL
● video4linux2 (v4l2)
● ioctl
● Implementação
● Referências
dxtec.inf.furb.brMarcos Paulo de Souza4
kernel space vs user space
Fonte: http://rhelblog.redhat.com/2015/07/29/architecting-containers-part-1-user-space-vs-kernel-space/
dxtec.inf.furb.brMarcos Paulo de Souza5
kernel space vs user space
Demonstração com strace
dxtec.inf.furb.brMarcos Paulo de Souza6
Dispositivos de mídia no kernel
● Rádio FM
● DVB (Digital Video Broadcasting)
● Controle Remoto (IR)
● Câmeras
dxtec.inf.furb.brMarcos Paulo de Souza7
Ferramentas
●
sysfs
/sys/class/video4linux
●
v4l2-ctl
[marcos@xfiles v4l2_webcam]$ v4l2-ctl --list-devices
USB2.0 Camera (usb-0000:00:14.0-1):
/dev/video0
USB2.0 HD UVC WebCam (usb-0000:00:14.0-5):
/dev/video1
dxtec.inf.furb.brMarcos Paulo de Souza8
Integração
dxtec.inf.furb.brMarcos Paulo de Souza9
Integração
● video4linux2 (v4l2)
● Framework
● UAPI (User space API)
● Ferramentas
● ioctl
● syscall
● opera/configura arquivos especiais (device files)
● ao configurar, o driver responsável pelo dispositivo é
chamado e então altera as configurações no hardware
dxtec.inf.furb.brMarcos Paulo de Souza10
Integração
Fonte: http://menehune.opt.wfu.edu/Kokua/Irix_6.5.21_doc_cd/usr/share/Insight/library/SGI_bookshelves/SGI_Developer/books/DevDriver_PG/sgi_html/ch03.html
dxtec.inf.furb.brMarcos Paulo de Souza11
Integração
● Sequência de ações
● fd = open(/dev/videoX)
● ioctl(fd, QUERY_CAP)
● ioctl(fd, VIDIOC_ENUM_FMT)
● ioctl(fd, VIDIOC_S_FMT)
● ioctl(fd, VIDIOC_QBUF)
● ioctl(fd, VIDIOC_STREAMON)
● Loop
● ioctl(fd, VIDIOC_DQBUF)
● SDL
● ioctl(fd, VIDIOC_QBUF)
● ioctl(fd, VIDIOC_STREAMOFF)
● close(fd)
dxtec.inf.furb.brMarcos Paulo de Souza12
Implementação
Demonstração da implementação no kernel e userspace
drivers/media/usb/uvc/uvc_v4l2.c
v4l2_webcam/v4l_webcam.c
dxtec.inf.furb.brMarcos Paulo de Souza13
Implementação
● Exemplos de utilização de V4L2
GCW Radio: https://github.com/marcosps/gcw_radio
V4L2_webcam: https://github.com/marcosps/v4l2_webcam
GNOME Cheese: https://wiki.gnome.org/Apps/Cheese
dxtec.inf.furb.brMarcos Paulo de Souza14
Referências
Linux MediaAPI: https://linuxtv.org/downloads/v4l-dvb-apis/
SDL: https://www.libsdl.org/
ioctl: http://man7.org/linux/man-pages/man2/ioctl.2.html
v4l2_tools: https://www.linuxtv.org/wiki/index.php/V4l-utils
Linux Docs:https://www.kernel.org/doc/Documentation/media/
Desafio: eudyptula-challange.org
dxtec.inf.furb.brMarcos Paulo de Souza15
Dúvidas
dxtec.inf.furb.brMarcos Paulo de Souza16
Obrigado
Marcos Paulo de Souza
marcos.souza.org@gmail.com
@omarcossouza
github.com/marcosps/

Mais conteúdo relacionado

Mais procurados

Linux apresentação sem video
Linux apresentação sem videoLinux apresentação sem video
Linux apresentação sem videoRaoni Miranda
 
Curso de Linux Básico com o Linux Educacional
Curso de Linux Básico com o Linux EducacionalCurso de Linux Básico com o Linux Educacional
Curso de Linux Básico com o Linux EducacionalFelipe Queiroz
 
PaaS - OpenShift como plataforma pública
PaaS - OpenShift como plataforma públicaPaaS - OpenShift como plataforma pública
PaaS - OpenShift como plataforma públicaGetup Cloud
 
TDC2018SP | Trilha Containers - Linux Conteineres na unha
TDC2018SP | Trilha Containers - Linux Conteineres na unhaTDC2018SP | Trilha Containers - Linux Conteineres na unha
TDC2018SP | Trilha Containers - Linux Conteineres na unhatdc-globalcode
 
Linux, Software Livre e Open Source
Linux, Software Livre e Open SourceLinux, Software Livre e Open Source
Linux, Software Livre e Open SourceClaudio Penasio Jr.
 
TDC2018SP | Trilha Containers - Provisionando um cluster Kubernetes multi-mas...
TDC2018SP | Trilha Containers - Provisionando um cluster Kubernetes multi-mas...TDC2018SP | Trilha Containers - Provisionando um cluster Kubernetes multi-mas...
TDC2018SP | Trilha Containers - Provisionando um cluster Kubernetes multi-mas...tdc-globalcode
 
Como ajudar no desenvolvimento do kernel Linux? - Fábio Olivé Leite
Como ajudar no desenvolvimento do kernel Linux? - Fábio Olivé LeiteComo ajudar no desenvolvimento do kernel Linux? - Fábio Olivé Leite
Como ajudar no desenvolvimento do kernel Linux? - Fábio Olivé LeiteTchelinux
 

Mais procurados (14)

Conhecendo Melhor O Linux
Conhecendo Melhor O LinuxConhecendo Melhor O Linux
Conhecendo Melhor O Linux
 
Linux apresentação sem video
Linux apresentação sem videoLinux apresentação sem video
Linux apresentação sem video
 
Linux
LinuxLinux
Linux
 
Linux básico
Linux básicoLinux básico
Linux básico
 
Curso de Linux Básico com o Linux Educacional
Curso de Linux Básico com o Linux EducacionalCurso de Linux Básico com o Linux Educacional
Curso de Linux Básico com o Linux Educacional
 
PaaS - OpenShift como plataforma pública
PaaS - OpenShift como plataforma públicaPaaS - OpenShift como plataforma pública
PaaS - OpenShift como plataforma pública
 
TDC2018SP | Trilha Containers - Linux Conteineres na unha
TDC2018SP | Trilha Containers - Linux Conteineres na unhaTDC2018SP | Trilha Containers - Linux Conteineres na unha
TDC2018SP | Trilha Containers - Linux Conteineres na unha
 
Linux Educacional 4.0
Linux Educacional 4.0Linux Educacional 4.0
Linux Educacional 4.0
 
Caixa magica, linux
Caixa magica, linuxCaixa magica, linux
Caixa magica, linux
 
Linux, Software Livre e Open Source
Linux, Software Livre e Open SourceLinux, Software Livre e Open Source
Linux, Software Livre e Open Source
 
Meetup-Churrops
Meetup-ChurropsMeetup-Churrops
Meetup-Churrops
 
Intercato
IntercatoIntercato
Intercato
 
TDC2018SP | Trilha Containers - Provisionando um cluster Kubernetes multi-mas...
TDC2018SP | Trilha Containers - Provisionando um cluster Kubernetes multi-mas...TDC2018SP | Trilha Containers - Provisionando um cluster Kubernetes multi-mas...
TDC2018SP | Trilha Containers - Provisionando um cluster Kubernetes multi-mas...
 
Como ajudar no desenvolvimento do kernel Linux? - Fábio Olivé Leite
Como ajudar no desenvolvimento do kernel Linux? - Fábio Olivé LeiteComo ajudar no desenvolvimento do kernel Linux? - Fábio Olivé Leite
Como ajudar no desenvolvimento do kernel Linux? - Fábio Olivé Leite
 

Semelhante a Do kernel ao user space: Como funciona a captura de imagens de uma webcam

Simplificando a montagem de ambientes de Dev+Testes com Docker | DEVDAY 2020
Simplificando a montagem de ambientes de Dev+Testes com Docker | DEVDAY 2020Simplificando a montagem de ambientes de Dev+Testes com Docker | DEVDAY 2020
Simplificando a montagem de ambientes de Dev+Testes com Docker | DEVDAY 2020Renato Groff
 
Docker: visão geral e primeiros passos | Fatec Praia Grande - Semana Tecnológ...
Docker: visão geral e primeiros passos | Fatec Praia Grande - Semana Tecnológ...Docker: visão geral e primeiros passos | Fatec Praia Grande - Semana Tecnológ...
Docker: visão geral e primeiros passos | Fatec Praia Grande - Semana Tecnológ...Renato Groff
 
Como Colaborar no Desenvolvimento do Kernel Linux - Fábio Olivé Leite
Como Colaborar no Desenvolvimento do Kernel Linux - Fábio Olivé LeiteComo Colaborar no Desenvolvimento do Kernel Linux - Fábio Olivé Leite
Como Colaborar no Desenvolvimento do Kernel Linux - Fábio Olivé LeiteTchelinux
 
Linux Desktop (Campus Party Recife)
Linux Desktop (Campus Party Recife)Linux Desktop (Campus Party Recife)
Linux Desktop (Campus Party Recife)Adriano Melo
 
Webinar: Desvendando o Yocto Project
Webinar: Desvendando o Yocto ProjectWebinar: Desvendando o Yocto Project
Webinar: Desvendando o Yocto ProjectEmbarcados
 
Webinar: Utilizando o Yocto Project para automatizar o desenvolvimento em Lin...
Webinar: Utilizando o Yocto Project para automatizar o desenvolvimento em Lin...Webinar: Utilizando o Yocto Project para automatizar o desenvolvimento em Lin...
Webinar: Utilizando o Yocto Project para automatizar o desenvolvimento em Lin...Embarcados
 
Docker: primeiros passos - Semana FCI - Mackenzie - Outubro-2019
Docker: primeiros passos - Semana FCI - Mackenzie - Outubro-2019Docker: primeiros passos - Semana FCI - Mackenzie - Outubro-2019
Docker: primeiros passos - Semana FCI - Mackenzie - Outubro-2019Renato Groff
 
Docker: Conceitos e Primeiros Passos na utilização de Containers - Programand...
Docker: Conceitos e Primeiros Passos na utilização de Containers - Programand...Docker: Conceitos e Primeiros Passos na utilização de Containers - Programand...
Docker: Conceitos e Primeiros Passos na utilização de Containers - Programand...Renato Groff
 
Criando aplicativos multimídia com director 7 tambein engloba versoes 5, 6...
Criando aplicativos multimídia com director  7   tambein engloba versoes 5, 6...Criando aplicativos multimídia com director  7   tambein engloba versoes 5, 6...
Criando aplicativos multimídia com director 7 tambein engloba versoes 5, 6...Nilson Oliveira
 
Docker para Ambientes de Desenvolvimento e Testes - Open Source Roadshow 2019...
Docker para Ambientes de Desenvolvimento e Testes - Open Source Roadshow 2019...Docker para Ambientes de Desenvolvimento e Testes - Open Source Roadshow 2019...
Docker para Ambientes de Desenvolvimento e Testes - Open Source Roadshow 2019...Renato Groff
 
Novidades no OpenBSD 4.3 - Leonardo Menezes Vaz
Novidades no OpenBSD 4.3 - Leonardo Menezes VazNovidades no OpenBSD 4.3 - Leonardo Menezes Vaz
Novidades no OpenBSD 4.3 - Leonardo Menezes VazTchelinux
 
TDC2018SP | Trilha Containers - CRI-O: Nem so de Docker vivem os containers
TDC2018SP | Trilha Containers - CRI-O: Nem so de Docker vivem os containersTDC2018SP | Trilha Containers - CRI-O: Nem so de Docker vivem os containers
TDC2018SP | Trilha Containers - CRI-O: Nem so de Docker vivem os containerstdc-globalcode
 
Troubleshooting docker
Troubleshooting dockerTroubleshooting docker
Troubleshooting dockerRafael Gomes
 
ITerior - .NET Core, usando .NET no Linux!
ITerior - .NET Core, usando .NET no Linux!ITerior - .NET Core, usando .NET no Linux!
ITerior - .NET Core, usando .NET no Linux!Vinicius Mussak
 
Introdução aos Sistemas Operativos
Introdução aos Sistemas OperativosIntrodução aos Sistemas Operativos
Introdução aos Sistemas OperativosJorge Louro
 
Linux e o modelo open source
Linux e o modelo open sourceLinux e o modelo open source
Linux e o modelo open sourceFrederico Madeira
 

Semelhante a Do kernel ao user space: Como funciona a captura de imagens de uma webcam (20)

Simplificando a montagem de ambientes de Dev+Testes com Docker | DEVDAY 2020
Simplificando a montagem de ambientes de Dev+Testes com Docker | DEVDAY 2020Simplificando a montagem de ambientes de Dev+Testes com Docker | DEVDAY 2020
Simplificando a montagem de ambientes de Dev+Testes com Docker | DEVDAY 2020
 
Docker: visão geral e primeiros passos | Fatec Praia Grande - Semana Tecnológ...
Docker: visão geral e primeiros passos | Fatec Praia Grande - Semana Tecnológ...Docker: visão geral e primeiros passos | Fatec Praia Grande - Semana Tecnológ...
Docker: visão geral e primeiros passos | Fatec Praia Grande - Semana Tecnológ...
 
Como Colaborar no Desenvolvimento do Kernel Linux - Fábio Olivé Leite
Como Colaborar no Desenvolvimento do Kernel Linux - Fábio Olivé LeiteComo Colaborar no Desenvolvimento do Kernel Linux - Fábio Olivé Leite
Como Colaborar no Desenvolvimento do Kernel Linux - Fábio Olivé Leite
 
Bt4 H2HC6th
Bt4 H2HC6thBt4 H2HC6th
Bt4 H2HC6th
 
Linux Desktop (Campus Party Recife)
Linux Desktop (Campus Party Recife)Linux Desktop (Campus Party Recife)
Linux Desktop (Campus Party Recife)
 
Webinar: Desvendando o Yocto Project
Webinar: Desvendando o Yocto ProjectWebinar: Desvendando o Yocto Project
Webinar: Desvendando o Yocto Project
 
Webinar: Utilizando o Yocto Project para automatizar o desenvolvimento em Lin...
Webinar: Utilizando o Yocto Project para automatizar o desenvolvimento em Lin...Webinar: Utilizando o Yocto Project para automatizar o desenvolvimento em Lin...
Webinar: Utilizando o Yocto Project para automatizar o desenvolvimento em Lin...
 
Docker: primeiros passos - Semana FCI - Mackenzie - Outubro-2019
Docker: primeiros passos - Semana FCI - Mackenzie - Outubro-2019Docker: primeiros passos - Semana FCI - Mackenzie - Outubro-2019
Docker: primeiros passos - Semana FCI - Mackenzie - Outubro-2019
 
Docker: Conceitos e Primeiros Passos na utilização de Containers - Programand...
Docker: Conceitos e Primeiros Passos na utilização de Containers - Programand...Docker: Conceitos e Primeiros Passos na utilização de Containers - Programand...
Docker: Conceitos e Primeiros Passos na utilização de Containers - Programand...
 
Criando aplicativos multimídia com director 7 tambein engloba versoes 5, 6...
Criando aplicativos multimídia com director  7   tambein engloba versoes 5, 6...Criando aplicativos multimídia com director  7   tambein engloba versoes 5, 6...
Criando aplicativos multimídia com director 7 tambein engloba versoes 5, 6...
 
Docker para Ambientes de Desenvolvimento e Testes - Open Source Roadshow 2019...
Docker para Ambientes de Desenvolvimento e Testes - Open Source Roadshow 2019...Docker para Ambientes de Desenvolvimento e Testes - Open Source Roadshow 2019...
Docker para Ambientes de Desenvolvimento e Testes - Open Source Roadshow 2019...
 
Novidades no OpenBSD 4.3 - Leonardo Menezes Vaz
Novidades no OpenBSD 4.3 - Leonardo Menezes VazNovidades no OpenBSD 4.3 - Leonardo Menezes Vaz
Novidades no OpenBSD 4.3 - Leonardo Menezes Vaz
 
Minicurso GNU/Linux
Minicurso GNU/LinuxMinicurso GNU/Linux
Minicurso GNU/Linux
 
TDC2018SP | Trilha Containers - CRI-O: Nem so de Docker vivem os containers
TDC2018SP | Trilha Containers - CRI-O: Nem so de Docker vivem os containersTDC2018SP | Trilha Containers - CRI-O: Nem so de Docker vivem os containers
TDC2018SP | Trilha Containers - CRI-O: Nem so de Docker vivem os containers
 
Troubleshooting docker
Troubleshooting dockerTroubleshooting docker
Troubleshooting docker
 
Java no linux
Java no linuxJava no linux
Java no linux
 
ITerior - .NET Core, usando .NET no Linux!
ITerior - .NET Core, usando .NET no Linux!ITerior - .NET Core, usando .NET no Linux!
ITerior - .NET Core, usando .NET no Linux!
 
Introdução aos Sistemas Operativos
Introdução aos Sistemas OperativosIntrodução aos Sistemas Operativos
Introdução aos Sistemas Operativos
 
.NET Core e Asp.net Core
.NET Core e Asp.net Core.NET Core e Asp.net Core
.NET Core e Asp.net Core
 
Linux e o modelo open source
Linux e o modelo open sourceLinux e o modelo open source
Linux e o modelo open source
 

Do kernel ao user space: Como funciona a captura de imagens de uma webcam

  • 1. dxtec.inf.furb.brMarcos Paulo de Souza1 Do kernel ao user space: Como funciona a captura de imagens de uma webcam
  • 2. dxtec.inf.furb.brMarcos Paulo de Souza2 Quem sou eu ● Desenvolvedor Linux a 4 anos ● Contribuidor do Kernel Linux e LibreOffice ● Usuário Linux a mais de 6 anos ● Trabalho como Engenheiro de Software na ZPE Systems
  • 3. dxtec.inf.furb.brMarcos Paulo de Souza3 Tópicos ● Introdução ● Kernel space vs user space ● Dispositivos de mídia no kernel ● Ferramentas ● sysfs ● v4l2-ctl ● Integração ● SDL ● video4linux2 (v4l2) ● ioctl ● Implementação ● Referências
  • 4. dxtec.inf.furb.brMarcos Paulo de Souza4 kernel space vs user space Fonte: http://rhelblog.redhat.com/2015/07/29/architecting-containers-part-1-user-space-vs-kernel-space/
  • 5. dxtec.inf.furb.brMarcos Paulo de Souza5 kernel space vs user space Demonstração com strace
  • 6. dxtec.inf.furb.brMarcos Paulo de Souza6 Dispositivos de mídia no kernel ● Rádio FM ● DVB (Digital Video Broadcasting) ● Controle Remoto (IR) ● Câmeras
  • 7. dxtec.inf.furb.brMarcos Paulo de Souza7 Ferramentas ● sysfs /sys/class/video4linux ● v4l2-ctl [marcos@xfiles v4l2_webcam]$ v4l2-ctl --list-devices USB2.0 Camera (usb-0000:00:14.0-1): /dev/video0 USB2.0 HD UVC WebCam (usb-0000:00:14.0-5): /dev/video1
  • 8. dxtec.inf.furb.brMarcos Paulo de Souza8 Integração
  • 9. dxtec.inf.furb.brMarcos Paulo de Souza9 Integração ● video4linux2 (v4l2) ● Framework ● UAPI (User space API) ● Ferramentas ● ioctl ● syscall ● opera/configura arquivos especiais (device files) ● ao configurar, o driver responsável pelo dispositivo é chamado e então altera as configurações no hardware
  • 10. dxtec.inf.furb.brMarcos Paulo de Souza10 Integração Fonte: http://menehune.opt.wfu.edu/Kokua/Irix_6.5.21_doc_cd/usr/share/Insight/library/SGI_bookshelves/SGI_Developer/books/DevDriver_PG/sgi_html/ch03.html
  • 11. dxtec.inf.furb.brMarcos Paulo de Souza11 Integração ● Sequência de ações ● fd = open(/dev/videoX) ● ioctl(fd, QUERY_CAP) ● ioctl(fd, VIDIOC_ENUM_FMT) ● ioctl(fd, VIDIOC_S_FMT) ● ioctl(fd, VIDIOC_QBUF) ● ioctl(fd, VIDIOC_STREAMON) ● Loop ● ioctl(fd, VIDIOC_DQBUF) ● SDL ● ioctl(fd, VIDIOC_QBUF) ● ioctl(fd, VIDIOC_STREAMOFF) ● close(fd)
  • 12. dxtec.inf.furb.brMarcos Paulo de Souza12 Implementação Demonstração da implementação no kernel e userspace drivers/media/usb/uvc/uvc_v4l2.c v4l2_webcam/v4l_webcam.c
  • 13. dxtec.inf.furb.brMarcos Paulo de Souza13 Implementação ● Exemplos de utilização de V4L2 GCW Radio: https://github.com/marcosps/gcw_radio V4L2_webcam: https://github.com/marcosps/v4l2_webcam GNOME Cheese: https://wiki.gnome.org/Apps/Cheese
  • 14. dxtec.inf.furb.brMarcos Paulo de Souza14 Referências Linux MediaAPI: https://linuxtv.org/downloads/v4l-dvb-apis/ SDL: https://www.libsdl.org/ ioctl: http://man7.org/linux/man-pages/man2/ioctl.2.html v4l2_tools: https://www.linuxtv.org/wiki/index.php/V4l-utils Linux Docs:https://www.kernel.org/doc/Documentation/media/ Desafio: eudyptula-challange.org
  • 16. dxtec.inf.furb.brMarcos Paulo de Souza16 Obrigado Marcos Paulo de Souza marcos.souza.org@gmail.com @omarcossouza github.com/marcosps/