.. 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