23 Comentários

Anatomia de um Sistema Linux embarcado

Linux embarcado

Um sistema Linux embarcado não se difere, no quesito sistêmico, de um sistema Linux desktop. A mesma estrutura e conceitos são aplicados em ambos os domínios. A principal diferença está nos requisitos de processamento, armazenamento, consumo de energia e confiabilidade. Na maioria dos sistemas Linux embarcado, os recursos disponíveis são limitados e muitas vezes a interface com usuário é bastante limitada ou simplesmente não existe.

Seguem alguns exemplos de sistemas embarcados que utilizam o Linux como sistema operacional:

  • Roteador;
  • Setup-box;
  • Smart TV;
  • Controlador Lógico Programável (CLP);
  • Câmera Digital.

Arquitetura Básica

Na arquitetura básica de um sistema Linux podemos identificar cinco componentes básicos:

arq_bas_linux_emb
  1. Hardware: o seu produto;
  2. Bootloader: iniciado pelo hardware, responsável pela inicialização básica, carregamento e execução do kernel Linux;
  3. Kernel Linux: núcleo do sistema operacional. Gerencia CPU, memória e I/O, exportando serviços para as aplicações do usuário;
  4. Rootfs: sistema de arquivos principal. Possui as bibliotecas do sistema para uso dos serviços exportados pelo kernel, além das bibliotecas e aplicações do usuário;
  5. Toolchain: conjunto de ferramentas para gerar os artefatos de software do sistema.

Hardware

Vamos considerar um roteador Wi-Fi doméstico como exemplo de plataforma de hardware:

hw_linux_emb

O Linux kernel é capaz de rodar em mais de 20 arquiteturas de CPU diferentes. Como por exemplo: x86, ia64, ARM, PowerPC, MIPS, SuperH, Blackfin, Coldfire, Microbalze.

Tem suporte à arquiteturas de 32 e 64 bits e arquiteturas que não possuem MMU (Memory Management Unit).

Suporta armazenamento em memórias NAND, FLASH, MMC e hard disks.

No nosso exemplo, um sistema básico pode funcionar com até 8MB de RAM e 2MB de armazenamento, uma vez que, poucos drivers, funcionalidades do kernel e bibliotecas e aplicativos são necessárias para que o sistema desempenhe as funções desejadas.

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_linux_emb

Componentes principais:

  • Compilador (gcc);
  • Assembler e Linker (binutils);
  • Biblioteca C padrão (glibc, uclibc, dietlibc, musl, etc).

Algumas opções de toolchains prontas;

Artefatos de software de um Sistema Linux embarcado

Os artefatos de software principais de um sistema Linux embarcado são: Bootloader, Kernel e Rootfs. Tomando-se como base o hardware proposto, estes artefatos estão organizados na memória flash da seguinte maneira:

flash_linux_emb

Bootloader

Toda CPU possui um mecanismo de inicialização, que é responsável por carregar e executar o bootloader. Em algumas arquiteturas de CPU é necessário o uso de um bootloader de primeiro estágio, no qual é carregado pelo processador e executado a partir de sua memória interna. Em alguns casos esse bootloader de primeiro estágio está concatenado junto ao bootaloader.

As principais funcionalidades do bootloader são:

  • 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 utilizados em sistemas embarcados:

  • x86:
    • LILO;
    • Grub;
    • Syslinux.
  • ARM, MIPS, PPC e outras arquiteturas:
    • U-Boot;
    • Barebox;
    • Redboot.

Kernel

O Kernel é o coração do nosso sistema. No boot ele é responsável por:

  • Inicializar CPU, memória e barramentos;

  • Configurar a memória virtual (se tiver MMU);

  • Inicializar os device drivers;

  • Iniciar o escalonador de tarefas;

  • Iniciar threads do kernel;

  • Montar sistema de arquivos principal (rootfs) e chamar o processo init.

Como principais características podemos apontar:

  • Gerencia execução de processos e controla acesso à memória e I/O;

  • Gerenciamento do 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.

Rootfs

Após ter sido montado pelo kernel e ter o processo init (PID = 1) iniciado, o rootfs utiliza seu mecanismo de inicialização (ex.: SysVinit, Systemd etc) para inicializar os processos e aplicações do sistema. É responsável por prover as bibliotecas de sistema e de usuário.

Alguns exemplos de aplicações para sistemas embarcados:

  • Dropbear: cliente e servidor SSH;
  • Thttpd: servidor web;

  • DirectFB: biblioteca gráfica;

  • SQLite: banco de dados;

  • Busybox: o canivete suíço de sistemas embarcados com Linux.

Referência

Material do Treinamento Desenvolvendo Sistemas Linux Embarcado da Embedded Labworks.

Licença Creative Commons Esta obra está licenciada com uma Licença Creative Commons Atribuição-CompartilhaIgual 4.0 Internacional.

Receba os melhores conteúdos sobre sistemas eletrônicos embarcados, dicas, tutoriais e promoções.

Linux Embarcado » Anatomia de um Sistema Linux embarcado
Comentários:
Notificações
Notificar
guest
23 Comentários
recentes
antigos mais votados
Inline Feedbacks
View all comments
Gustavo Trento da Silva
Gustavo Trento
18/10/2015 17:48

Caros, Sou leigo no assunto e como estudante de redes, estou fazendo meu TCC no uso de embarcados com monitoramento de rede para pequenas empresas, usando ferramentas gráficas (Nagios, Zabbix e Ntop). Preciso defender a escolha de um embarcado que rode Linux (Raspbian), fácil aquisição no Brasil e baixo custo. Que opções além do Raspberry Pi 2 eu tenho disponível no mercado?

Henrique Rossi
Reply to  Gustavo Trento
18/10/2015 22:36

Olá Gustavo,

Por um custo um pouco maior, pode usar a BeagleBone Black ou BeagleBone Green:

http://beagleboard.org/black
http://beagleboard.org/green

Pelo mesmo custo, pode usar uma Odroid-C1+:

http://www.hardkernel.com/main/products/prdt_info.php?g_code=G143703355573

Por se tratar de um projeto de TCC, eu iria de BeagleBone Black ou Raspiberry Pi 2, vai encontrar muito suporte da comunidade, inclusive aqui do pessoal do Embarcados.

Se precisar de ajudar, estamos à disposição!!

Abraços,
Henrique

Gustavo Trento da Silva
Gustavo Trento
Reply to  Henrique Persico Rossi
18/10/2015 23:07

Muito obrigado Henrique.
Vou ver no SENAI (onde faço o curso de redes) se eles tem um BeagleBone Black para me emprestar.

O Raspberry Pi 2 eu já tenho e já estava usando.

Vou justificar o uso destes dois pela configuração de hardware, baixo custo, facilidade de suporte e documentação na internet e disponibilidade de aquisição no mercado nacional.

Com certeza vou precisar de alguma ajuda durante o meu TCC!
Antecipadamente, agradeço a ajuda!

Henrique Rossi
Reply to  Gustavo Trento
18/10/2015 23:51

Por nada Gustavo! Conte conosco!! Abraços

Pedro Neto
Pedro Neto
04/08/2015 12:24

Olá boa tarde! Eu gostaria de saber o seguinte: Tenho um programa em um hard (ex. CLP) que tem um tipo de arquitetura por exemplo ARM ou MISP, bom o mesmo programa tenho em um PC, como é que estes dispositivos com arquitetura diferente conversam e em tempo real, uma vez que pela serial no PC, eu vejo o que está rodando no CLP.

Diego Sueiro
Diego Sueiro
Reply to  Pedro Neto
05/08/2015 06:55

Olá Pedro,

Este tipo de aplicação é bem comum, onde equipamentos com diferentes arquiteturas conversam entre sim.
Neste caso eles estão utilizando a interface serial como canal de comunicação, e muito provavelmente estão sendo enviadas mensagens codificadas em ASCII. Sendo assim a mensagem não é dependente de arquitetura.

Pedro Neto
Pedro Neto
Reply to  Diego Sueiro
05/08/2015 13:25

Agradeço sua resposta, mas ainda não está claro pra mim: Temos 4 situações: 1 – Eu entendi que o Toolchain é para desenvolvimento de Programas, Sistema, Programa de usuários… (no caso do CLP, o programa executivo e o programa do usuário) 2 – Para este equipamento e outros equipamentos (CLP, Inversores de Frequencia, Módulos de controle, etc), normalmente desenvolvemos o programa de usuário no PC e carregamos no controlador via RS-232 ou de outra forma. Pergunto: Por trás disso, entra o ToolChain? 3 – Através de um PC X86, por um programa de Supervisório, o usuário altera o programa o… Leia mais »

Cleiton Bueno
14/11/2013 11:18

Eu sempre tive uma duvida quando as licenças das libs e serviços utilizados quando se pretende vender um produto com Linux embedded ou vender o projeto apenas, como trata-se este caso.
Por exemplo, utilizo Busybox, devo adquirir algum meio ao mesmo para poder vender produtos ou sistemas, ou deverar ser disponibilizado na internet. Tanto que na minha graduação utilizei apenas libs MIT e BSD o resto ou tirei ou adaptei.
Mas essa é uma duvida que me persegue.

Diego Sueiro
Diego Sueiro
Reply to  Cleiton Bueno
15/11/2013 08:17

Cleiton,

As licenças BSD e MIT são bastante permissivas. Elas basicamente obrigam que as informações de Copyright sejam divulgadas.

No caso do Busybox que segue a licença GPLv2, você é obrigado a disponibilizar a seus clientes o código fonte e as modificações que foram realizadas. No link abaixo há uma explicação bastante clara de como proceder caso esteja usando o Busybox em seu produto:
http://www.busybox.net/license.html

Duvida
Duvida
06/11/2013 18:59

Tem como fazer engenharia reversa de um firmware destes?

Diego Sueiro
Diego Sueiro
Reply to  Duvida
06/11/2013 19:11

Sim é possível.
Porém existem diversas estratégias que podem ser seguidas afim de dificultar o acesso à memória de dados, bem como a análise e exploração dos dados.
Pode-se, por exemplo, criptografar o sistema de arquivos.

Evandro Pinheiro
Evandro Pinheiro
Reply to  Diego Sueiro
14/06/2014 15:48

Boa tarde Diego Sueiro.

Eu tenho algumas duvidas de como usar um linux embarcado e proteger todo o software (bootloader, kernel, sistema de arquivos e o proprio software contra copia e contra engenharia reversa.
Você teria mais informações a respeito ?

Att,
Evandro Pinheiro

Diego Sueiro
Diego Sueiro
Reply to  Evandro Pinheiro
15/06/2014 07:53

Evandro,

Esse vídeo mostra um caso de uso interessante:
Secure Embedded Linux Product – A Success Story -…: http://youtu.be/5zSC_dClriE

Vinicius Maciel
vinifr
Reply to  Diego Sueiro
19/06/2014 11:03

Ola Diego, você já chegou a aplicar essa segurança do sistema rodando Linux em memoria flash?

Diego Sueiro
Diego Sueiro
Reply to  vinifr
23/06/2014 07:51

Vinicius,

Nunca implementei o verified boot.
Em relação a encriptação do sistemas de arquivos apenas em micro sdcards.

Abraços.

Cleiton Bueno
Reply to  Duvida
14/11/2013 11:15

O rootfs com uma analise critica é claro é possível extrair utilizando binwalk, consegui até nos sistemas com squashfs. Vale a pena dar uma olhada.

Matheus Quick
Matheus Quick
13/03/2017 01:03

linux é o futuro mesmo

Gustavo More Gaspar
Gustavo More Gaspar
07/10/2016 21:30

o bom e velho linux Simples,rapido e eficas

trackback
10/11/2014 02:25

[…]  Anatomia de um Sistema Linux embarcado […]

trackback
03/10/2014 13:14

[…] – Anatomia de um Sistema Linux embarcado  […]

trackback
27/04/2014 18:42

[…] Anatomia de um Sistema Linux embarcado […]

trackback
15/04/2014 01:09

[…] Anatomia de um Sistema Linux embarcado […]

Talvez você goste:

Séries

Menu

WEBINAR
 
Porque o RTOS não faz o que eu quero?

Data: 28/10 às 19:30h - Apoio: Mouser Electronics
 
INSCREVA-SE AGORA »



 
close-link