M5StickVのファームウェアビルド手順
M5StickVが発売されましたが、まだまだmicroSDと相性があるなど問題が多いため、自分でファームウェアを調整してみたいと思いビルドの手順を調べて入れ替えを行うことができました。忘れそうなので手順化しておきます。
もくじ(Index)M5Stack関連の目次へ戻る
参考ページ
GitHubのドキュメントを参考にしました。
https://github.com/sipeed/MaixPy/blob/master/build.md
注意事項
GitHub上にあるファームウェアは恐らく開発版のためそれ自体正常に動くかどうか不明です。その点を理解したうえで利用しましょう。
/flashの内容が読めなくなる。
ファームウェアを更新すると、元からFlashメモリに入っているデモが動かなくなる場合があります。元に戻したい場合はM5Stack.comからm5stickV_Firmware_0630Fixed.kfpkgをKflash_guiで焼き直すと元に戻ります。(ファームウェアも元に戻ります。)
https://docs.m5stack.com/#/en/quick_start/m5stickv/m5stickv_quick_start
ビルドするOSはLinux
build.mdにはmacOSとWindowsではテストしていないとのことで下記の環境を使用しました。
- Ubuntu 18.04 (amd64)
ビルドは時間かからないので恐らくVMでも可能です。(私はAtomZ8700のPCで行いました。)WSL(Ubuntu18.04)でも動くそうです。
ビルド環境を整える
ホームディレクトリ上で作業すると仮定して記述します。(GitHubのフォルダは~/MaixPy)
依存パッケージのインストール
下記のコマンドを実行してビルドに必要なパッケージをインストールします。
sudo apt update
sudo apt install git python3 python3-pip build-essential cmake
gitからcloneする
ソースコードをgitからcloneしサブモジュールも取得します。
cd ~
git clone https://github.com/sipeed/MaixPy.git
cd ./MaixPy
git submodule update --init --recursive
Pythonライブラリのインストール
pip3を実行して依存ライブラリをインストールします。requirements.txtは./MaixPyにあります。
pip3 install -r requirements.txt
toolchainのインストール
https://github.com/kendryte/kendryte-gnu-toolchain/releasesからダウンロードして/optフォルダに解凍します。
sudo mkdir /opt
wget http://dl.cdn.sipeed.com/kendryte-toolchain-ubuntu-amd64-8.2.0-20190409.tar.xz
cp ./kendryte-toolchain-ubuntu-amd64-8.2.0-20190409.tar.xz /opt
cd /opt
sudo tar -xvf kendryte-toolchain-ubuntu-amd64-8.2.0-20190409.tar.xz
プロジェクトの設定
M5StickV用のファームウェアを作成するには~/MaixPy/projects/maixpy_m5stickv で作業して下記のようにコマンドを実行してビルドの設定をします。
cd ~/MaixPy/projects/maixpy_m5stickv
python3 project.py --toolchain /opt/kendryte-toolchain/bin --toolchain-prefix riscv64-unknown-elf- config
python3 project.py clean_conf
細かいビルドオプション
まだ、詳細を確認してはいないのですが、下記のコマンドを実行することにより、ボードの設定等を変更できるようです。
python3 project.py menuconfig
実行すると下記のような画面が出るのでビルド時のパラメータを変更したりできます。セーブして終わるときは「Q」を押します。
【UnitVのみ】ws2812のモジュール
UnitVが発売されましたが、UnitVはNeoPixelを使用しておりws2812のモジュールが無いファームウェアでは動作しません。その場合は下記の2か所のビルドオプションを変更してからビルドすると使えるようになります。
ビルド
設定が終わったらビルドします。
python3 project.py build
バイナリが生成されるフォルダ
ビルドが完了すると./buildにmaixpy.binというファイルが作成されます。後はこれをM5StickVに書き込むだけです。
書き込む手順は恐らくこの記事を読む方は知っていると思うので省略します。(kflash_guiでも可能)
二回目以降のビルド手順
一度ビルドした後は、ツール等のセットアップは不要ですが、プロジェクトのCONFIGは上書きされるので再度menuconfigする必要があります。
git pull
サブモジュールも更新されている場合があるので下記のようにpullしたあとにsubmodule updateも実行します。
cd ~/MaixPy
git pull
git submodule update --init --recursive
プロジェクトの設定
下記のように再度設定を行います。
cd ~/MaixPy/projects/maixpy_m5stickv
python3 project.py --toolchain /opt/kendryte-toolchain/bin --toolchain-prefix riscv64-unknown-elf- config
python3 project.py clean_conf
ビルドオプションの確認
ファームウェアがアップデートされるとmenuconfigも変わる可能性があるのでチェックしておきましょう。
python3 project.py menuconfig
ビルド
設定が終わったらビルドします。
python3 project.py build
バイナリが生成されるフォルダ
ビルドが完了すると./buildにmaixpy.binというファイルが作成されます。後はこれをM5StickVに書き込むだけです。
書き込む手順は恐らくこの記事を読む方は知っていると思うので省略します。(kflash_guiでも可能)
入れ替わっているか確認したい時
~/MaixPy/projects/maixpy_m5stickv/builtin_py/_boot.pyを書き換えるとMaixPy IDEのターミナルで表示されるメッセージを変えることができるので確認できます。
https://github.com/sipeed/MaixPy/blob/master/projects/maixpy_m5stickv/builtin_py/_boot.py#L30
以下のバナーで「build by Takao Akaki:2019/7/26」を追加してあります。
トラブルの対処
自分でファームウェアをビルドすると思わぬトラブルがあります。私がハマったトラブルと対処を記載しておきます。
MaixPyIDEから接続できない
MaixPyIDEのバージョンを確認
IDEの接続機能は0.2.4以降でないと使用できません。
ビルドオプションの確認
MaixPyIDEと接続してモニターするためにはファームウェアも対応していないといけません。menuconfigで下記のオプションを確認してください。
【追記】2019/8/3 ビルドエラーの対処
https://github.com/sipeed/MaixPy/pull/147 が取り込まれたのでビルドしようとしたところエラーが出たので手順を追加しておきます。MaixPyは常に更新されているのでビルドエラーが出た場合は、エラーメッセージをよく読んで対処しましょう。
ModuleNotFoundError: No module named ‘kconfiglib’
依存するPythonのモジュールが増えたようです。
pip3 install kconfiglib
kendryte-standalone-sdk/lib/bsp/include not found!
https://github.com/sipeed/MaixPy/tree/master/components/kendryte_sdk に新しいサブモジュール( kendryte-standalone-sdk )が増えていました。
多分、対処方法は違いますが、以下の手順でなんとかビルドまで行けました。(git詳しい方正しい対処方法教えてください。。。m(_ _)m)
cd ~/MaixPy/components/kendryte_sdk/
git clone https://github.com/sipeed/kendryte-standalone-sdk/tree/523057183bdf12bd1740eb64ce4b962bb9ad1473
# もしディレクトリが空でない場合、サブフォルダを空にしてからgit cloneする。
【追記】2020/9/19 mbedtlsのビルドエラー
2020/9に作業していて下記のビルドエラーが出ました。mbedtlsのタグが無くなった(?)らしく個別にcloneする必要がありました。
CMake Error at /home/mongonta/GitRepos/MaixPy_20200919_sd/tools/cmake/compile.cmake:43 (message):
/home/mongonta/GitRepos/MaixPy_20200919_sd/components/micropython/CMakeLists.txt:
/home/mongonta/GitRepos/MaixPy_20200919_sd/components/micropython/core/lib/mbedtls/include
not found!
Call Stack (most recent call first):
/home/mongonta/GitRepos/MaixPy_20200919_sd/components/micropython/CMakeLists.txt:522 (register_component)
-- Configuring incomplete, errors occurred!
See also "/home/mongonta/GitRepos/MaixPy_20200919_sd/projects/maixpy_m5stickv/build/CMakeFiles/CMakeOutput.log".
Makefile:386: recipe for target 'cmake_check_build_system' failed
make: *** [cmake_check_build_system] Error 1
対処
git submodule の実行で正しくサブモジュールが読み込めていない場合に起きるようです。MaixPyのリポジトリをCloneした後に下記のコマンドを実行するのを忘れないでください。
git submodule update --init --recursive
【追記】2020/9/21 最新にするとlcdとmicroSDが使えない
しばらくファームウェアアップデートしていなかったのですが、8/28の下記のコミットで大幅に変更されておりlcdが反応しないのと、microSDが使えません。
https://github.com/mongonta0716/MaixPy/commit/01c55e384ff360835d4bc1157cf8bd3a9575bfe0
①lcdが反応しない
こちらは、ISSUEを出して既に修正されています。ただ、lcd.init()に引数が増えたため、既存のソースに修正が必要です。
lcd.init(type=3)
②microSDが使えない
バグのようです。こちらは2020/9/21現在ISSUEを上げて修正点も分かりましたが取り込まれてはいません。
components/drivers/sd_card/src/sdcard.cの433行目を下記のように変更する必要があります。
menuconfigのモジュール選択について【2020/9】
OutOfMemoryが出た場合は使えるモジュールを制限して小さいサイズファームウェアを使うと回避できることがあります。オプションで選択できる項目について説明します。
※ MaixPyは常に進化してるのでオプションは増えていくと思われます。無い項目もあると思いますがその点はご了承ください。
Drivers configuration
デバイスを利用する際はオプションをONにする必要があります。WS2812はUnitVのLEDを使う場合必要です。HTPAのサーマルセンサーはあまり使う人はいないでしょう。
SD card
WS2812
HTPA themal sensor
Micropython configuration→Modules configuration
Enable MaixPy IDE protocol support
MaixPy IDEと接続して開発する場合に必要です。
Enable _thread module
マルチスレッドを使用する場合に必要です。
Enable NES emulator
これはあまり詳しく説明できません。あまり使う人はいない(と思います。)「NES emulator」でググると、、、
Enable video module
ビデオファイルを扱う場合は必要です。
Enable touch screen module
タッチスクリーンを使う場合に必要です。
Minimun size OMV function (just disable omv advanced functions)
こちらはオプションをONにするとサイズが小さくなります。OpenMVの機能が削減されます。
YUV convert table, speed up convert but more code
YUVの変換テーブルをを追加します。
Set double buffer for sensor(camera)
センサー(カメラモジュール)用のバッファを二倍にします。
Enable Maix.MIC_ARRAY module
SipeedのMIC Arrayモジュールを使う場合はenable。使わない場合はdisableでいいでしょう。
Enable LittlvGL
オープンソースの組み込み向けGUIライブラリを使う場合はenableにします。
Enable loadpng module
PNGファイルを扱うモジュール。PNGファイルを使わない場合は不要でしょう。
Enable Ws2812
フルカラーLEDのWS2812を使う場合に必要です。M5StackのUnitVでLEDを使う場合は必要です。
Enable HTPA themal sensor
Hyman HTPA 32×32 モジュールを使用する場合に必要です。
Enable ulab module(a numpy-like fast vector module)
組み込み向けのnumpyライクなモジュールです。
support v4 kmodel
kmodelのVer.4を利用する場合に必要です。
Enable Speech Recognizer
音声認識を利用する場合に必要です。
Enable Https SSL
Httpsを内部で扱う場合に使います。(通信できない場合は不要かと思います。)
終わりに
ここまでで、M5StickVのファームウェアのビルドは完了です。ファームウェアを解析して色んなことをしてしまいましょう。(`・ω・´)
※急いで書いたのでわからない事や、間違い・誤字・リンクミス等ありましたらコメントかTwitterまでご連絡くださいm(_ _)m
個人メモ
忘れてしまうのでメモ。linuxpc1でビルドした後に母艦のWindowsPCからWSL上のsshを使ってコピーするコマンド。
scp linuxpc1:/home/username/MaixPy/projects/maixpy_m5stackv/build/maixpy.bin /mnt/d/M5StickV_firmware/
更新履歴
- 2020/9/29 git submodule –initで–recursiveが抜けていた点を修正
- 2020/9/21 最新ファームでlcdとmicroSDが動かない件を追加
- 2020/9/20 menuconfigの項目説明を追加
- 2020/9/19 ビルドエラーの対処を追加
- 2020/5/22 二回目以降のビルド手順を追加
- 2020/1/29 UnitVのws2812とMaixPyIDEのトラブルを追加
- 2019/8/3 ビルドエラーの対処
- 2019/7/26 新規作成