Formation 
STM32MP257F Cortex-M33 Zephyr OS

Réf : PHYTEC-5286

  • Intitulé : STM32MP257F Cortex-M33 Zephyr OS
  • Durée : 4 jours
  • Sessions : intra-entreprise
  • Adaptation de contenu sur demande

Formation STM32MP257F Cortex-M33 Zephyr OS

Cette formation STM32MP257F Cortex-M33 Zephyr OS est basée sur la version Zephyr Project 4.2.

  • Maîtriser l’installation de l’environnement de développement Zephyr sous STM32CubeIDE
  • Gérer la configuration de build
  • Construire et customiser son image Zephyr RTOS
  • Développer et mettre au point des applications sous Zephyr RTOS
  • Générer ses propres devicetree
  • Ajouter et mettre en œuvre ses propres drivers de périphériques matériels
  • Maîtriser les APIs Système Zephyr
  • Maîtriser la HAL STM32 Zephyr

Les travaux pratiques de la formation STM32MP257F Cortex-M33 Zephyr OS peuvent être réalisés au choix, sur les plateformes matérielles suivantes :

Notre formation STM32MP257F Cortex-M33 Zephyr OS est adaptée aux développeurs en informatique et techniciens dans le domaine de OS Embarqués confrontés aux problèmes de portage d’applications en exploitant pleinement les fonctionnalités de Zephyr, notamment Temps Réel et des capacités de Co-Processing  Arm® Cortex-A35 et Cortex-M33 offertes par les STM32MP25x MPU. . 
Des notions de programmation en langage C sont fortement recommandées.
Selon les souhaits du client, les travaux pratiques pourront être réalisés sous environnement Microsoft Windows ou Linux OS.

Le contenu de la formation STM32MP257F Cortex-M33 Zephyr OS peut être également adapté aux besoins clients, en renforçant certains points techniques de manière à mieux couvrir les attentes des stagiaires à l’issue de ce stage.

Projet Zephyr RTOS

• Présentation de Zephyr OS
• Zephyr Ecosystem
• Architecture modulaire
• Principaux composants

Environnement Zephyr RTOS

• Sources du projet Zephyr
• Zephyr SDK
• Utilitaires West et Ninja
• Cross-Compiler : GCC - CMake
• IDE STM32CubeIDE et Debogger

Solution Co-Processing  Arm® Cortex-A35 et Cortex-M33 sur STM32MP157 MPU

• Présentation de l’architecture co-processeur
• Linux devicetree pour application Co-Processing STM32MP2 
• Chargement automatique du firmware M33 au démarrage de la plateforme
• Chargement dynamique du firmware M33 sous Linux
• Linux RemoteProc support
• Multi-Core Ressources management 

Travaux pratiques

• Installation de l’environnement Zephyr
• Utilisation des l’outil de construction West
• Chargement d’un firmware Zephyr Cortex-M33 via une image OpenSTLinux STM32MP257F

Zephyr Workspace 

• Structure du dossier de projet
       - boards
       - application
       - librairies
       - drivers
• Fichiers de configuration Kconfig du noyau et des subsystems
• Fichiers de configuration de projet
• Fichier de définition de la plateforme cible
       - SoC
       - defconfig
       - devicetree

Modules Zephyr 

• Structure d’un module
• Module externe
• Fichier YAML
• CMakeList d’un module

Travaux pratiques 

• Mise en oeuvre d’un Workspace de développement complet sous STM32CubeIDE
• Mise au point du firmware Cortex-M4 sous STM32CubeIDE et OpenOCD
• Compilation d’un projet complet et déploiement d’une application simple avec linkage de librairie personnelle
   pour une plateforme custom
• Mise en œuvre de la chaîne de débogage STM32MP257F Cortex-M33 et interface OpenOCD avec STM32CubeIDE

Gestion Mémoire sous Zephyr OS

• Présentation : Stack et Heap
• Mémoire dynamique :
       - K_heap et System heap
       - Stubs et Blocks
• Détection de Stack overflow

User Mode / Kernel Mode

• Présentation
• Domaines mémoire et partitionnement
• Appels système : objets du noyau et permissions

Logging support

• Global Kconfig Options
• Logger API

Travaux pratiques

• Mise en oeuvre de Logs applicatifs
• Mise en oeuvre d'un Shell via UART dans son application

DeviceTree

• Syntaxe, propriétés standards et structures de devicetree
• Device Tree Binding et Zephyr platform driver
• Fichiers devicetree et platforme overlay
• Accès aux propriétés du devicetree depuis l’application et structures dt_spec

Principales API Periphériques sous Zephyr

• ADC
• EEPROM
• Flash
• GPIO
• Hardware Information
• I2C
• IPM
• LED
• Pinmux
• PWM
• RTC
• Sensors
• SPI
• UART
• Watchdog

Travaux pratiques

• Définition des ressources matérielles via STM32CubeMX
• Mise en œuvre d'application d’accès aux propriétés du devicetree de la plateforme Cortex-M33
• Mise en œuvre d'application de gestion de Timer sur plateforme Cortex-M33

Threading sous Zephyr RTOS

• Main et Idle Threads
• Création de Threads et notion de Thread Custom Data
• Notions de délais et de Timeout
• Ordonnancement des threads sous Zephyr :
        - Simple linked-list ready queue
        - Red/black tree ready queue
        - Traditional multi-queue ready queue
• Priorités des Threads Zephyr :
        - Tâches coopératives
        - Tâches préemptives
• Memory Pool de Thread
• Framework Machine d’état 

Travaux pratiques

• Mise en oeuvre d’un shell Runtime Statistics
• Mise en oeuvre d’une application multi-thread à machine d’état

Présentation des API multitâche du Noyau Zephyr OS

• Symmetric Multiprocessing et exclusions mutuelles
• Types Atomic
• Spinlock
• Semaphores
• Mutexes
• Condition Variables
• Events
• Timer API
• Watchdog
• Polling API
• Interrupts
       - Handler Thread
       - Workqueue Threads
       - Synchronisation avec ISR

Travaux pratiques

• Mise en oeuvre d'application de gestion d'interruption sur GPIO
• Mise en oeuvre d'application avec tâches périodiques et WatchDog

Inter-Thread Communication

• Data passing
• Message Queues
• Queues (FIFOs & LIFOs)
• Mailboxes
• Pipes
• Stacks
• Zephyr Bus (Zbus)

Travaux pratiques

• Mise en oeuvre d'application « multi-thread Queued » sur messages CAN bus

Mécanismes de communication Inter Processeurs Cortex-M4 / Cortex-A7

• Notions de Domain ID et Ressources partagées
• API Zephyr OpenAMP Cortex-M4

Introduction au développement de pilotes de périphériques sous Linux

• Introduction à la programmation en mode noyau
• Architecture d’un module driver simple
        - Chargement et déchargement de modules Linux
        - Makefile d’un module Linux Kernel
        - Fonctions init et exit
        - Utilisation de Module Parameters
        - Interactions avec le Sysfs et Procfs
• Les pilotes de périphériques de type « character device » simples :
        - Fichiers de type device
        - Numéros Majeur/Mineur
        - Structure de la File Operation d’un « character device »
• Drivers Linux RPMSG

Drivers Linux RPMSG

• Présentation
• Driver subsystem et API
• Architecture Driver Zephyr et fichiers Kconfig
• Implémentation
       - Allocation (Single / multi-instances)
       - Driver Devicetree binding support
       - Niveau de priorité d’initialisation des drivers

Travaux pratiques

• Utilisation du SDK Yocto OpenSTLinux pour la compilation d’un driver Linux externe/propriétaire
• Échanges de données entre firmware Cortex-M4 et application Cortex-A7 Linux via OpenAMP et RPMSG sur pour
   kits Phytec phyFLEX-STM32MP2x FPSC, STMicroelectronics STM32MP157F-EV1 ou STM32MP157F-DK2