ESPシリーズ雑談(三):esp-idfツールチェーンのよくある問題のまとめ

7666 ワード

このブログは、esp-idfに関する問題に遭遇した時間に応じて不定期に更新されます.

1.esp-idfバージョン&環境変数構成の問題


1.1 esp-idfバージョンは8.2.0から5.2.0に切り替える


今日、esp-iot-solutionをコンパイルしたとき、次のような問題が発生しました.
WARNING: Compiler version is not supported: 8.2.0
Expected to see version(s): 5.2.0
Please check ESP-IDF setup instructions and update the toolchain, or proceed at your own risk
esp-iot-solution/submodule/esp-idf/make/component_wrapper.mk:285: recipe for target 'asio/asio/src/asio.o' failed
make[1]: *** [asio/asio/src/asio.o] Error 1
esp-iot-solution/submodule/esp-idf//make/project.mk:530: recipe for target 'component-asio-build' failed
make: *** [component-asio-build] Error 2

その中の核心の文はWARNING: Compiler version is not supported: 8.2.0 Expected to see version(s): 5.2.0です.ここでは、私のesp-idfが現在使用しているコンパイルツールチェーンのバージョンが高すぎて、より低いバージョンに切り替える必要があることを説明します.そのため、このesp-idfに対応するツールチェーンのバージョンをダウンロードし、環境変数の構成を行う必要があります.Linux環境の具体的な手順はlinuxのツールチェーンの設定を参照してください.
添付:その他のシステムはwindowsの下のツールチェーンの設定とmacosの下のツールチェーンの設定を参照してください.
以下は、チュートリアルで不明な点の補足です.
  • 現在のesp-idfツールチェーンのバージョンコマンド:xtensa-esp32-elf-gcc -vをクエリーします.
  • 対応するesp-idfツールチェーンをダウンロードした後、環境変数を構成する命令:export PATH="$HOME/esp/xtensa-esp-elf/bin:$PATH"、ここではパスを自分のパソコンのツールチェーンに置くパスに変更する必要があります.ここの構成は使い捨てであることに注意してください.環境変数を永続的に構成したい場合は、3、4点を見てください.
  • /etc/profileファイルを変更します.この方法では、すべてのユーザーのshellがこれらの環境変数を使用する権利があり、システムにセキュリティの問題をもたらす可能性があります.マルチユーザとしてのみ開発する場合、この方法を推奨する:
    sudo vim /etc/profile 
    export PATH="$HOME/esp/xtensa-esp-elf/bin:$PATH" 
    source  /etc/profile
    
  • 修正.bashrcファイルは、これらの環境変数を使用する権限をユーザーレベルに制御するより安全です.
    sudo vim /root/.bashrc 
    export PATH="$HOME/esp/xtensa-esp-elf/bin:$PATH" 
    source  /root/.bashrc
    
    の2つの方法は、一般的にシステムを再ログアウトする必要があります.また、sourceコマンドを使用して、変更された構成をすぐに有効にすることもできます.
  • 現在のPATH環境変数の命令:echo $PATHを表示します.

  • 1.2経路エラーrecipe for target'/home/esp/hello_world/build/bootloader/bootloader.bin' failed


    以下はlogエラーログです.
    Toolchain path: /home/esp/xtensa-esp32-elf/bin/xtensa-esp32-elf-gcc
    Toolchain version: crosstool-ng-1.22.0-80-g6c4433a
    Compiler version: 5.2.0
    make[1]: *** No rule to make target '/home/esp/esp-idf/components/esptool_py/esptool/esptool.py', needed by '/home/esp/hello_world/build/bootloader/bootloader.bin'.  Stop.
    /home/esp/esp-idf/components/bootloader/Makefile.projbuild:41: recipe for target '/home/esp/hello_world/build/bootloader/bootloader.bin' failed
    make: *** [/home/esp/hello_world/build/bootloader/bootloader.bin] Error 2
    

    解決策:esp-idfディレクトリの下でgit submodule update命令を実行してみます.それでもだめな場合は、プロジェクトディレクトリの下で以前のmakeに関する内容をクリアする必要があります.以下のようにします.
    make clean   idf.py fullclean
    rm -rf build/
    rm -rf sdkconfig sdkconfig.old
    

    そして再コンパイル
    注意:サブモジュールなどの不確定な要因がある場合は、git submodule update --init --recursive命令を使用することをお勧めします.

    1.3 toolsディレクトリのファイルエラー:`No rule to make target'/home/esp/esp-idf/tools/kconfig/conf-idf'


    以下はlogエラーログです.
    No rule to make target '/home/esp/esp-idf/tools/kconfig/conf-idf', 
    needed by '/home/esp/esp-idf/examples/wifi/getting_started/station/build/include/config/auto.conf'.  Stop.
    

    解決策:まず、プロジェクトに対応するディレクトリの下に自分がいることを確認し、環境変数が構成されていることを確認します.まだだめなら.するとtoolsディレクトリの下のすべてのファイルを削除し、toolsディレクトリの下のファイルを初期状態に復元します.対応命令は次のとおりです.
    cd ~/esp/esp-idf/
    rm -rf tools/
    git status
    git stash
    git status
    

    このうち2回のgit statusは主に文書の変動過程を容易に観察するためである.上記コマンドセットが完了した後にIDF_を確認するPATHとコンパイルチェーンパスが正しく構成されているか.その後、makeを正常に使用してコンパイル・書き込みを行うことができます.

    1.4 fatal error: curses.h: No such file or directory


    解決策:この端末の下にsudo apt-get install libncurses5-devを入力すればよい.

    2.esp-idfファームウェアコンパイルの問題


    2.1コンパイル時にcc 1:warnings being treated as errorsが現れる


    コンパイル時に次の情報が表示されます.
    cc1: some warnings being treated as errors
    ninja: build stopped: subcommand failed.
    ninja failed with exit code 1
    

    解決方法:cc1: some warnings being treated as errorsの場合、ディレクトリの下にあるMakefileファイルを開き、そのファイルの中の-Werrorを注釈すればよい.ディレクトリの下にこのフラグが見つからない場合は、上の階層のディレクトリの下に探してもよいし、最上位のディレクトリMakefileで修正してもよい.
    注意:ここのwarning問題を自分で解決することをお勧めします.そうしないと、コンパイルは通過しますが、他の問題が発生する可能性があります.

    3.esp-idfファームウェアの書き込み問題


    3.1 esp-idf書き込みするファームウェアが大きすぎます


    問題のログは次のとおりです.
    E (605) esp_image: Image length 1184944 doesn't fit in partition length 1048576
    E (613) boot: Factory app partition is not bootable
    E (618) boot: No bootable app partitions in the partition table
    

    解決方法:
    1、$IDF_PATH/components/partition_table/partitions_singleapp.csvを以下のように修正する.
    # Name,   Type, SubType, Offset,  Size, Flags
    # Note: if you change the phy_init or app partition offset, make sure to change the offset in Kconfig.projbuild
    nvs,      data, nvs,     0x9000,  0x6000,
    phy_init, data, phy,     0xf000,  0x1000,
    factory,  app,  factory, 0x10000, 1M,
    
    factory, app, factory, 0x10000, 1M,factory, app, factory, 0x10000, 2M,に変更
    2、make menuconfigはmenuconfigに配置され、Serial flasher config --> Flash sizeを4 Mに変更し、ファームウェアを再焼成すればよい.
    注意:Flash sizeのサイズは、自分の状況に応じて柔軟に調整してください.一般に2 Mまたは4 Mである.

    3.2 esp-idfファームウェアの書き込み時にシリアルポート権限が足りないことを示す(linux下)


    問題の説明:最後のファームウェアの書き込み中にエラーが発生しました:シリアルポート権限が不足しています.
    解決方法:Linuxにdialoutにユーザーを追加します.
    具体的には、現在登録されているユーザーは、USBを介してシリアルポートの読み書き操作を行うことができるはずです.多くのLinuxバージョンでは、次のコマンドを使用してdialoutグループにユーザーを追加して、読み取りと書き込みの許可を得ることができます.
    sudo usermod -a -G dialout $USER