Seminário Linux Embarcado
2011
Migração de Linux de Tempo real para um
processador embarcado
Agenda
Introdução
Sobre o apresentador Sobre a empresa
Introdução ao Linux embarcado
Xenomai
Xenomai – Real-Time Linux Arquitetura do Xenomai
Casos de uso do Xenomai
Aplicações realizadas com o Xenomai
Migração
Processador L-138
Suporte do Xenomai ao L-138 Resultados obtidos
Sobre o apresentador
Flavio de Castro Alves Filho
Formação
Engenharia Elétrica – UNICAMP
Especialização – Ecole Centrale de Lyon (França)
– Eletrônica e Sistemas de Comunicação
9 anos de experiência em projetos de sistemas embarcados
Automação comercial Pagamento Eletrônico Defesa / Aeroespacial Telecomunicações
Fundador da Phi Innovations
Linux – desde 1994
Slackware 1994. Não havia internet, comprei CD pelo correio
Sobre a Phi Innovations
Possivelmente a primeira empresa brasileira especializada em Linux
embarcado
Distribuição comercial de Linux embarcado
Phi Linux
SDK completo para desenvolvimento de software para seu sistema embarcado
Suporte
Suporte técnico Treinamento Desenvolvimento de driversConsultoria
Ferramentas
Ambiente de desenvolvimento (em breve)
Introdução ao Linux embarcado
Sistema operacional Linux funcionando no equipamento eletrônico
Do ponto de vista operacional, exatamente igual ao Linux de um
desktop
Obviamente, para quem usa o Linux desktop em console, fica “quase a
mesma coisa”
Mais limitado, se comparado ao Linux desktop
Restrições de memória e armazenamento
Componentes de software limitados à necessidade do equipamento
Um pouco mais desconfortável do que o Linux desktop
Geralmente sistemas embarcados não possuem monitor e mouse
Sobre o Xenomai
Projeto Xenomai (
www.xenomai.org
)
Projeto de código aberto (open source)
Missão
Fornecer um framework de desenvolvimento de software em tempo-real
em ambiente GNU/Linux
Permitir o desenvolvimento de aplicações de tempo real em user-space
Ser independente de interface
– Permitir que software escrito para outros RTOS funcionem em Xenomai (Linux)
Projeto com uma comunidade bem ativa de usuários e
desenvolvedores
Surgiu a partir de outro projeto de código aberto – RTAI (
www.rtai.org
)
O que é um RTOS
Sistema Operacional de Tempo Real (Real Time
Operating System – RTOS)
Objetivo
Atender a requisições em tempo real
O elemento importante em aplicações que necessitam
de sistema de tempo real é o
TEMPO
Tempo do que?
Mudança de contexto – em caso de sistemas multitarefas
Tempo de resposta a uma interrupção
Mas o Linux não é um sistema de tempo real?
Resposta: SIM!
Então … por que ele não é considerado um sistema de tempo real?
Resposta:– Ele é um sistema de tempo real por ter o recurso de multitarefa preemptiva. As diversas
tarefas (processos) do sistema operacional são chaveados no tempo, para dar a sensação de paralelismo
– Porém … os critérios de tempo usados pelo Linux convencional não são rigorosos – É um sistema SOFT REAL TIME
Na verdade,
Quando se fala em sistema de tempo real, significa HARD REAL TIME Em sistemas HARD REAL TIME, o tempo é o critério mais importante
Conclusão
O Xenomai pretende tornar o Linux um sistema
operacional HARD REAL TIME, de forma que
aplicações onde o principal elemento é o tempo
possam ser executadas sem problemas em um
ambiente conhecido e consagrado.
Arquitetura do Xenomai
Composto por duas partes User-Space
Kernel-Space Kernel Space
ADEOS patch
É onde o micro-kernel é implementado Implementa todas as funcionalidades de baixo nível necessárias para uma
aplicação de tempo real User Space
Biblioteca Xenomai
Disponibiliza uma API para utilizar os recursos implementados em kernel space Obrigatória para desenvolvimento de software em tempo real
Hardware
Kernel Space
ADEOS - Xenomai Linux Kernel Convencional
User Space (Root Filesystem)
Biblioteca padrão C
Bibliotecas Xenomai Aplicação
Recursos do Xenomai
Desenvolvimento de aplicações em tempo real em user-space
Programação é feita como se fosse um aplicativo Linux convencional
Interface específica para acesso a dispositivos
RTDM – Real Time Driver Model
Permite desenvolver drivers específicos para aplicações de tempo real Redução de latências durante acesso a dispositivos
Skins
Interface com o objetivo de permitir a software escrito para outros sistemas operacionais de tempo real ser usado em Linux com Xenomai
VxWorks, RTAI
Como “instalar” o Xenomai
Aplicação de patches no
kernel
Patches que implementam
o núcleo de tempo real sob
o Linux
Específicos para
processador e/ou placa
– Principalmente processador
Kernel específico deve ser
compilado para a aplicação
Geralmente “inspirado” no
kernel do BSP fornecido
pelo fabricante
Compilação da biblioteca
Xenomai
Compilação cruzada
Ela será executada no
sistema embarcado
Instalação
A biblioteca deve ser
instalada no sistema de
arquivos final do projeto
Adaptação do build-system
O ideal é criar um pacote
para o build system realizar
esta atividade
Xenomai – x86 – PC/104
Plataforma: x86
Placa Advantech PC/104
Desafio: utilização do barramento PC/104 em aplicação específica
Linux convencional não recebia a interrupção oriunda do barramento PC/104 da placa
Mesmo IRQ usado pela porta da impressora
Linux não conseguia receber interrupção vinda da ponte ISA/PCI
Solução: Xenomai
Interrupção gerenciada pelo Xenomai – implementação de um driver específico Biblioteca de interface foi implementada
Xenomai – PowerPC - SPI
Plataforma: PowerPC
MPC8313ERDB
Desafio: implementar solução SPI que atenda requisitos de
desempenho da aplicação
Comunicação com FPGA
Expectativa de funcionamento SPI na taxa nominal
Problemas com o DMA do processador
Solução: Xenomai
Uso da interface SPI foi descartado. Uso de GPIO
Implementado driver Xenomai em SPI com barramento de 4 bits
Xenomai permitiu a implementação do driver com baixa latência de
tempo, atendendo aos requisitos de aplicação
Processador L-138
Processador Dual Core da Texas Instruments
Apesar de dual core, não é SMP (simétrico)
Um core ARM9
Um core DSP
Processador interessante para aplicações onde processamento
e visualização devem operar juntos
Capacidade de processamento interessante
Suficiente para operações simples de cálculo e visualização
Para maiores capacidades de processamento
OMAP3530 (BeagleBoard)
Não interessado em DSP
Suporte Xenomai ao L-138
Xenomai suporta ARM
Diversas arquiteturas (praticamente todas as ARM)
Diversos processadores (quase todos)
No caso do L-138 …
Ele possuia algumas particularidades, que não o permitiram
funcionar automaticamente
Olhando no detalhe (no código do kernel do Linux), as chamadas
de ARM9 do Xenomai não ocorriam para o caso deste
processador
Duas soluções
Aguardar o suporte pronto
Comunidade Xenomai
Muito ativa
Os mantenedores ficam “online” o tempo todo
Comunicação através de mailing-list
Xenomai-help – voltada para auxiliar na instalação e utilização do
Xenomai em equipamentos e aplicações, respectivamente
Xenomai-core – voltada para assuntos relacionados às questões internas
do xenomai, avanços de implementação, entre outros
É importante participar das listas
Para quem quer se envolver mais com o projeto
Descobrir as tendências
Conseguir ajuda não-especializada
Eles não possuem IRC
Requisitos para iniciar a migração
Fazer a migração a partir do Linux mainline
Repositório git inicial do patch (ADEOS)
http://git.denx.de/?p=ipipe-2.6.git;a=summary
Este repositório já tem as funcionalidades do Xenomai já
implementadas
Checar se existe port do Linux para a placa/cpu que estamos
trabalhando
No caso, não
Em caso negativo, é preciso fazer um port próprio
Timer
UART
Migração do Xenomai
Documento no site que explica com fazer o port
http://www.xenomai.org/index.php/I-pipe:ArmPorting
No nosso caso
Partimos do kernel de Linux fornecido pelo BSP da TI
– Feio, do ponto de visto de comunidade – Kernel já funcionava na placa
– Integração relativamente simples
Aplicação dos patches já disponíveis no site do projeto, para a versão de kernel presente no BSP da TI
– Uma boa parte do patch já está implementada nestes patches
Resultado
Um kernel com a parte independente de hardware implementada
Próximo passo – implementar as funcionalidades dependentes de
hardware
Arquivos dependentes de hardware
time.c
Implementa funções de gerenciamento de relógio
Principal recurso de um sistema operacional de tempo real
irqs.h
Arquivo contendo as especificações de interrupção
No caso, devem ser implementados macros para gerenciamento de
multiplexação de interrupção, se for o caso
irq.c
Implementa funcionalidades de gerenciamento de interrupção
Implementa o gerenciador específico usado pelo Xenomai
Desafios
Ajustes do timer
Realmente a parte decisiva do projeto
Uma vez acertado, o resto vai direto
Nos primeiros testes, o sistema travou
Printk não funcionou
–
Foi preciso mudar o printk para imprimir direto na serial
Só passou a funcionar depois de resolvido problema do
timer
Problemas com interrupção
Testes extensivos devem ser realizados, pois pode ocorrer
problemas com outros drivers Linux
Resultados Obtidos
Código adaptado do Xenomai adaptado para o
kit de desenvolvimento L-138 da LogicPD
Ainda é necessário realizar mais testes
Conseguimos verificar a maioria dos casos
Ainda mais trabalho é necessário
Atualização no “mainline” do Xenomai
Processo em andamento
Revisão rigorosa de código pelos mantenedores
Conclusão
Xenomai é uma estratégia muito interessante para utilização do
GNU/Linux em aplicações de tempo real
Solução de micro-kernel tem se mostrado muito apropriado quando os requisitos de tempo são mais fortes
Permite o desenvolvimento de aplicações onde as questões temporais
são tratadas com latências reduzidas
Para desenvolvimento de software de tempo real em Linux, é requisito que o software seja feito em user-space
Grande vantagem em projetos de sistemas de tempo real