tdc2016sp - trilha embarcados

30
Globalcode – Open4education Globalcode – Open4education Embarcados Zephyr o sistema operacional de tempo real da Linux Foundation Felipe Silva Neves

Upload: tdc-globalcode

Post on 14-Jan-2017

34 views

Category:

Education


2 download

TRANSCRIPT

Page 1: TDC2016SP - Trilha Embarcados

Globalcode – Open4education

Globalcode – Open4education

Embarcados – Zephyr o sistema operacional de tempo real da Linux Foundation

Felipe Silva Neves

Page 2: TDC2016SP - Trilha Embarcados

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;

Page 3: TDC2016SP - Trilha Embarcados

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.

Page 4: TDC2016SP - Trilha Embarcados

Globalcode – Open4education

Zephyr, visão geral:

Desenvolvido a partir da seguinte parceria:

Page 5: TDC2016SP - Trilha Embarcados

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.

Page 6: TDC2016SP - Trilha Embarcados

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.

Page 7: TDC2016SP - Trilha Embarcados

Globalcode – Open4education

Aquitetura do kernel:O Zephyr é um projeto completo em termos de sistema operacional embarcado:

Page 8: TDC2016SP - Trilha Embarcados

Globalcode – Open4education

Estrutura de diretórios:O Zephyr possui a organização própria dos diretórios do kernel:

Page 9: TDC2016SP - Trilha Embarcados

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.

Page 10: TDC2016SP - Trilha Embarcados

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.

Page 11: TDC2016SP - Trilha Embarcados

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;

Page 12: TDC2016SP - Trilha Embarcados

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

Page 13: TDC2016SP - Trilha Embarcados

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:

Page 14: TDC2016SP - Trilha Embarcados

Globalcode – Open4education

O utilitário menuconfig:

Page 15: TDC2016SP - Trilha Embarcados

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:

Page 16: TDC2016SP - Trilha Embarcados

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;

Page 17: TDC2016SP - Trilha Embarcados

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.

Page 18: TDC2016SP - Trilha Embarcados

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.

Page 19: TDC2016SP - Trilha Embarcados

Globalcode – Open4education

Threads e fibers:• Alocação de objeto através do arquivo .mdef:

Page 20: TDC2016SP - Trilha Embarcados

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.

Page 21: TDC2016SP - Trilha Embarcados

Globalcode – Open4education

Sincronismo com semáforos:

• Alocando através do arquivo .mdef:

Page 22: TDC2016SP - Trilha Embarcados

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.

Page 23: TDC2016SP - Trilha Embarcados

Globalcode – Open4education

Mensagens entre threads (Queues):

• Alocação pública, via arquivo .mdef:

• Queues possuem uma particularidade, o message descriptor :

Page 24: TDC2016SP - Trilha Embarcados

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.

Page 25: TDC2016SP - Trilha Embarcados

Globalcode – Open4education

O device model:• O modelo de device do zephyr está todo contido no arquivo device.h

• Diferentes devices, mesmo device model:

Page 26: TDC2016SP - Trilha Embarcados

Globalcode – Open4education

O device model:• Utilizando um device driver:

Page 27: TDC2016SP - Trilha Embarcados

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.

Page 28: TDC2016SP - Trilha Embarcados

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;

Page 29: TDC2016SP - Trilha Embarcados

Globalcode – Open4education

Conclusão:• Mais informaçoes sobre o projeto:

https://www.zephyrproject.org https://www.zephyrproject.org/doc/

Page 30: TDC2016SP - Trilha Embarcados

Globalcode – Open4education

Obrigado!