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-develInstaller 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 westRécupérer le code source de Zephyr
west init ~/zephyrproject
cd ~/zephyrproject
west updateInitialiser 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 updateLe 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.shConfigurer les variables d’environnement
cd ~/zephyrproject/zephyr
source zephyr-env.shCompiler 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_worldAutres variantes de board native :
native_sim/native/64: simulateur natif 64 bits
Exécuter l’application :
west build -t runPour 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 :
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.linuxSuivez 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 $USERDé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 flashSurveillez la sortie UART :
minicom -D /dev/ttyACM0Structure du projet
Une application Zephyr requiert la structure suivante :
my_app/
├── CMakeLists.txt
├── prj.conf
├── boards/
│ └── <board_name>.overlay
└── src/
└── main.cCMakeLists.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=yOptions courantes :
CONFIG_SERIAL: activer le driver sérieCONFIG_GPIO: activer le driver GPIOCONFIG_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;
}