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

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

対処

 下記のようにフォルダに移動して対処します。

cd components/micropython/core/lib
git clone https://github.com/ARMmbed/mbedtls

【追記】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/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 新規作成

コメントを残す

メールアドレスが公開されることはありません。