ESPシリーズ雑談(三):esp-idfツールチェーンのよくある問題のまとめ
このブログは、esp-idfに関する問題に遭遇した時間に応じて不定期に更新されます.
1.esp-idfバージョン&環境変数構成の問題
現在のesp-idfツールチェーンのバージョンコマンド: 対応するesp-idfツールチェーンをダウンロードした後、環境変数を構成する命令: 修正.bashrcファイルは、これらの環境変数を使用する権限をユーザーレベルに制御するより安全です. 現在のPATH環境変数の命令:
以下はlogエラーログです.
解決策:
そして再コンパイル
注意:サブモジュールなどの不確定な要因がある場合は、
以下はlogエラーログです.
解決策:まず、プロジェクトに対応するディレクトリの下に自分がいることを確認し、環境変数が構成されていることを確認します.まだだめなら.するとtoolsディレクトリの下のすべてのファイルを削除し、toolsディレクトリの下のファイルを初期状態に復元します.対応命令は次のとおりです.
このうち2回の
解決策:この端末の下に
2.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の下のツールチェーンの設定を参照してください.
以下は、チュートリアルで不明な点の補足です.
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
xtensa-esp32-elf-gcc -v
をクエリーします.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
sudo vim /root/.bashrc
export PATH="$HOME/esp/xtensa-esp-elf/bin:$PATH"
source /root/.bashrc
の2つの方法は、一般的にシステムを再ログアウトする必要があります.また、sourceコマンドを使用して、変更された構成をすぐに有効にすることもできます.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
cc1: some warnings being treated as errors
ninja: build stopped: subcommand failed.
ninja failed with exit code 1
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