Bases de Zephyr OS

Qu’est-ce que Zephyr OS ?

Zephyr est un RTOS (système d’exploitation temps réel) open-source et modulaire, conçu pour les appareils à ressources limitées. Développé sous la Linux Foundation, il supporte de nombreuses architectures : ARM, x86, RISC-V, et bien d’autres.

Fonctionnalités clés

  • Empreinte mémoire réduite : conçu pour les appareils avec peu de mémoire
  • Support multi-architecture : ARM Cortex-M, RISC-V, x86, ARC, Xtensa, et plus
  • Orienté sécurité : support natif de TrustZone, secure boot et bibliothèques cryptographiques
  • Connectivité : support natif Bluetooth LE, Thread, Wi-Fi, LoRaWAN et autres protocoles
  • Temps réel : noyau déterministe avec algorithmes de scheduling configurables
  • Modulaire : n’inclure que ce dont vous avez besoin dans votre build
  • Communauté active : soutenu par de grands acteurs (Intel, Nordic, NXP, STMicroelectronics, etc.)

Procédure d’installation

Fedora / RHEL

La documentation officielle de Zephyr ne fournit des instructions que pour Ubuntu. Voici les dépendances équivalentes pour Fedora, RHEL, CentOS, Rocky Linux et autres distributions basées sur DNF :

sudo dnf install git cmake ninja-build gperf ccache dfu-util dtc wget \
  python3-devel python3-tkinter xz file make gcc gcc-c++ \
  glibc-devel.i686 libstdc++-devel.i686 SDL2-devel file-libs libusb1-devel libevdev-devel

Installer West (méta-outil Zephyr)

West est l’outil en ligne de commande de Zephyr pour gérer les dépôts et compiler les applications :

pip install west

Récupérer le code source de Zephyr

west init ~/zephyrproject
cd ~/zephyrproject
west update

Initialiser West depuis un dépôt Zephyr personnalisé

Si vous avez un fork Zephyr ou un projet basé sur Zephyr avec son propre manifeste west.yml, vous pouvez initialiser West directement depuis ce dépôt local :

# Cloner votre dépôt Zephyr personnalisé
git clone https://github.com/your-org/your-custom-zephyr.git
cd your-custom-zephyr

# Initialiser West en utilisant le manifeste local
west init -l .

# Récupérer toutes les dépendances définies dans west.yml
west update

Le flag -l (ou --local) indique à West que le fichier manifeste se trouve dans le répertoire courant plutôt que d’être récupéré depuis un dépôt distant.

Installer le SDK Zephyr

Téléchargez et installez le SDK Zephyr qui inclut les toolchains pour toutes les architectures supportées :

cd ~
wget https://github.com/zephyrproject-rtos/sdk-ng/releases/download/v0.16.8/zephyr-sdk-0.16.8_linux-x86_64.tar.xz
tar xvf zephyr-sdk-0.16.8_linux-x86_64.tar.xz
cd zephyr-sdk-0.16.8
./setup.sh

Configurer les variables d’environnement

cd ~/zephyrproject/zephyr
source zephyr-env.sh

Compiler et exécuter localement (simulateur natif)

Pour compiler et exécuter des applications Zephyr sur votre PC sans matériel, utilisez le simulateur natif :

west build -b native_sim samples/hello_world

Autres variantes de board native :

  • native_sim/native/64 : simulateur natif 64 bits

Exécuter l’application :

west build -t run

Pour plus de détails, voir la documentation du simulateur natif.

Suivez le guide officiel d’installation de Zephyr Project pour configurer votre environnement de développement :

Guide de démarrage Zephyr

Board

Carte ST Electronic

STM32CubeProgrammer est l’outil officiel de ST pour programmer les mémoires des MCU STM32 (Flash et RAM). Il permet de lire, écrire et vérifier la mémoire via l’interface de debug (JTAG et SWD) ou le bootloader (UART, USB DFU, I2C, SPI ou CAN). Disponible en GUI et CLI.

Télécharger ici : STM32CubeProgrammer

Installation sur Linux :

unzip ./stm32cubeprg-lin-v2-21-0.zip
./SetupSTM32CubeProgrammer-2.21.0.linux

Suivez ensuite les instructions de l’interface pour terminer l’installation.

Configurez les règles udev pour accéder aux débogueurs ST-Link sans privilèges root :

sudo cp ~/STMicroelectronics/STM32Cube/STM32CubeProgrammer/Drivers/rules/*.rules /etc/udev/rules.d/
sudo udevadm control --reload-rules
sudo usermod -aG dialout $USER

Déconnectez-vous et reconnectez-vous pour que le changement de groupe prenne effet.

Compilez et flashez votre application sur la carte :

west build -b stm32h573i_dk samples/hello_world
west flash

Surveillez la sortie UART :

minicom -D /dev/ttyACM0

Structure du projet

Une application Zephyr requiert la structure suivante :

my_app/
├── CMakeLists.txt
├── prj.conf
├── boards/
│   └── <board_name>.overlay
└── src/
    └── main.c

CMakeLists.txt

Le fichier CMake intègre votre application au système de build Zephyr :

cmake_minimum_required(VERSION 3.20.0)
find_package(Zephyr REQUIRED HINTS $ENV{ZEPHYR_BASE})
project(my_app)
target_sources(app PRIVATE src/main.c)

Kconfig (prj.conf)

Kconfig est le système de configuration de Zephyr, hérité du noyau Linux. Il sert à activer ou désactiver des fonctionnalités, des drivers et des options du noyau à la compilation. La configuration se fait dans prj.conf :

CONFIG_SERIAL=y
CONFIG_UART_INTERRUPT_DRIVEN=y
CONFIG_GPIO=y

Options courantes :

  • CONFIG_SERIAL : activer le driver série
  • CONFIG_GPIO : activer le driver GPIO
  • CONFIG_LOG : activer le sous-système de logging

Pour voir toutes les options disponibles, exécutez west build -t menuconfig.

Overlay Devicetree

Le devicetree décrit la configuration matérielle de la carte. Les overlays (fichiers .overlay) permettent de personnaliser cette configuration sans toucher aux fichiers source de Zephyr.

On crée un fichier boards/<board_name>.overlay pour :

  • Activer/désactiver des périphériques
  • Modifier les assignations de broches
  • Configurer les paramètres des périphériques (baud rate, etc.)

Exemple d’activation de l’USART3 :

&usart3 {
    status = "okay";
    current-speed = <115200>;
};

L’overlay est appliqué automatiquement lorsque le nom de fichier correspond à votre board cible.

Pour vérifier les périphériques disponibles dans le devicetree après un build :

west build -b stm32h573i_dk samples/hello_world
cat build/zephyr/zephyr.dts | grep -A 10 "usart3"

src/main.c

#include <zephyr/kernel.h>

int main(void)
{
    printk("Hello World!\n");
    return 0;
}

Articles associés

Ressources utiles