Zephyr, o RTOS para IoT desenvolvido pela Linux Foundation

Zephyr instalar o Zephyr no Ubuntu
Este post faz parte da série Zephyr. Leia também os outros posts da série:

 

Olá caro leitor. Sabemos que nos últimos meses diversos ramos de sistemas embarcados estão cada vez mais convergindo para um ponto, a internet das coisas (ou IoT da definição original em inglês). Dentre as coisas destacamos placas de desenvolvimento completas, módulos de comunicação sem fio cada vez mais integrados, microcontroladores conectados, além de pilhas de software para acelerar o desenvolvimento (desde drivers ethernet até completos frameworks TCP/IP). Com sistemas operacionais de pequeno footprint (que denota baixo consumo de memória FLASH e RAM) e execução em tempo real não tem sido diferente, embora soluções baseadas em Linux Embarcado tenham tomado a dianteira nesse cenário, este ainda não se mostra adequado quando o assunto é ser embarcado em um dispositivo que está na ponta do IoT como sensores, pulseiras e atuadores inteligentes. Adicionada a soluções como o Brillo da Google, o Riot, o Mbed OS da ARM, a Linux Foundation liberou o primeiro release do seu sistema operacional de tempo real, o projeto Zephyr.

 

 

Zephyr, o irmão menor do Linux kernel

 

O Zephyr tem sido chamado de irmão menor no tradicional kernel do linux (também mantido pela mesma entidade), devido a modularidade, simplicidade e licença, sim seu código é aberto e pode ser utilizado em seus projetos, mas as semelhanças param por ai, o Zephyr possui como alvo microcontroladores e SoCs que executam tarefas em tempo real ou seja, eventos cujo o intervalo entre suas ocorrências é constante. Adicione a isso o fato de seu footprint ser pequeno como verificado em [1], que chega a ser menos de 2KB para uso apenas do chamado nanokernel. Para sistemas maiores e utilizando todos os recursos o RTOS pode chegar no consumo de 900KB de memória de programa Assim seu uso se torna ideal para uso em sistemas que variam desde redes de sensores, até dispositivos detectores de movimentos até coletores de dados responsáveis por publicar os dados obtidos para um serviço em nuvem como o Amazon AWS ou Microsoft Azure (consulte [2] e [3] respectivamente para mais informações).

 

 

A organização básica do kernel Zephyr

 

O Zephyr pode, primariamente ser dividido em dois grandes grupos, segundo [1], ele está estruturado no formato nanokernel e microkernel. O nanokernel trata-se de um pequeno núcleo de alto desempenho multitarefa, possui baixo consumo de memória e traz todos os serviços básicos de um sistema multitarefa, desde sistema gestor mínimo de threads e mecanismos de comunicação, como já dito anteriormente, é indicado para os dispositivos menores e que necessitam tratar eventos que possuem periodicidade de ocorrência. Acima do nanokernel existe uma versão mais completa que é o microkernel, ainda em [1] verificamos que ele possui serviços mais complexos de execução, além de abstração direta com os canais de comunicação por onde passam dados de maiores blocos como WiFi, sendo este indicado para os dispositivos que tratam tarefas de intenso processamento de dados e de diferentes canais de comunicação como além do WiFi, Ethernet e Bluetooth, dentre seus componentes temos: Sincronização, passagem de dados, serviços de interrupção e gerenciamento de memória. Além do kernel o Zephyr possui mais componentes comuns, observe a figura 1:

 

 

Figura 1 : Estrutura simplificada do Zephyr (Extraido de [4])

 

 

Essa figura da uma ideia melhor do que o projeto Zephyr contém, além dos dois serviços principais que são o microkernel e o picokernel, o Zephyr ainda traz diversos módulos para acelerar o desenvolvimento, ele contém diversos drivers para comunicação com diversos dispositivos, além disso possui suporte aos mais variados canais de comunicação utilizado para dispositivos conectados, desde soluções cabeadas, até canais sem fio. Além disso, o RTOS conta com uma biblioteca C minimalista contento os set de funções elementares da conhecida biblioteca padrão LIBC, resta saber se seu desempenho e consumo serão tão bons quanto derivados open source como a newLibNano. O Zephyr possui fácil acesso para que o usuário escreva e adicione seus próprios drivers, além de código portável para seu próprio hardware alvo, até o momento da escrita desse artigo, o Zephyr estava devidamente portado para as arquiteturas x86 (voltados para o Intel Quark), ARC(os microcontroladores auxiliares contidos na Intel Edison e Curie) e ARM. Além dos seguintes hardware alvo:

 

  •  Arduino 101 e Arduino Due;
  • Intel Galileo;
  • Freedom Board (em especial a baseada no Kinetis K64);
  • Quark D2000;
  • MinnowBoardMax.

 

Além disso, emuladores baseados no conhecido QEMU [5], podem ser utilizados para aqueles que não possuam um hardware alvo para uso. A Linux Foundation também está encorajando para que desenvolvedores implementem código para seu próprio hardware e que além disso, participem do programa de contribuição de desenvolvimento, para isso o interessado pode clicar nesse link para criar sua conta e aguardar a aprovação.

 

 

Conclusão

 

O projeto Zephyr pelo visto chegou pra ficar, talvez para se tornar um padrão no uso de sistemas embarcados, não se limitando apenas ao campo de internet das coisas, como o kernel do Linux se tornou com o passar dos anos. O Zephyr não quer ser visto como mais um sistema operacional, mas sim como um ambiente de desenvolvimento aberto e colaborativo, de modo que qualquer entusiasta ou profissional possa utilizar suas ferramentas para criar dispositivos, conectados ou não, para as mais diversas funções. Nós do embarcados também iremos explorar o uso dessa nova ferramenta, montando o ambiente e testando não apenas com as arquiteturas já suportadas, mas também adicionando e encorajando você, desenvolvedor a criar seu próprio dispositivo, aguardem que logo iremos publicar os primeiros passos com esse intrigante RTOS. E você leitor? O que acha? Vamos discutir mais a respeito? 

 

 

Para saber mais:

 

O projeto Zephyr já possui uma pagina dedicada com as principais informações a respeito, além de downloads, documentação e como já citado acesso a comunidade, para começar a explorar, clique nesse link e bom divertimento.

 

Referências:

 

[1] - Zephyr kernel fundamentals

[2] - Amazon AWS

[3] - Microsoft Azure

[4] - Meet Linux’s little brother: Zephyr, a tiny open-source IoT RTOS

[5] - QEmu, Open source processor emulator

 

 

 

 

Outros artigos da série

Como instalar o Zephyr no Ubuntu 16.04 >>
Este post faz da série Zephyr. Leia também os outros posts da série:
NEWSLETTER

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

Obrigado! Sua inscrição foi um sucesso.

Ops, algo deu errado. Por favor tente novamente.

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

Felipe Neves
Desenvolvedor de sistemas embarcados apaixonado pelo que faz, divide seu tempo entre trabalhar no Venturus desenvolvendo firmware de tudo quanto é coisa, na Aeolus Robotics se envolvendo com o que há de mais legal em robótica e na Overlay Tech desenvolvendo algumas coisas bem legais para o campo de motion control. Possui mestrado em engenharia elétrica pela Poli-USP e possui interesse em tópicos como: Software embarcado, sistemas de tempo real, controle, robótica móvel e manipuladores, Linux embedded e quase qualquer coisa por onde passe um elétron.

11
Deixe um comentário

avatar
 
6 Comment threads
5 Thread replies
1 Followers
 
Most reacted comment
Hottest comment thread
5 Comment authors
José Maurício Alencar FIlhoFelipe NevesVinicius MacielThiago LimaFelipe Navarro Recent comment authors
  Notificações  
recentes antigos mais votados
Notificar
José Maurício Alencar FIlho
Membro

Felipe e pessoal boa tarde, estou na procura incansável de cursos e capacitação para dominar a família STM32 e RTOS (tanto zephyr, quanto rtos), então por favor se não for contra as politicas de comentarios do *embarcados.com me indiquem portais para cursos do ramo ai nos comentarios, obrigado!

Vinicius Maciel
Visitante
vinifr

A propósito, vocês conhecem o Nuttx? Ele também é um RTOS muito parecido com Linux, tanto na estrutura como na API de aplicação e de sockets. Ele já tem suporte a várias placas.

Thiago Lima
Visitante

Vinicius, mostra pra gente, se der certo! Abracos!

Vinicius Maciel
Visitante
vinifr

Ok, já dei uma olhada no código. Penso em usar esse desenvolvimento pro meu TCC.

Thiago Lima
Visitante

Vinicius, observe que os BSPs disponiveis atualmente sao pra 4 placas apenas.

Felipe Navarro
Visitante
Felipe Navarro

Concordo contigo! Ver o Zephyr em uma STM32 seria muito bom! Estou esperando os novos tutoriais, tenho uma Freedom Board e vou testar ele nela.

Thiago Lima
Visitante

Oi Felipe, pra usar uma Kinetis diferente dessa e' necessario algumas modificacoes. Vamos trabalhar nisso em breve.

Vinicius Maciel
Visitante
vinifr

Adicionaram suporte ao stm32f1! Muito legal.

Vinicius Maciel
Visitante
vinifr

Caramba! Queria ver ele rodando num stm32 ou tm4cxx da Texas. 😀

Felipe Neves
Visitante
Felipe Neves

Vinicius, ja estou trabalhando com essa possibilidade, ate onde sei portar ele pra disco não deve ser nada de outro mundo, pretendo soltar um tuto de como fazer nas próximas semanas, aguarde 😀

Felipe

Vinicius Maciel
Visitante
vinifr

Ótimo. Vou tentar rodá-lo na EK-tm4c1294 com sockets.