Zephyr - RTOS para IoT da The Linux Foundation - Embarcados
Zephyr, o irmão menor do Linux kernel
A organização básica do kernel Zephyr
Para saber mais sobre Zephyr
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.
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).
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:
Componentes do Zephyr: [Fonte: 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;
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.
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?
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.
[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
Como instalar o Zephyr no Ubuntu 16.04 >>
Home » Internet Das Coisas » Zephyr, o RTOS para IoT desenvolvido pela Linux Foundation
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!
Caramba! Queria ver ele rodando num stm32 ou tm4cxx da Texas. 😀
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 😀
Ótimo. Vou tentar rodá-lo na EK-tm4c1294 com sockets.
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.
Vinicius, mostra pra gente, se der certo! Abracos!
Ok, já dei uma olhada no código. Penso em usar esse desenvolvimento pro meu TCC.
Vinicius, observe que os BSPs disponiveis atualmente sao pra 4 placas apenas.
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.
Oi Felipe, pra usar uma Kinetis diferente dessa e' necessario algumas modificacoes. Vamos trabalhar nisso em breve.