[TUTO][Zephyr] Ajout tutorial debug #74
BIN
src/images/posts/zephyr/capture-console-blinky.png
Normal file
BIN
src/images/posts/zephyr/capture-console-blinky.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 40 KiB |
BIN
src/images/posts/zephyr/capture-cortex-debug.png
Normal file
BIN
src/images/posts/zephyr/capture-cortex-debug.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 143 KiB |
BIN
src/images/posts/zephyr/capture-debug-main.png
Normal file
BIN
src/images/posts/zephyr/capture-debug-main.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 122 KiB |
BIN
src/images/posts/zephyr/capture-stm32-uart.jpg
Normal file
BIN
src/images/posts/zephyr/capture-stm32-uart.jpg
Normal file
Binary file not shown.
After Width: | Height: | Size: 166 KiB |
BIN
src/images/posts/zephyr/capture-stm32f4-serialconsole.png
Normal file
BIN
src/images/posts/zephyr/capture-stm32f4-serialconsole.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 64 KiB |
BIN
src/images/posts/zephyr/zephyr-image.jpg
Normal file
BIN
src/images/posts/zephyr/zephyr-image.jpg
Normal file
Binary file not shown.
After Width: | Height: | Size: 5.4 KiB |
138
src/posts/tuto-debug-zephyr.md
Normal file
138
src/posts/tuto-debug-zephyr.md
Normal file
@ -0,0 +1,138 @@
|
|||||||
|
---
|
||||||
|
title: Tutoriel développement embarqué
|
||||||
|
date: '2024-02-02'
|
||||||
|
type: 'news'
|
||||||
|
illustration: '/images/posts/zephyr/zephyr-image.jpg'
|
||||||
|
---
|
||||||
|
|
||||||
|
Dans le cadre des mes missions de développeur embarqué sur plateforme libre depuis plus de 15 ans, j'ai dû mettre en place un certain nombre d'outils. Celui qui revient régulièrement est le debug. Lors de la phase de développement, le debug est indispensable mais nécessite d'avoir les équipements et les outils adaptés. Voici mon retour d'expérience sur ce sujet que je ([Francois Bonningues](/members/francois-bonningues/)) veux partager avec le système d'exploitation [**Zephyr OS**](https://fr.wikipedia.org/wiki/Zephyr_(système_d'exploitation)). Cela comprend les traces sur la console et le debug avec un outil comme **gdb**.
|
||||||
|
|
||||||
|
L'objectif de ce tutorial est de déboguer une application basique d'exemple (**blinky** fourni par Zephyr) qui s'exécute sur une carte d'évaluation **stm32F4** depuis un PC sous linux.
|
||||||
|
|
||||||
|
# Environnement
|
||||||
|
|
||||||
|
## Zephyr OS
|
||||||
|
L'installation de l'environnement est très bien documenté sur le site officiel:
|
||||||
|
|
||||||
|
[https://docs.zephyrproject.org/latest/develop/getting_started/index.html](https://docs.zephyrproject.org/latest/develop/getting_started/index.html)
|
||||||
|
|
||||||
|
## Matériels utilisés
|
||||||
|
Voici le matériel nécessaire pour cet exemple :
|
||||||
|
* un PC sous Debian 12 "Bookworm"
|
||||||
|
* le kit d'évaluation stm32F407 [https://www.st.com/en/evaluation-tools/stm32f4discovery.html](https://www.st.com/en/evaluation-tools/stm32f4discovery.html)
|
||||||
|
* un module USB TTL, par exemple [https://www.amazon.fr/dp/B0BTB2TZW2/ref=pe_27091421_487030221_TE_SCE_3p_dp_i1](https://www.amazon.fr/dp/B0BTB2TZW2/ref=pe_27091421_487030221_TE_SCE_3p_dp_i1)
|
||||||
|
|
||||||
|
|
||||||
|
## Compilation, flashage
|
||||||
|
|
||||||
|
Une fois l'environnnement installé sur le PC (ici dans mon répertoire **home**) et après y avoir branché la carte d'évaluation, il suffit de taper ces commandes:
|
||||||
|
```
|
||||||
|
cd ~/zephyrproject/zephyr
|
||||||
|
source ~/zephyrproject/.venv/bin/activate
|
||||||
|
west build -p always -b stm32f4_disco samples/basic/blinky
|
||||||
|
west flash
|
||||||
|
```
|
||||||
|
|
||||||
|
# Débogage de l'application embarquée
|
||||||
|
|
||||||
|
## Traces sur la console série
|
||||||
|
|
||||||
|
Les traces de l'application peuvent être observées via la liaison série.
|
||||||
|
Les broches PA2, PA3 et GND de la carte d'évaluation doivent être reliées à un adaptateur USB TTL comme indiqué ci-dessous.
|
||||||
|
|
||||||
|
<center>
|
||||||
|
<img src="/images/posts/zephyr/capture-stm32f4-serialconsole.png">
|
||||||
|
</center>
|
||||||
|
|
||||||
|
<br><br>
|
||||||
|
L'illustration ci-dessous montre les 3 fils connectés utilisés par la liaison série:
|
||||||
|
|
||||||
|
<center>
|
||||||
|
<img src="/images/posts/zephyr/capture-stm32-uart.jpg" style="border:1px solid black;" >
|
||||||
|
</center>
|
||||||
|
|
||||||
|
<br><br>
|
||||||
|
Ensuite lancer l'outil **minicom** (ou équivalent) sur **/dev/ttyUSB0**`*`.
|
||||||
|
|
||||||
|
`*` Remplacer le x de /dev/ttyUSB\<x\> par celui qui correspond à votre configuration. Pour le savoir, exécuter **sudo dmesg**.
|
||||||
|
A noter qu'il est sans doute nécessaire d'ajouter l'utilisateur au groupe **dialout** (sous debian) pour avoir accès à la console sans être root.
|
||||||
|
|
||||||
|
```
|
||||||
|
minicom -D /dev/ttyUSB0
|
||||||
|
```
|
||||||
|
<br><br>
|
||||||
|
Les traces s'affichent alors:
|
||||||
|
|
||||||
|
<center>
|
||||||
|
<img src="/images/posts/zephyr/capture-console-blinky.png" style="border:1px solid black;" >
|
||||||
|
</center>
|
||||||
|
|
||||||
|
<br><br>
|
||||||
|
## Debug en ligne de commande
|
||||||
|
|
||||||
|
Il est possible d'aller plus loin dans le debug notamment en exécutant le programme en pas à pas.
|
||||||
|
|
||||||
|
Il faut alors enlever les optimisations du compilateur. Pour cela, dans le fichier prj.conf (samples/basic/blinky/prj.conf), ajouter la ligne suivante:
|
||||||
|
```
|
||||||
|
CONFIG_NO_OPTIMIZATIONS=y
|
||||||
|
```
|
||||||
|
|
||||||
|
Ensuite depuis votre terminal, il suffit d'exécuter la commande:
|
||||||
|
```
|
||||||
|
west debug
|
||||||
|
```
|
||||||
|
<br><br>
|
||||||
|
## Debug sous VisualStudio Code
|
||||||
|
|
||||||
|
Le debug peut être exécuté depuis l'IDE VisualStudio Code.
|
||||||
|
|
||||||
|
<b> Exécuter visualStudio Code
|
||||||
|
```
|
||||||
|
(.venv) francois@debian-acer-fb:~/zephyrproject/zephyr$ code &
|
||||||
|
```
|
||||||
|
<br><br>
|
||||||
|
<b> Ajouter l'extension Cortex-Debug
|
||||||
|
|
||||||
|
Installer l'extension **Cortex-Debug**.
|
||||||
|
|
||||||
|
<center>
|
||||||
|
<img src="/images/posts/zephyr/capture-cortex-debug.png" style="border:1px solid black;" >
|
||||||
|
</center>
|
||||||
|
|
||||||
|
<br><br>
|
||||||
|
<b> Définir la configuration de Debug
|
||||||
|
|
||||||
|
Cela peut être fait via le menu **View\Commande palette Ctrl-shift-P** et en tapant **Debug: Add configuration**
|
||||||
|
|
||||||
|
Editer le fichier **launch.json**. En voici un exemple. Les chemins sont à modifier pour correspondre à votre environnement:
|
||||||
|
|
||||||
|
```
|
||||||
|
{
|
||||||
|
"version": "0.2.0",
|
||||||
|
"configurations": [
|
||||||
|
{
|
||||||
|
"type": "cortex-debug",
|
||||||
|
"request": "launch",
|
||||||
|
"servertype": "openocd",
|
||||||
|
"serverpath": "${env:HOME}/zephyr-sdk-0.16.4/sysroots/x86_64-pokysdk-linux/usr/bin/openocd",
|
||||||
|
"cwd": "${workspaceRoot}",
|
||||||
|
"executable": "./build/zephyr/zephyr.elf",
|
||||||
|
"gdbPath": "${env:HOME}/zephyr-sdk-0.16.4/arm-zephyr-eabi/bin/arm-zephyr-eabi-gdb",
|
||||||
|
"name": "Debug",
|
||||||
|
"device": "STM32F407",
|
||||||
|
"configFiles": [
|
||||||
|
"${env:HOME}/zephyrproject/zephyr/boards/arm/stm32f4_disco/support/openocd.cfg"
|
||||||
|
],
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
<br><br>
|
||||||
|
<b> Exécution en pas à pas
|
||||||
|
|
||||||
|
Placer un point d'arrêt et exécuter le programme via le menu **Run\Start Debugging** (touche F5). Le debugger s'exécute et s'arrête sur le point d'arrêt comme illustré dans l'exemple ci-dessous:
|
||||||
|
|
||||||
|
<center>
|
||||||
|
<img src="/images/posts/zephyr/capture-debug-main.png" style="border:1px solid black;" >
|
||||||
|
</center>
|
Loading…
Reference in New Issue
Block a user