1º IoT Day - O que é Linux Embarcado

Post on 29-Jun-2015

111 views 5 download

description

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

Transcript of 1º IoT Day - O que é Linux Embarcado

Linux Embarcado

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

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-linux

● Este documento é disponibilizado sob a Licença Creative Commons BY-SA 3.0.http://creativecommons.org/licenses/by-sa/3.0/legalcode

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

Introdução à Linux embarcado

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.

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.”

20 ANOS DEPOIS

VÍDEOS

✗ Os 20 anos do Linux : linuxfoundation.org/20thvimeo.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) 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.

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.

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.

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 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!

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á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.

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 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).

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 armazenamento em bloco, incluindo discos e cartões SD/MMC.

● Um sistema bem básico pode funcionar com 2M de armazenamento (ou até menos!).

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).

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.

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 sistema completo.

● Quando a plataforma de desenvolvimento (host) é diferente da plataforma alvo (target), chamamos o toolchain de cross-compiling toolchain.

TOOLCHAIN (cont.)

Binário x86

x86

Binário ARM

ARM

Código-fonte

x86

Toolchain nativo Cross-compiling toolchainHost

Target

COMPONENTES DO TOOLCHAIN

● Compilador (gcc).● Assembler e Linker (binutils).● Standard C Library (glibc, uclibc,

dietlibc, etc).

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/ToolChain

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.

● O bootloader é responsável por carregar e executar o kernel do sistema operacional (no nosso caso, o Linux).

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.

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 os device drivers.● Inicia o escalonador de tarefas.● Inicia threads do kernel.● Monta sistema de arquivos principal (rootfs)

e chama o processo init.

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.

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.● Bibliotecas e aplicações.

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).

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.

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, compilar e gerar a imagem do kernel.

– Configurar, compilar bibliotecas e aplicações, e gerar a imagem final do rootfs.

ALGUNS BUILD SYSTEMS

● Proprietários: – Monta Vista.

– Wind River.

– TimeSys.

● Open source: – Buildroot.

– OpenEmbedded / Yocto.

– PTXdist.

– LTIB.

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

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

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.

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

Perguntas e Respostas

?

OBRIGADO PELA PRESENÇA

diego.sueiro@embarcados.com.br

www.embarcados.com.br

www.esdtec.net

Google Grupos sis_embarcados