Linux Embarcado
IoT Hackday - Telefônica
O que é Linux Embarcado?
Diego Sueiro
diego.sueiro@embarcados.com.br
@diegosueiro
br.linkedin.com...
SOBRE ESTE DOCUMENTO
● Esta apresentação é baseada na Wikipedia, no
material de Treinamento da Embedded Labworks (
e-labwo...
SOBRE O PALESTRANTE
● Formado em 2006 em Eng. de Controle e
Automação pela UNIFEI.
● É proprietário da ESD Tecnologia, ond...
Introdução à Linux embarcado
OS 3 MARCOS
● 1970: Engenheiros da Bell Labs, liderados por
Ken Thompson e Dennis Ritchie, criam o sistema
operacional UNI...
Em 1991...
”I'm doing a (free) operating
system (just a hobby, won't be big
and professional like gnu) for
386(486) AT clo...
20 ANOS DEPOIS
VÍDEOS
✗ Os 20 anos do Linux : linuxfoundation.org/20th
vimeo.com/22030635
✗ How Linux is Built:
vimeo.com/39711916
O KERNEL
● Linux é o kernel!
http://www.kernel.org
● As distribuições Linux (Ubuntu, Fedora, Debian,
Slackware, etc) integ...
PRINCIPAIS CARACTERÍSTICAS
● Distribuições GNU/Linux seguem o LSB (Linux
Standard Base) que é baseado na especificação
POS...
PRINCIPAIS CARACTERÍSTICAS (cont.)
● Qualidade: Milhares de pessoas olhando e
testando o código.
● Estabilidade: capaz de ...
PRINCIPAIS CARACTERÍSTICAS (cont.)
● Suporte da Comunidade.
● Recursos ”infinitos” disponíveis na internet.
MITOS
● Mito 1: ”Linux is Free”.
– Linux não é grátis, Linux é livre! Do 2o.
parágrafo da GPL: ”When we speak of free
soft...
Arquitetura básica
ARQUITETURA BÁSICA
Hardware
Bootloader
Linux kernel
Biblioteca C
Biblioteca Biblioteca
Biblioteca Biblioteca
Toolchain
COMPONENTES DO SISTEMA
● Hardware: seu produto!
● Bootloader: iniciado pelo hardware, responsável pela
inicialização básic...
HARDWARE
Hardware
Bootloader
Linux kernel
Biblioteca C
Biblioteca Biblioteca
Biblioteca Biblioteca
Toolchain
HARDWARE
CPU
● Suporta mais de 25 arquiteturas diferentes (x86, ia64, ARM,
PPC, MIPS, SuperH, Blackfin, Coldfire, etc).
● 32/64 bit...
MEMÓRIA RAM
● Um sistema bem básico pode
funcionar com até 8MB de RAM.
DISPOSITIVOS DE ARMAZENAMENTO
● Suporta armazenamento em memória
flash NAND ou NOR.
● Suporta dispositivos de
armazenament...
COMUNICAÇÃO
● O Linux suporta muitos barramentos comuns em
sistemas embarcados: I2C, SPI, CAN, 1-wire, SDIO,
USB, etc.
● E...
CRITÉRIOS PARA SELEÇÃO
● Certifique-se de que o hardware já é
suportado pelo Linux e por um
bootloader open-source.
● Supo...
TOOLCHAIN
Hardware
Bootloader
Linux kernel
Biblioteca C
Biblioteca Biblioteca
Biblioteca Biblioteca
Toolchain
TOOLCHAIN
● Conjunto de ferramentas de programação
usadas para gerar determinado produto,
seja um software ou mesmo um sis...
TOOLCHAIN (cont.)
Binário x86
x86
Binário ARM
ARM
Código-fonte
x86
Toolchain nativo Cross-compiling toolchain
Host
Target
COMPONENTES DO TOOLCHAIN
● Compilador (gcc).
● Assembler e Linker (binutils).
● Standard C Library (glibc, uclibc,
dietlib...
TOOLCHAINS PRONTOS
● GCC (GNU Compiler Collection):
Suporte a 39 arquiteturas (de 8 a 64bits)
http://gcc.gnu.org/
● Code S...
SISTEMA LINUX EMBARCADO
Hardware
Bootloader
Linux kernel
Biblioteca C
Biblioteca Biblioteca
Biblioteca Biblioteca
Toolchain
SISTEMA LINUX EMBARCADO (NA FLASH)
Bootloader
Kernel
Rootfs
Memória flash
BOOTLOADER
Hardware
Bootloader
Linux kernel
Biblioteca C
Biblioteca Biblioteca
Biblioteca Biblioteca
Toolchain
BOOTLOADER
● Todo hardware possui um mecanismo
de inicialização, que é responsável
por carregar e executar o bootloader.
●...
FUNCIONALIDADES DO BOOTLOADER
● Inicializar o hardware antes de executar o
kernel, como por exemplo configurar a
controlad...
PRINCIPAIS BOOTLOADERS
● x86:
– LILO
– Grub
● ARM, MIPS, PPC e outras arquiteturas:
– U-Boot
– Barebox
– Redboot
KERNEL
Hardware
Bootloader
Linux kernel
Biblioteca C
Biblioteca Biblioteca
Biblioteca Biblioteca
Toolchain
INICIALIZAÇÃO BÁSICA
● Inicializa CPU, memória e barramentos.
● Configura a memória virtual (se tiver MMU).
● Inicializa o...
CARACTERÍSTICAS DO KERNEL
● Gerencia execução de processos e controla
acesso à memória e I/O.
● Conceito de kernel space x...
EXEMPLO DE SYSTEM CALL
ROOTFS
Hardware
Bootloader
Linux kernel
Biblioteca C
Biblioteca Biblioteca
Biblioteca Biblioteca
Toolchain
COMPONENTES BÁSICOS
● Biblioteca do sistema (uClibc, glibc,
eglibc, dietlibc, etc).
● Mecanismo de inicialização.
● Biblio...
APLICAÇÕES PARA EMBARCADOS
● Dropbear: cliente e servidor SSH
(~110K).
● Thttpd: servidor web (~88K).
● DirectFB: bibliote...
BUSYBOX
● O canivete suíço de sistemas
embarcados com Linux!
● Combina versões mais leves de
ferramentas UNIX em um único ...
SISTEMA LINUX
“Desenvolver um sistema Linux
embarcado
é como brincar de Lego!”
BUILD SYSTEM
● Um build system é capaz de:
– Gerar o toolchain.
– Compilar e gerar a imagem do bootloader.
– Configurar, c...
ALGUNS BUILD SYSTEMS
● Proprietários:
– Monta Vista.
– Wind River.
– TimeSys.
● Open source:
– Buildroot.
– OpenEmbedded /...
PLACAS DE DESENVOLVIMENTO
Raspberry Pi (USD 25/35):
http://www.raspberrypi.org/
– CPU - ARM11 700 Mhz – Broadcom BCM2835
–...
PLACAS DE DESENVOLVIMENTO
BeagleBone Black (USD 55):
http://beagleboard.org/
– CPU – ARM Cortex-A8 1 Ghz – Texas Instrumen...
OS 3 PAPÉIS DO DESENVOLVEDOR
● Desenvolvedor de aplicações: desenvolve
aplicações Linux.
● Desenvolvedor de BSP (Board Sup...
COMO SE TORNAR UM DESENVOLVEDOR
● Inglês
● Hardware: Análise de Esquemáticos e Data Sheets
● Usuário Avançado de linha de ...
Perguntas e Respostas
?
OBRIGADO PELA PRESENÇA
diego.sueiro@embarcados.com.br
www.embarcados.com.br
www.esdtec.net
Google Grupos sis_embarcados
Upcoming SlideShare
Loading in …5
×

1º IoT Day - O que é Linux Embarcado

353 views

Published on

Apresentação "O que é Linux Embarcado" realizada no 1º IoT Day.

Published in: Engineering
0 Comments
2 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
353
On SlideShare
0
From Embeds
0
Number of Embeds
3
Actions
Shares
0
Downloads
9
Comments
0
Likes
2
Embeds 0
No embeds

No notes for slide

1º IoT Day - O que é Linux Embarcado

  1. 1. Linux Embarcado
  2. 2. IoT Hackday - Telefônica O que é Linux Embarcado? Diego Sueiro diego.sueiro@embarcados.com.br @diegosueiro br.linkedin.com/in/diegosueiro Administrador do Embarcados Proprietário da ESD Tecnologia
  3. 3. SOBRE ESTE DOCUMENTO ● Esta apresentação é baseada na Wikipedia, no material de Treinamento da Embedded Labworks ( e-labworks.com/treinamentos/linux/source) e no material de treinamento disponibilizado pela Free Electrons: http://free-electrons.com/doc/training/embedded-li nux ● Este documento é disponibilizado sob a Licença Creative Commons BY-SA 3.0. http://creativecommons.org/licenses/by-sa/3.0/legalco de
  4. 4. SOBRE O PALESTRANTE ● Formado em 2006 em Eng. de Controle e Automação pela UNIFEI. ● É proprietário da ESD Tecnologia, onde atua com consultoria, desenvolvimento de software para sistemas embarcados: http://esdtec.net ● Administrador do Embarcados.com.br
  5. 5. Introdução à Linux embarcado
  6. 6. OS 3 MARCOS ● 1970: Engenheiros da Bell Labs, liderados por Ken Thompson e Dennis Ritchie, criam o sistema operacional UNIX. ● 1983: Richard Stallman, projeto GNU e o conceito de software livre. Começa o desenvolvimento do gcc, gdb, glibc e outras ferramentas importantes. ● 1991: Linus Torvalds, projeto do kernel Linux, um sistema operacional UNIX-like. Em conjunto com o projeto GNU, nasce o sistema operacional GNU/Linux.
  7. 7. Em 1991... ”I'm doing a (free) operating system (just a hobby, won't be big and professional like gnu) for 386(486) AT clones. This has been brewing since april, and is starting to get ready. I'd like any feedback on things people like/dislike in minix, as my OS resembles it somewhat (same physical layout of the file-system (due to practical reasons) among other things.”
  8. 8. 20 ANOS DEPOIS
  9. 9. VÍDEOS ✗ Os 20 anos do Linux : linuxfoundation.org/20th vimeo.com/22030635 ✗ How Linux is Built: vimeo.com/39711916
  10. 10. O KERNEL ● Linux é o kernel! http://www.kernel.org ● As distribuições Linux (Ubuntu, Fedora, Debian, Slackware, etc) integram o kernel Linux, bibliotecas e aplicações. ● O correto é chamar estas distribuições de sistemas operacionais GNU/Linux. ● Linux embarcado é o uso do kernel Linux e de diversos componentes open-source em sistemas embarcados.
  11. 11. PRINCIPAIS CARACTERÍSTICAS ● Distribuições GNU/Linux seguem o LSB (Linux Standard Base) que é baseado na especificação POSIX (Portable Operating System Interface) do IEEE. ● Portabilidade para mais de 20 arquiteturas! ● Escalabilidade: o mesmo kernel roda em relógios, em celulares e em servidores da bolsa de valores! ● Livre de royalties. ● Roda em dispositivos com pouquíssimos recursos.
  12. 12. PRINCIPAIS CARACTERÍSTICAS (cont.) ● Qualidade: Milhares de pessoas olhando e testando o código. ● Estabilidade: capaz de rodar por muito tempo sem precisar de um único reboot. ● Modularidade: capaz de rodar apenas o que é necessário para seu projeto. ● Multicore: suporta múltiplas CPU. ● Reuso de Componentes. ● Controle total sobre o código-fonte do teu produto.
  13. 13. PRINCIPAIS CARACTERÍSTICAS (cont.) ● Suporte da Comunidade. ● Recursos ”infinitos” disponíveis na internet.
  14. 14. MITOS ● Mito 1: ”Linux is Free”. – Linux não é grátis, Linux é livre! Do 2o. parágrafo da GPL: ”When we speak of free software, we are refering to freedom, not price”. ● Mito 2: ”Não consigo proteger a propriedade intelectual do meu produto”. – Consegue sim, basta tomar alguns cuidados com licenças de software!
  15. 15. Arquitetura básica
  16. 16. ARQUITETURA BÁSICA Hardware Bootloader Linux kernel Biblioteca C Biblioteca Biblioteca Biblioteca Biblioteca Toolchain
  17. 17. COMPONENTES DO SISTEMA ● Hardware: seu produto! ● Bootloader: iniciado pelo hardware, responsável pela inicialização básica, carregamento e execução do kernel Linux. ● Kernel Linux: Núcleo do sistema operacional. Gerencia CPU, memória e I/O, exportando serviços para as aplicações do usuário. ● Rootfs: sistema de arquivos principal. – Biblioteca C: interface entre o kernel e as aplicações do usuário. – Bibliotecas e aplicações do usuário. ● Toolchain: conjunto de ferramentas para gerar os binários do sistema.
  18. 18. HARDWARE Hardware Bootloader Linux kernel Biblioteca C Biblioteca Biblioteca Biblioteca Biblioteca Toolchain
  19. 19. HARDWARE
  20. 20. CPU ● Suporta mais de 25 arquiteturas diferentes (x86, ia64, ARM, PPC, MIPS, SuperH, Blackfin, Coldfire, etc). ● 32/64 bits: não foi feito para microcontroladores! ● Originalmente projetado para CPUs com MMU (Memory Management Unit). ● O projeto uClinux foi criado para que o Linux pudesse ser usado em CPUs sem MMU. http://www.uclinux.org/ ● Mas boa parte do uClinux já foi integrado à árvore oficial do kernel, possibilitando o uso do Linux em diversas CPUs sem MMU (m68k e arm sem MMU, H8/300 da Hitachi, ADI Blackfin, etc).
  21. 21. MEMÓRIA RAM ● Um sistema bem básico pode funcionar com até 8MB de RAM.
  22. 22. DISPOSITIVOS DE ARMAZENAMENTO ● Suporta armazenamento em memória flash NAND ou NOR. ● Suporta dispositivos de armazenamento em bloco, incluindo discos e cartões SD/MMC. ● Um sistema bem básico pode funcionar com 2M de armazenamento (ou até menos!).
  23. 23. COMUNICAÇÃO ● O Linux suporta muitos barramentos comuns em sistemas embarcados: I2C, SPI, CAN, 1-wire, SDIO, USB, etc. ● E também os principais protocolos de rede: Ethernet, Wi-Fi, Bluetooth, CAN, IPv4, IPv6, TCP, UDP, etc. ● Se o barramento ou protocolo não possuir restrições de licença, é bem provável que esteja implementado no kernel. ● Já protocolos ou barramentos com restrições de licença tem dificuldade para entrar na árvore oficial do kernel (Ex: Zigbee).
  24. 24. CRITÉRIOS PARA SELEÇÃO ● Certifique-se de que o hardware já é suportado pelo Linux e por um bootloader open-source. ● Suporte nas versões oficiais dos projetos (kernel e bootloader) é bem melhor: maior qualidade e novas versões disponíveis.
  25. 25. TOOLCHAIN Hardware Bootloader Linux kernel Biblioteca C Biblioteca Biblioteca Biblioteca Biblioteca Toolchain
  26. 26. TOOLCHAIN ● Conjunto de ferramentas de programação usadas para gerar determinado produto, seja um software ou mesmo um sistema completo. ● Quando a plataforma de desenvolvimento (host) é diferente da plataforma alvo (target), chamamos o toolchain de cross- compiling toolchain.
  27. 27. TOOLCHAIN (cont.) Binário x86 x86 Binário ARM ARM Código-fonte x86 Toolchain nativo Cross-compiling toolchain Host Target
  28. 28. COMPONENTES DO TOOLCHAIN ● Compilador (gcc). ● Assembler e Linker (binutils). ● Standard C Library (glibc, uclibc, dietlibc, etc).
  29. 29. TOOLCHAINS PRONTOS ● GCC (GNU Compiler Collection): Suporte a 39 arquiteturas (de 8 a 64bits) http://gcc.gnu.org/ ● Code Sourcery (ARM): http://www.codesourcery.com/gnu_toolchains /arm/ ● MIPS: http://www.linux-mips.org/wiki/Toolchains ● Linaro (ARM): https://wiki.linaro.org/WorkingGroups/ToolCha in
  30. 30. SISTEMA LINUX EMBARCADO Hardware Bootloader Linux kernel Biblioteca C Biblioteca Biblioteca Biblioteca Biblioteca Toolchain
  31. 31. SISTEMA LINUX EMBARCADO (NA FLASH) Bootloader Kernel Rootfs Memória flash
  32. 32. BOOTLOADER Hardware Bootloader Linux kernel Biblioteca C Biblioteca Biblioteca Biblioteca Biblioteca Toolchain
  33. 33. BOOTLOADER ● Todo hardware possui um mecanismo de inicialização, que é responsável por carregar e executar o bootloader. ● O bootloader é responsável por carregar e executar o kernel do sistema operacional (no nosso caso, o Linux).
  34. 34. FUNCIONALIDADES DO BOOTLOADER ● Inicializar o hardware antes de executar o kernel, como por exemplo configurar a controladora de SDRAM. ● Passar parâmetros para o kernel. ● Prover mecanismos para carregar e gravar o kernel e o sistema de arquivos na memória flash ou cartão SD. ● Inicializar via rede ou pelo cartão SD. ● Rotinas de diagnóstico de hardware.
  35. 35. PRINCIPAIS BOOTLOADERS ● x86: – LILO – Grub ● ARM, MIPS, PPC e outras arquiteturas: – U-Boot – Barebox – Redboot
  36. 36. KERNEL Hardware Bootloader Linux kernel Biblioteca C Biblioteca Biblioteca Biblioteca Biblioteca Toolchain
  37. 37. INICIALIZAÇÃO BÁSICA ● Inicializa CPU, memória e barramentos. ● Configura a memória virtual (se tiver MMU). ● Inicializa os device drivers. ● Inicia o escalonador de tarefas. ● Inicia threads do kernel. ● Monta sistema de arquivos principal (rootfs) e chama o processo init.
  38. 38. CARACTERÍSTICAS DO KERNEL ● Gerencia execução de processos e controla acesso à memória e I/O. ● Conceito de kernel space x user space. ● Interface de user space com kernel space via chamadas do sistema (system calls). ● Acesso ao hardware via arquivos de dispositivo. ● Gerenciamento dinâmico dos módulos do kernel.
  39. 39. EXEMPLO DE SYSTEM CALL
  40. 40. ROOTFS Hardware Bootloader Linux kernel Biblioteca C Biblioteca Biblioteca Biblioteca Biblioteca Toolchain
  41. 41. COMPONENTES BÁSICOS ● Biblioteca do sistema (uClibc, glibc, eglibc, dietlibc, etc). ● Mecanismo de inicialização. ● Bibliotecas e aplicações.
  42. 42. APLICAÇÕES PARA EMBARCADOS ● Dropbear: cliente e servidor SSH (~110K). ● Thttpd: servidor web (~88K). ● DirectFB: biblioteca gráfica (~1,4MB). ● SQLite: Banco de dados (~250KB).
  43. 43. BUSYBOX ● O canivete suíço de sistemas embarcados com Linux! ● Combina versões mais leves de ferramentas UNIX em um único binário, otimizado por tamanho. ● Geralmente as ferramentas são mais limitadas em termos de funcionalidades comparadas às originais.
  44. 44. SISTEMA LINUX “Desenvolver um sistema Linux embarcado é como brincar de Lego!”
  45. 45. BUILD SYSTEM ● Um build system é capaz de: – Gerar o toolchain. – Compilar e gerar a imagem do bootloader. – Configurar, compilar e gerar a imagem do kernel. – Configurar, compilar bibliotecas e aplicações, e gerar a imagem final do rootfs.
  46. 46. ALGUNS BUILD SYSTEMS ● Proprietários: – Monta Vista. – Wind River. – TimeSys. ● Open source: – Buildroot. – OpenEmbedded / Yocto. – PTXdist. – LTIB.
  47. 47. PLACAS DE DESENVOLVIMENTO Raspberry Pi (USD 25/35): http://www.raspberrypi.org/ – CPU - ARM11 700 Mhz – Broadcom BCM2835 – RAM - 256MB / 512MB – MMC Slot – USB – 1 / 2 – HDMI e Video Composto – Saída de Audio no conector de 3.5mm – Ethernet (no modelo B) – Barra de Pinos com expansão de I/Os do processador
  48. 48. PLACAS DE DESENVOLVIMENTO BeagleBone Black (USD 55): http://beagleboard.org/ – CPU – ARM Cortex-A8 1 Ghz – Texas Instruments AM335x – RAM – 512MB – eMMC - 4GB – uMMC Slot – 1 USB Host e 1 USB Device – HDMI – Ethernet – Conectores com expansão de I/Os do processador
  49. 49. OS 3 PAPÉIS DO DESENVOLVEDOR ● Desenvolvedor de aplicações: desenvolve aplicações Linux. ● Desenvolvedor de BSP (Board Support Package): porta o kernel e o bootloader, desenvolve os device drivers para os dispositivos de hardware usados no produto, etc. ● Integrador: Integra todos os componentes (bootloader, kernel, bibliotecas e aplicações) em um sistema Linux embarcado.
  50. 50. COMO SE TORNAR UM DESENVOLVEDOR ● Inglês ● Hardware: Análise de Esquemáticos e Data Sheets ● Usuário Avançado de linha de comando de Distros GNU/Linux ● Programação em Assembly (Básico), C (Avançado) e Shell Script ● Livros: – Linux Kernel Development – Linux Device Drivers – The Linux Programming Interface ● Ter uma placa de desenvolvimento ● Use e abuse do Oráculo
  51. 51. Perguntas e Respostas ?
  52. 52. OBRIGADO PELA PRESENÇA diego.sueiro@embarcados.com.br www.embarcados.com.br www.esdtec.net Google Grupos sis_embarcados

×