Formation Zephyr OS
Réf : PHYTEC-5185
- Intitulé : Zephyr OS
- Durée : 4 jours
- Sessions : intra-entreprise
- Plate-forme : carte Phytec Reel Board - SoC nRF52
- Adaptation de contenu sur demande
Cette formation est basée sur la version Zephyr Project 4.1, sur la base de la carte Phytec Reel Board - SoC nRF52
• Maîtriser l’installation de l’environnement de développement Zephyr sous Visual Studio Code
• 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 oeuvre ses propres drivers de périphériques matériels
• Maitriser les APIs Système Zephyr
Notre formation Zephyr OS est adaptée aux développeurs en informatique et techniciens dans
le domaine de RTOS confrontés aux problèmes de portage d’applications en exploitant pleinement
ses fonctionnalités, notamment temps réel. 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.
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 VS Code et Debogger
Travaux pratiques
• Installation de l’environnement Zephyr
• Utilisation des l’outil de construction West
• Flashage et exécution d'application sur cible Phytec Reel Board nRF52
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 VS Code
• Utilisation du plugin d’extension nRF Kconfig sous VS Code
• Compilation d’un projet complet et déploiement d’une application simple avec
linkage de librairie personnelle pour une plateforme custom nRF52
• Utilisation du plugin d’extension GNU Linker Map files sous VS Code
• Mise en oeuvre de la chaîne de débogage sous VS Code et DAPLink interface
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
• EC Host Command
• EEPROM
• Flash
• GPIO
• Hardware Information
• I2C
• IPM
• LED
• Pinmux
• PWM
• RTC
• Sensors
• SPI
• UART
• Watchdog
Travaux pratiques
• Utilisation du plugin d’extension nRF DeviceTree sous VS Code
• Mise en oeuvre d'application d’accès aux propriétés du devicetree de la Board
• Mise en oeuvre d'application de gestion de Timer et WatchDog
• Mise en oeuvre d'application de gestion de mesure de Température et Accelero
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 du Zephyr OS
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
Zephyr Storage API
• Non-Volatile Storage (NVS)
• Disk Access
• Support SDHC
• Support SPI Flash
• Support Stream Flash
• Support Little_FS
Travaux pratiques
• Mise en oeuvre d'une Flash SPI partitionnée avec support Little_FS avec Shell de manipulation
du système de fichier sur console UART
Zephyr Device Driver Model
• 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
Power Management Support
• Architecture Zephyr Power Managment
• Device Power Management API
Travaux pratiques
• Mise en oeuvre d'un skeleton de driver out-of-tree, avec support Kconfig, API user syscalls et
gestion de Power Managment