tdc2016sp - trilha linux embarcado
TRANSCRIPT
Globalcode – Open4education
Novas técnicas de controle de tempo real em Linux: Processadores Multicore Heterogêneos
Raul Rosetto MuñozCTO Toradex Brasil
Globalcode – Open4education
O que é um Sistema Operacional de Tempo Real?
É um sistema destinado a execução de múltiplas tarefas em que exite um tempo de resposta a um evento pré-definido
Globalcode – Open4education
Opções de abordagens e como escolher?
RT-LinuxLinux Kernel Microcontrolador
Globalcode – Open4education
Será que está tão ruim assim?
Linux Kernel MicrocontroladorRT-Linux
Globalcode – Open4education
Projeto PCB
Abordagem “Tradicional”
UART
PROCESSADOR
MicrocontroladorFirmware
- Processador Linux- Microcontrolador Real-Time- Comunicação Serial/Sinais de Interrupção- Não compartilham memória- Não compartilham Devices
Globalcode – Open4education
Projeto PCB
SOC
Multicore Heterogêneos
RPMSG
PROCESSADOR MicrocontroladorFirmware
- Rápido canal de comunicação.- Diminui a complexidade do projeto de Hardware.- Interrupções internas no processador.- Semáforos entre núcleos.- Compartilham dispositivos possibilitando ótima flexibilidade do design.- Facilidade na atualização do firmware no segundo núcleo.
Globalcode – Open4education
Colibri iMX7
- Pino compatível com toda família Colibri
- Ciclo de vida de mais de 10 anos
- Baixo consumo
- Alta performance
- Venda local (Brasil)
ARM Cortex-A7 Single/Dual (1GHz)Arm Cortex-M4 (200MHz)NAND 512MB RAM 256MB / 512MB
Globalcode – Open4education
Arquitetura iMX7
8
Main CPU Platform
Core #0 (Cortex-A7)
Core #1 (Cortex-A7)32 KB I-cache 32 KB D-cache
FPU NEON
512 KB L2-cache
Secondary CPU Platform
Cortex-M4
16 KB I-cache 16 KB D-cache
FPU
32 KB TCMU
MPU
Internal Memory
128 KB OCRAM
32 KB OCRAM_S
32 KB TCML
...
96 KB ROM
External Memory
DDR Controller
GPMI&BCH (NAND)
Peripherals
UART
PWM
Heterogeous Multicore Units
Messaging Unit (MU)
Resource Domain Controller (RDC)
Semaphore (SEMA4/SEMA42)
GPIO
ADC CAN
I2C SPI
...
AXI/AHB Interconnect
Globalcode – Open4education
Por onde começar?
Comunicação entre núcleos!
Rpmsg: Remote Processor Messaging Framework(Usada no I.MX7)
- Linux (A7): RPMSG Driver de Kernel disponibilizados pela NXP- - Pingpong (CONFIG_IMX_RPMSG_PINGPONG, drivers/rpmsg/imx_rpmsg_pingpong.c)- - Serial Port (CONFIG_IMX_RPMSG_TTY, drivers/rpmsg/imx_rpmsg_tty.c) TTY driver (/dev/ttyRPMSG)
- Firmware (M4): Rpmsg: OpenAMP- - RPMsg implementada para firmware bare-metel- - Open source project
Globalcode – Open4education
É uma tendência?
+ Documentação+ Padronização+ Exemplosgit://git.toradex.com/freertostoradex.git
+Suporte ARM DS-5 IDE (DEBUG M4) freeRTOS (NXP)
QUALIDADE
Globalcode – Open4education
Como usar RPMsg no M4?
Como fazer no Firmware (M4):
- IDE ( ARM DS-5 IDE).- u-boot carrega e roda o firmware no M4.fatload mmc 0:1 0x7F8000 rpmsg_str_echo_freertos_example_imx7_colibri_m4.bindcache flushbootaux 0x7F8000
- Comunicação.
Globalcode – Open4education
Como usar RPMsg no A7?●
Como fazer no Linux (A7):
modprobe imx_rpmsg_tty
Módulo montado em: “/dev/ttyRPMSG”.
Comunicar apenas usando open, read, write, close.
Globalcode – Open4education
Aonde podemos chegar?
Demo desenvolvida pela Toradex
- Robô que se auto-equilibra (pêndulo invertido)
https://www.youtube.com/watch?v=BUq0Y3fHWLU&feature=youtu.be&t=139
Globalcode – Open4education
Referências
Robô Firmware.https://github.com/antmicro/imx7-taq-demo (soon)
Robô User Interface.https://github.com/mitchcurtis/robot-faces
Toradex Artigo de Desenvolvimento.FreeRTOS on the Cortex-M4 of a Colibri iMX7
Código Linux KernelDocumentation/rpmsg.txt
OpenAMPhttps://github.com/OpenAMP
FreeRTOS BSP (incluindo documentos NXP)Release Notes, Getting Started, API Reference Manualhttp://git.toradex.com/cgit/freertos-toradex.git/