..
Copyright (C) 2023 Jeremie Salvi.
Permission is granted to copy, distribute and/or modify this document
under the terms of the GNU Free Documentation License, Version 1.3
or any later version published by the Free Software Foundation;
with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts.
A copy of the license is included in the section entitled "GNU
Free Documentation License".
Installation de l'environnement sous ArchLinux
==============================================
Introduction
------------
Tout d'abord je tiens à vous rassurer, cela doit fonctionner sur la majorité des distributions.
Je vais utiliser vscodium (fork de visual studio code sans la télémétrie microsoft),
un framework basé sur electron, donc compatible multi OS et multi distributions.
L'emulateur basé sur QEMU sera compilé à la main, donc ça devrait passer sur n'importe quel linux 😊.
.. warning:: Je suis passé en root pour ne pas m'encombrer avec ``sudo``, pensez y si nécessaire
Pour plus d'infos en général, allez faire un tour sur `La documentation officielle de l'esp 32 `_
Installation de vscodium
------------------------
Vscodium n'est pas disponible dans les paquets officiels ArchLinux, il faut donc aller sur les ArchLinux User Repositories (AUR.)
`Dépot AUR des binaires vscodium `_
.. code-block:: bash
:linenos:
:caption: installation de vscodium
cd /opt
git clone https://aur.archlinux.org/vscodium-bin.git
cd vscodium-bin/
makepkg
pacman -U vscodium-bin-1.72.2.22289-1-x86_64.pkg.tar.zst
.. warning:: Si vous êtes en root pour programmer, il faut utiliser les arguments suivants pour
lancer vscodium : ``codium --no-sandbox --user-data-dir ~/.config/vscodium``
Pour le confort de développement, nous allons installer une extension pour améliorer
l'autocompletion en C/C++. Elle n'est pas disponible sur le marketplace vscodium, il faut l'installer
manuellement. On la télécharge `ici `_.
On l'installe depuis le menu des extensions comme ci dessous.
.. image:: ../images/esp32/ms_cpp_extension.png
:width: 400
Nous allons aussi utiliser l'extension native debug pour l'intégration du debugeur.
Elle se trouve dans le store. Pour l'utilistation, on verra ça dans la partie
`création d'un environnement vscodium `_.
.. image:: ../images/esp32/native_debug_extension.png
:width: 400
Installation des prérequis pour l'esp-idf (Espressif IoT Development Framework)
-------------------------------------------------------------------------------
La commande est directement fournie dans la documentation, il suffit de la copier coller :
.. code-block:: bash
pacman -S --needed gcc git make flex bison gperf python cmake ninja dfu-util ccache libusb
Installation et configuration de l'esp-idf
------------------------------------------
Dans un premier temps, on récupère les dépots :
.. code-block:: bash
:linenos:
mkdir -p /opt/esp
cd /opt/esp
git clone --recursive https://github.com/espressif/esp-idf.git
Il faut ensuite installer les outils. Par defaut ils sont installés dans ``$HOME/.espressif``.
On peut changer cet emplacement grâce à la variable d'environnement ``IDF_TOOLS_PATH``.
.. code-block:: bash
:linenos:
export IDF_TOOLS_PATH=/opt/esp/esp-idf/.espressif
cd esp-idf
./install.sh esp32
L'environnement utilise un paquets d'outils, il est dur de mémoriser tout
les chemins et les variables d'environnement. Heureusement on nous fournit aussi un sctipt
qui rend tout ça accessible depuis la console. Pour ça il faut le charger :
.. code-block:: bash
. /opt/esp/esp-idf/export.sh
Comme il faut l'appeller dans chaque nouveau terminal, on
se créer un alias pour faciliter l'accès :
.. code-block:: bash
alias esp_idf_import=". /opt/esp/esp-idf/export.sh"
On colle cette ligne dans notre .bashrc ou notre .profile. Pour vérifier qu'on
a bien tout importé, on tappe la commande env, et on devrait avoir les infos
suivantes :
.. code-block:: bash
:linenos:
env
>> ESP_IDF_VERSION="5.1"
>> ESP_ROM_ELF_DIR="/opt/esp/esp-idf/.espressif/tools/esp-rom-elfs/20220823/"
>> IDF_DEACTIVATE_FILE_PATH="/tmp/tmpxj9n6nndidf_46523"
>> IDF_PATH="/opt/esp/esp-idf"
>> IDF_PYTHON_ENV_PATH="/opt/esp/esp-idf/.espressif/python_env/idf5.1_py3.10_env"
>> IDF_TOOLS_EXPORT_CMD="/opt/esp/esp-idf/export.sh"
>> IDF_TOOLS_INSTALL_CMD="/opt/esp/esp-idf/install.sh"
>> IDF_TOOLS_PATH="/opt/esp/esp-idf/.espressif"
>> OPENOCD_SCRIPTS="/opt/esp/esp-idf/.espressif/tools/openocd-esp32/v0.11.0-esp32-20221026/openocd-esp32/share/openocd/scripts"
>> PATH="/opt/esp/esp-idf/components/esptool_py/esptool:/opt/esp/esp-idf/components/espcoredump:/opt/esp/esp-idf/components/partition_table:/opt/esp/esp-idf/components/app_update:/opt/esp/esp-idf/.espressif/tools/xtensa-esp-elf-gdb/12.1_20221002/xtensa-esp-elf-gdb/bin:/opt/esp/esp-idf/.espressif/tools/xtensa-esp32-elf/esp-2022r1-11.2.0/xtensa-esp32-elf/bin:/opt/esp/esp-idf/.espressif/tools/esp32ulp-elf/2.35_20220830/esp32ulp-elf/bin:/opt/esp/esp-idf/.espressif/tools/openocd-esp32/v0.11.0-esp32-20221026/openocd-esp32/bin:/opt/esp/esp-idf/.espressif/python_env/idf5.1_py3.10_env/bin:/opt/esp/esp-idf/tools:/usr/local/sbin:/usr/local/bin:/usr/bin"
Si l'on à pas les chemins ``/opt/esp/esp-idf`` dans le path et les variables d'environnement ``IDF_``, les outils fournis
dans l'ESP-IDF ne fonctionneront tout simplement pas.
Compilation de qemu-system-xtensa patché pour les esp32
-------------------------------------------------------
Espressif, l'entreprise qui concoit les ESP32, nous fournit un fork de QEMU modifié pour emmuler celui ci.
On le trouve à l'addresse suivante : `GitHub du fork QEMU `_.
Toute la procédure est expliquée ici : `Wiki du dépot `_.
Je ne vais pas tout réexpliquer ici, ce qu'il faut savoir c'est que nous ne voulons pas
recompiler tout qemu, juste le binaire qemu-system-xtensa modifié pour esp32. Je vais donc
refaire la compilation en désactivant un maximum de fonctionnalités inutiles. On trouve la
liste des fonctionnalités dans le fichier ``configure`` du dépot.
.. code-block:: bash
:linenos:
:caption: compilation de QEMU pour esp32
#!/bin/bash
cd /opt
git clone https://github.com/espressif/qemu.git
cd qemu
./configure --target-list=xtensa-softmmu \
--enable-gcrypt \
--enable-debug --enable-sanitizers \
--disable-strip --disable-user \
--disable-capstone --disable-vnc \
--disable-sdl --disable-gtk \
--disable-opengl --disable-vfio-user-server
ninja -C build