Globalcode – Open4educationGlobalcode – Open4education
Embarcados – Zephyr o sistema operacional de
tempo real da Linux Foundation
Felipe Silva Neves
Globalcode – Open4education
Agenda:
Zephyr, visão geral e motivações;
Aquitetura do kernel:
Estrutura de diretórios;
O nanokernel;
O microkernel;
Introdução ao sistema de build:
Obtendo o kernel;
O utilitário menuconfig;
A estrutura do diretório da aplicação;
Globalcode – Open4education
Agenda cont.:
Demo: “Placa Freedom K64F, blink LED”;
Kernel object basics:
Threads e fibers;
Sincronismo com semáforos;
Mensagens entre threads (Queues);
Modelo de device drivers:
O device model;
Demo: “Driver I2C comunicando com acelerômetro”;
Conclusão.
Globalcode – Open4education
Zephyr, visão geral:
Desenvolvido a partir da seguinte parceria:
Globalcode – Open4education
Zephyr, visão geral:
Sistema operacional de tempo real;
Direcionado a dispositivos com restrições de memória e
processamento;
Escalável, footprint de memória ajustável;
Portável para multiplas arquiteturas;
Código aberto, manutenção por parceiros e comunidade.
Globalcode – Open4education
Zephyr, motivações:
Kernel de tempo real para dispositivos como microcontroladores;
Foco em aplicações voltada para internet das coisas (IoT);
Desenvolvimento de melhorias facilmente implementadas pelo usuário;
Reaproveitamento de ferramentas já existentes;
Normalização de sistema operacional embarcado;
Projeto colaborativo.
Globalcode – Open4education
Aquitetura do kernel:
O Zephyr é um projeto completo em termos de sistema operacional
embarcado:
Globalcode – Open4education
Estrutura de diretórios:
O Zephyr possui a organização própria dos diretórios do kernel:
Globalcode – Open4education
O nanokernel:
Suporta dois contextos de execução: Fibers e ISR;
Scheduling cooperativo;
Kernel objects elementáres:
LiFo;
FiFo;
Pilhas;
Semáforos;
Timers.
Menor footprint de memória possível, chegando a 8KB;
Uso em tarefas de altíssima prioridade e que precisam de
desempenho.
Globalcode – Open4education
O microkernel:
Possui um terceiro contexto de execução: Task (ou Threads);
Scheduling preemptivo;
Serviços mais complexos e poderosos:
Queues;
Mutexes (protegidos contra race-condition e inversão de prioridade);
Eventos;
Mailboxes;
Permite o uso de todos os serviços do nanokernel;
Maior footprint de memória podendo chegar a 512KB.
Globalcode – Open4education
O sistema de build:
O zephyr possui seu próprio sistema de build;
Toda infraestrutura (toolchains, binutils) são providas pelo kernel;
O uso de uma toolchain nova pode ser adicionado;
Toda a configuração do kernel é feita através de um menu de
configuração;
O kernel (bem como as toolchains) estão disponíveis para:
Windows, Linux e Mac;
Possibilidade de construir a própria toolchain;
Globalcode – Open4education
Obtendo o kernel:
Pode ser obtido diretamente da página de downloads:
https://www.zephyrproject.org/downloads
O kernel é versionado utilizando git;
Assim uma forma alternativa de obter é clonando o repositório:
git clone https://gerrit.zephyrproject.org/r/zephyr
Globalcode – Open4education
O utilitário menuconfig:
O Zephyr é um kernel altamente configurável;
Configurar todas as opções do kernel através do código seria
cansativo;
O Zephyr então gera toda a infraestrutura de build através do
conhecido menuconfig:
Globalcode – Open4education
O utilitário menuconfig:
Globalcode – Open4education
O diretório da aplicação:
Assim como o diretório do kernel, o zephyr possui um padrão para o
diretório de aplicação:
Globalcode – Open4education
Demonstração de app:
Nessa demonstração vamos configurar uma aplicação com LED RGB;
O hardware alvo utilizado: Freedom Board K64 da NXP;
A aplicação usa o Zephyr no modo microkernel e cria 3 threads;
Cada thread abre o device driver de GPIO e manipula o led
correspondente;
Globalcode – Open4education
Kernel object basics:
Como todo bom sistema de tempo real o zephyr oferece uma gama de
serviços (kernel objects);
Alocação de objetos pode ser pública: arquivo .mdef;
Ou privada utilizando a macro: DEFINE_XXX(name);
Kernel objects do nanokernel só podem ser alocados de forma privada.
Globalcode – Open4education
Threads e fibers:
O Serviço de kernel mais elementar;
Threads:
Preemptivo;
Execução opcional em round-robin;
Executa sempre a de maior prioridade primeiro (exceto em caso de fiber ou ISR
pronta).
Fibers:
Cooperativo;
 Possui sistemas de prioridade;
 Como não possui preempção, fiber controla quando deve suspender;
 Executa a de maior prioridade sempre( exceto em caso de ISR pronta).
• Alocação estática ou em runtime.
Globalcode – Open4education
Threads e fibers:
• Alocação de objeto através do arquivo .mdef:
Globalcode – Open4education
Sincronismo com
semáforos:
• Úteis para gerenciamento de recursos compartilhados;
• Sincroniza tarefas de diferentes prioridades;
• sema / nano_sema:
 Iguais em funcionalidade;
 Totalmente configuráveis;
 Inicialização configurável.
• Alocação estática, ou, em runtime.
Globalcode – Open4education
Sincronismo com
semáforos:
• Alocando através do arquivo .mdef:
Globalcode – Open4education
Mensagens entre
threads (Mailboxes):
• Mesmo que independentes, comumente tasks precisam se comunicar;
• O zephyr oferece vários recursos de messaging;
• Queue ou Mailbox:
 Altamente configurável;
 Possui recurso de execução ISR safe;
• Alocação também de forma estática ou em runtime.
Globalcode – Open4education
Mensagens entre
threads (Queues):
• Alocação pública, via arquivo .mdef:
• Queues possuem uma particularidade, o message descriptor :
Globalcode – Open4education
Modelo de device
drivers:
• De forma similar ao Linux, o Zephyr possui sua “userland”;
• Utilizada para comunicação com hardware da SoC;
• Controlam o acesso ao hardware e a área de memória crítica;
• Oferece chamadas síncronas;
• O modelo de device é uniforme e independente do tipo de driver.
Globalcode – Open4education
O device model:
• O modelo de device do zephyr está todo contido no arquivo device.h
• Diferentes devices, mesmo device model:
Globalcode – Open4education
O device model:
• Utilizando um device driver:
Globalcode – Open4education
Demo: “Driver I2C comunicando
com acelerômetro”;
• O driver pode ser configurado ou não no menuconfig;
• Demonstraremos o poder das chamadas síncronas;
• Cada thread irá ler uma coordenada do acelerômetro;
• Todas usam o mesmo driver, porém o kernel se encarrega do
sincronismo;
• Driver não disponível, bloqueia a thread até ficar livre.
Globalcode – Open4education
Conclusão:
• O Zephyr é uma alternativa ao Linux para execução em tempo real;
• Muito dos conceitos do irmão maior são aproveitados;
• Sua alta configurabilidade o torna uma opção para diferentes SoCs;
• IoT friendly, mas não apenas limitada a essa aplicação;
• O Zephyr está em constante desenvolvimento;
Globalcode – Open4education
Conclusão:
• Mais informaçoes sobre o projeto:
 https://www.zephyrproject.org
 https://www.zephyrproject.org/doc/
Globalcode – Open4education
Obrigado!

TDC2016SP - Trilha Embarcados

  • 1.
    Globalcode – Open4educationGlobalcode– Open4education Embarcados – Zephyr o sistema operacional de tempo real da Linux Foundation Felipe Silva Neves
  • 2.
    Globalcode – Open4education Agenda: Zephyr,visão geral e motivações; Aquitetura do kernel: Estrutura de diretórios; O nanokernel; O microkernel; Introdução ao sistema de build: Obtendo o kernel; O utilitário menuconfig; A estrutura do diretório da aplicação;
  • 3.
    Globalcode – Open4education Agendacont.: Demo: “Placa Freedom K64F, blink LED”; Kernel object basics: Threads e fibers; Sincronismo com semáforos; Mensagens entre threads (Queues); Modelo de device drivers: O device model; Demo: “Driver I2C comunicando com acelerômetro”; Conclusão.
  • 4.
    Globalcode – Open4education Zephyr,visão geral: Desenvolvido a partir da seguinte parceria:
  • 5.
    Globalcode – Open4education Zephyr,visão geral: Sistema operacional de tempo real; Direcionado a dispositivos com restrições de memória e processamento; Escalável, footprint de memória ajustável; Portável para multiplas arquiteturas; Código aberto, manutenção por parceiros e comunidade.
  • 6.
    Globalcode – Open4education Zephyr,motivações: Kernel de tempo real para dispositivos como microcontroladores; Foco em aplicações voltada para internet das coisas (IoT); Desenvolvimento de melhorias facilmente implementadas pelo usuário; Reaproveitamento de ferramentas já existentes; Normalização de sistema operacional embarcado; Projeto colaborativo.
  • 7.
    Globalcode – Open4education Aquiteturado kernel: O Zephyr é um projeto completo em termos de sistema operacional embarcado:
  • 8.
    Globalcode – Open4education Estruturade diretórios: O Zephyr possui a organização própria dos diretórios do kernel:
  • 9.
    Globalcode – Open4education Onanokernel: Suporta dois contextos de execução: Fibers e ISR; Scheduling cooperativo; Kernel objects elementáres: LiFo; FiFo; Pilhas; Semáforos; Timers. Menor footprint de memória possível, chegando a 8KB; Uso em tarefas de altíssima prioridade e que precisam de desempenho.
  • 10.
    Globalcode – Open4education Omicrokernel: Possui um terceiro contexto de execução: Task (ou Threads); Scheduling preemptivo; Serviços mais complexos e poderosos: Queues; Mutexes (protegidos contra race-condition e inversão de prioridade); Eventos; Mailboxes; Permite o uso de todos os serviços do nanokernel; Maior footprint de memória podendo chegar a 512KB.
  • 11.
    Globalcode – Open4education Osistema de build: O zephyr possui seu próprio sistema de build; Toda infraestrutura (toolchains, binutils) são providas pelo kernel; O uso de uma toolchain nova pode ser adicionado; Toda a configuração do kernel é feita através de um menu de configuração; O kernel (bem como as toolchains) estão disponíveis para: Windows, Linux e Mac; Possibilidade de construir a própria toolchain;
  • 12.
    Globalcode – Open4education Obtendoo kernel: Pode ser obtido diretamente da página de downloads: https://www.zephyrproject.org/downloads O kernel é versionado utilizando git; Assim uma forma alternativa de obter é clonando o repositório: git clone https://gerrit.zephyrproject.org/r/zephyr
  • 13.
    Globalcode – Open4education Outilitário menuconfig: O Zephyr é um kernel altamente configurável; Configurar todas as opções do kernel através do código seria cansativo; O Zephyr então gera toda a infraestrutura de build através do conhecido menuconfig:
  • 14.
    Globalcode – Open4education Outilitário menuconfig:
  • 15.
    Globalcode – Open4education Odiretório da aplicação: Assim como o diretório do kernel, o zephyr possui um padrão para o diretório de aplicação:
  • 16.
    Globalcode – Open4education Demonstraçãode app: Nessa demonstração vamos configurar uma aplicação com LED RGB; O hardware alvo utilizado: Freedom Board K64 da NXP; A aplicação usa o Zephyr no modo microkernel e cria 3 threads; Cada thread abre o device driver de GPIO e manipula o led correspondente;
  • 17.
    Globalcode – Open4education Kernelobject basics: Como todo bom sistema de tempo real o zephyr oferece uma gama de serviços (kernel objects); Alocação de objetos pode ser pública: arquivo .mdef; Ou privada utilizando a macro: DEFINE_XXX(name); Kernel objects do nanokernel só podem ser alocados de forma privada.
  • 18.
    Globalcode – Open4education Threadse fibers: O Serviço de kernel mais elementar; Threads: Preemptivo; Execução opcional em round-robin; Executa sempre a de maior prioridade primeiro (exceto em caso de fiber ou ISR pronta). Fibers: Cooperativo;  Possui sistemas de prioridade;  Como não possui preempção, fiber controla quando deve suspender;  Executa a de maior prioridade sempre( exceto em caso de ISR pronta). • Alocação estática ou em runtime.
  • 19.
    Globalcode – Open4education Threadse fibers: • Alocação de objeto através do arquivo .mdef:
  • 20.
    Globalcode – Open4education Sincronismocom semáforos: • Úteis para gerenciamento de recursos compartilhados; • Sincroniza tarefas de diferentes prioridades; • sema / nano_sema:  Iguais em funcionalidade;  Totalmente configuráveis;  Inicialização configurável. • Alocação estática, ou, em runtime.
  • 21.
    Globalcode – Open4education Sincronismocom semáforos: • Alocando através do arquivo .mdef:
  • 22.
    Globalcode – Open4education Mensagensentre threads (Mailboxes): • Mesmo que independentes, comumente tasks precisam se comunicar; • O zephyr oferece vários recursos de messaging; • Queue ou Mailbox:  Altamente configurável;  Possui recurso de execução ISR safe; • Alocação também de forma estática ou em runtime.
  • 23.
    Globalcode – Open4education Mensagensentre threads (Queues): • Alocação pública, via arquivo .mdef: • Queues possuem uma particularidade, o message descriptor :
  • 24.
    Globalcode – Open4education Modelode device drivers: • De forma similar ao Linux, o Zephyr possui sua “userland”; • Utilizada para comunicação com hardware da SoC; • Controlam o acesso ao hardware e a área de memória crítica; • Oferece chamadas síncronas; • O modelo de device é uniforme e independente do tipo de driver.
  • 25.
    Globalcode – Open4education Odevice model: • O modelo de device do zephyr está todo contido no arquivo device.h • Diferentes devices, mesmo device model:
  • 26.
    Globalcode – Open4education Odevice model: • Utilizando um device driver:
  • 27.
    Globalcode – Open4education Demo:“Driver I2C comunicando com acelerômetro”; • O driver pode ser configurado ou não no menuconfig; • Demonstraremos o poder das chamadas síncronas; • Cada thread irá ler uma coordenada do acelerômetro; • Todas usam o mesmo driver, porém o kernel se encarrega do sincronismo; • Driver não disponível, bloqueia a thread até ficar livre.
  • 28.
    Globalcode – Open4education Conclusão: •O Zephyr é uma alternativa ao Linux para execução em tempo real; • Muito dos conceitos do irmão maior são aproveitados; • Sua alta configurabilidade o torna uma opção para diferentes SoCs; • IoT friendly, mas não apenas limitada a essa aplicação; • O Zephyr está em constante desenvolvimento;
  • 29.
    Globalcode – Open4education Conclusão: •Mais informaçoes sobre o projeto:  https://www.zephyrproject.org  https://www.zephyrproject.org/doc/
  • 30.