Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Apache Mynewt - TDC2017

Apache Mynewt - TDC2017

Avatar for Fabio Utzig

Fabio Utzig

May 06, 2017
Tweet

More Decks by Fabio Utzig

Other Decks in Programming

Transcript

  1. Globalcode – Open4education Missão: um SO para construir, implantar e

    gerenciar com segurança bilhões de dispositivos
  2. Globalcode – Open4education Licença liberal estilo BSD/MIT Política de licença

    e propriedade intelectual fortes Meritocracia Contribuidores controlam a direção do projeto Histórico de trabalho com grandes organizações: IBM, Pivotal/EMC, Microsoft.   Longa experiência gerenciamento projetos grande e complexos (Servidor Web Apache, Hadoop, Subversion, etc)
  3. Globalcode – Open4education Características do RTOS Escalonador tickeless: low-power hooks

      Driver Interface   Multi-tarefa preemptiva Escalonamento baseado em prioridade Até 253 níveis de prioridade Gerenciamento de buffers unificado Estatísticas e logs de uso Temporizadores de alta resolução
  4. Globalcode – Open4education HAL (Hardware Abstraction Layer) Camada de abstração

    para vários dispositivos de HW padrão em microcontroladores Cada BSP precisa implementar todas interfaces para ser “mergeável” Não inclui alguns dispositivos mais complexos com ENET, USB, e dispositivos externos a MCU
  5. Globalcode – Open4education HAL (hw/hal) $ ls hw/hal/include/hal hal_bsp.h hal_flash_int.h

    hal_i2c.h hal_spi.h hal_timer.h hal_watchdog.h hal_flash.h hal_gpio.h hal_os_tick.h hal_system.h hal_uart.h
  6. Globalcode – Open4education BSPs (hw/bsp) $ ls -1 hw/bsp |

    column –c 80 ada_feather_nrf52 nrf52dk arduino_primo_nrf52 nucleo-f401re bbc_microbit olimex_stm32-e407_devboard ble400 pic32mx470_6lp_clicker bmd200 pic32mz2048_wi-fire bmd300eval rb-blend2 ci40 rb-nano2 frdm-k64f ruuvi_tag_revb2 native sensorhub nina-b1 stm32f429discovery nrf51-arduino_101 stm32f4discovery nrf51-blenano stm32f767-nucleo nrf51dk telee02 nrf51dk-16kbram usbmkw41z nrf52840pdk
  7. Globalcode – Open4education BSPs Externos   BSPs, como qualquer pacote,

    não precisam estar na árvore do projeto Arduino Zero: https://github.com/runtimeco/mynewt_arduino_zero   STM32F3-Discovery: https://github.com/runtimeco/mynewt_stm32f3
  8. Globalcode – Open4education NimBLE Pilha BLE completamente desenvolvida in-House Suporta

    atualmente MCUs da Nordic (nrf5x) Compatível com BlueZ (Linux)   Bate outros em benchmarks (ou talvez não porque isso muda toda semana!)   Bluetooth 5 em breve Em processo de certificação
  9. Globalcode – Open4education Sensores (hw/sensors)   Interface padrão para acesso

    a famílias de sensores mais comuns Acelerômetros, magnetômetros, sensores de cor, etc Algoritmos comuns (em progresso)   Under heavy development…
  10. Globalcode – Open4education Filesystems nffs ou Newtron Flash File System,

    foi desenvolvido especialmente para o mynewt Objetivos eram: utilização minimizada de RAM e confiabilidade Roda tanto na flash da MCU como em chips de Flash externa (SPI) Também suporta FAT em MMC (teoricamente em outros dispositivos também…)   FCB (Buffer Circular em Flash)
  11. Globalcode – Open4education newt Ferramenta usada para gerenciamento de pacotes,

    build, test, run, debug...   Desenvolvida em go, especificamente para gerenciamento do Mynewt   (alternativa a Makefiles, etc)   Configurada no bsp.yml   Cada pacote pode estar em um repositório diferente (estilo pip em Python, npm/yarn no Node, etc)
  12. Globalcode – Open4education Pacotes – Estrutura (1/3) $ tree sys/console/full

    sys/console/full ├── include │ └── console │ ├── console.h │ ├── prompt.h │ └── ticks.h ├── pkg.yml ├── src │ ├── console.c │ ├── console_fmt.c │ ├── console_priv.h │ ├── rtt_console.c │ ├── ticks.c │ └── uart_console.c └── syscfg.yml Metadados do pacote
  13. Globalcode – Open4education Pacotes – Estrutura (2/3) $ cat sys/console/full/pkg.yml

    pkg.name: sys/console/full pkg.description: Text-based IO interface. pkg.author: "Apache Mynewt <[email protected]>" pkg.homepage: "http://mynewt.apache.org/" pkg.keywords: pkg.deps: - hw/hal - kernel/os pkg.deps.CONSOLE_UART: - hw/drivers/uart pkg.deps.CONSOLE_RTT: - hw/drivers/rtt pkg.apis: console pkg.init: console_pkg_init: 20
  14. Globalcode – Open4education Pacotes – Estrutura (3/3) $ cat sys/console/full/syscfg.yml

    syscfg.defs: CONSOLE_UART: description: 'Set console output to UART' value: 1 CONSOLE_RTT: description: 'Set console output to RTT' value: 0 CONSOLE_INPUT: description: 'Enable console input' value: 1 CONSOLE_TICKS: description: 'Print OS Ticks' value: 1 CONSOLE_ECHO: description: 'Default console echo' value: 1 ...
  15. Globalcode – Open4education Pacotes especiais   bsp.yml : configuração de

    um BSP (arquitetura, scripts, linkerscript, flash_map)   compiler.yml : configurações de compilação para uma arquitetura (toolchain, flags, etc)   target.yml : configuração de um fw (aplicação, BSP, syscfgs)   repository.yml : raiz de qualquer repositório (versões)
  16. Globalcode – Open4education Criando meu primeiro app (1/3) $ newt

    new hello Downloading project skeleton from apache/incubator-mynewt- blinky... Installing skeleton in hello... Project hello successfully created. $ cd hello $ newt install -v [apache-mynewt-core]: Downloading repository description Download successful! Downloading repository incubator-mynewt-core (branch: master; commit: mynewt_1_0_0_tag) at https://github.com/apache/incubator- mynewt-core.git ...
  17. Globalcode – Open4education Criando meu primeiro app (2/3) $ newt

    build my_blinky_sim Building target targets/my_blinky_sim Compiling ... Archiving ... Linking ... Target successfully built: targets/my_blinky_sim $ cd hello $ newt install -v [apache-mynewt-core]: Downloading repository description Download successful! Downloading repository incubator-mynewt-core (branch: master; commit: mynewt_1_0_0_tag) at https://github.com/apache/incubator- mynewt-core.git ...
  18. Globalcode – Open4education Criando meu primeiro app (3/3) $ ./bin/targets/my_blinky_sim/app/apps/blinky/blinky.elf

    uart0 at /dev/ttys005 hal_gpio set pin 1 to 0 $ newt run my_blinky_sim ... (gdb) c uart0 at /dev/ttys005 hal_gpio set pin 1 to 0   No Linux ou macOS com binário assinado também é possível simplesmente (abre o gdb):
  19. Globalcode – Open4education Rodando numa placa  Pô, mas qual é

    a graça de rodar um app simulado???  Quero ver LED piscar!
  20. Globalcode – Open4education Criando meu segundo app (1/3) $ newt

    create target meu_app Target targets/meu_app successfully created... $ newt build meu_app Building target targets/meu_app Error: Target does not specify a BSP package (target.bsp) $ newt target set meu_app bsp=bsp=hw/bsp/frdm-k64f Target targets/meu_app successfully set target.bsp to hw/bsp/frdm- k64f   Dentro de um diretório clone do mynewt…
  21. Globalcode – Open4education Criando meu segundo app (2/3) $ newt

    build meu_app Building target targets/meu_app Error: Target does not specify an app package (target.app) $ newt target set meu_app app=apps/slinky Target targets/meu_app successfully set target.app to apps/slinky $ newt build meu_app Building target targets/meu_app Compiling ... Archiving ... Linking ...bin/targets/meu_app/app/apps/slinky/slinky.elf Target successfully built: targets/meu_app
  22. Globalcode – Open4education Criando meu segundo app (3/3) $ newt

    load meu_app Loading app image into slot 1 Error: Cannot find file bin/targets/meu_app/app/apps/slinky/ slinky.img $ newt create-image meu_app 1.0.1000 Archiving ... Linking ...bin/targets/meu_app/app/apps/slinky/slinky.elf App image succesfully generated: ... slinky.img $ newt load meu_app Loading app image into slot 1 $
  23. Globalcode – Open4education Carregando e executando $ newt debug meu_app

    ... 0x08048b7c in __WFI () at hw/cmsis-core/src/ext/cmsis_gcc.h:385 385 __ASM volatile ("wfi"); (gdb)
  24. Globalcode – Open4education Newtmgr Protocolo para gerenciamento de imagens, captura

    de logs, estatísticas, config Roda em cima de serial, BLE, OCI?   Simples de adicionar a qualquer aplicação!   A ferramenta “newtmgr” também foi desenvolvida em go
  25. Globalcode – Open4education Newtmgr $ newtmgr --conn k64f image list

    Images: slot=0 version: 1.0.1000 bootable: true flags: active confirmed hash: 119889aa8d6e481d0df05b05135cbb577e4eb51ca83eb14da6d2d0e287990d5d Split status: N/A $ newtmgr --conn k64f log list [reboot_log log] Return Code = 0 $ newtmgr --conn k64f stat [stat gpio_toggle] Return Code = 0
  26. Globalcode – Open4education Bootloader / mcuboot Atualizações seguras   Hashing

    da imagem Validação de imagens assinadas Usa 2 slots de imagem, hot swapping (razoavelmente resistente à erros!), ou kernel + app
  27. Globalcode – Open4education Bootloader $ newtmgr --conn k64f image upload

    k64f_slinky_333.img ... Done $ newtmgr --conn k64f image list Images: slot=0 version: 1.0.1000 bootable: true flags: active confirmed hash: 119889aa8d6e481d0df05b05135cbb577e4eb51ca83eb14da6d2d0e287990d5d slot=1 version: 1.0.333 bootable: true flags: hash: c47a1e6c4aba746c0c8bee87dee94438e7b632d7ec5651f4488966c566a31ad1 Split status: N/A
  28. Globalcode – Open4education Thanks / Dúvidas? Slides: https://speakerdeck.com/utzig/apache-mynewt-tdc2017 https://mynewt.apache.org Twitter:

    @apache_mynewt Mailing List: [email protected] Freenode: #mynewt https://github.com/apache/incubator-mynewt-core https://github.com/apache/incubator-mynewt-newt https://github.com/runtimeco/mcuboot