はじめに
この記事では、M5Stack CoreMP135へのNervesのポーティング作業で試行錯誤した内容を共有したいと思います。
ポーティングに関する情報は、Nervesのドキュメントにかなり詳細に書かれていて、これを見ていただくのが良いと思います。私もその内容で作業を進めました。
ポーティングを行ってみて、ポーティングの手順は、Nervesの仕組みを理解している人にとっては、それほど難しくないものではないと感じました。
しかし、Nervesの仕組みをわかっていなかった私には、何が原因で動かないのかわからない状況の繰り返しで、大変苦労しました。
私のこの一回目の経験を見ていただく事で、Nervesのポーティング作業を勧める大まかな工程や、検討しないといけない部分を理解していただくことで、ポーティング作業を進める際の参考になればと思います。
最近は様々なSBCが登場しています。このような新しいハードウエアにNervesを移植することで、新しいIoT製品の開発が進むことを期待しています。
M5Stack CoreMP135
ポーティングの対象とした、M5Stack CoreMP135について簡単に紹介します。
M5Stack社は、IoTや組み込み開発向けの小型モジュール製品を多く手掛ける企業で、ユニークな製品群を展開しています。その中で、2024年5月にリリースされた「CoreMP135」は、特に注目に値する製品です。このCoreMP135は、従来のM5Stack社の他のCoreシリーズとは異なり、Linuxが動作するのが特徴です。
製品ページM5Stack CoreMP135にも情報が掲載されていますが、Linuxの動作環境を備えていることで、通常のマイコンボードよりも高度な操作や処理が可能です。
ポーティングの進め方
公式のドキュメントには、以下のように書かれています。
以下は、日本語への翻訳です。
私たちは公式には入手しやすいハードウェアのみをサポートしていますが、これはNervesがこれらのボードでしか動作しないという意味ではありません。もしBuildrootを使用してあなたのハードウェア用のLinuxルートファイルシステムを作成できるのであれば、Nervesを実行できる可能性があります。新しいボードをサポートするための一般的な手順は以下の通りです:
1. ボード上で起動して動作する最小限のBuildroot `defconfig` を作成します。これはNervesを一切使用しません。
2. `defconfig` に書き込み可能なルートファイルシステムが必要な場合、それを読み取り専用にする方法を見つけます。`systemd` を使用していない限り、これは比較的簡単です。Nervesは独自の初期化システムを使用しているため、後で手動で実行する必要がある初期化が `systemd` によって行われている可能性があることを覚えておいてください。
3. フラッシュメモリのレイアウトを確認し、サポートされているシステムのレイアウトと比較します。イメージを作成するために `fwup` を使用しています。フラッシュメモリのレイアウト方法やフェイルバック処理には多くのバリエーションがあります。この時点では、まず `fwup` を使ってイメージを作成できるかを確認してください。
4. あなたのボードに近い公式のシステムをクローンします。動作するBuildrootの `defconfig` に基づいて `nerves_defconfig` を更新します。
5. `mix` を使用するか、`create-build.sh` スクリプトを実行してシステムをビルドします。
buildrootでのビルド
公式ドキュメントにもあるように、まずは、buildrootでlinuxが動作するファームウエアを作ってみます。
buildrootについてはこちらを参考にしてください。
M5Stack社の公式サイトに、CoreMP135のLinuxのビルド方法が書かれているので、それを参考にして、buildrootでビルドしてみました。
git clone https://github.com/m5stack/CoreMP135_buildroot.git
git clone https://github.com/m5stack/CoreMP135_buildroot-external-st.git
cd CoreMP135_buildroot
make BR2_EXTERNAL=../CoreMP135_buildroot-external-st/ m5stack_coremp135_defconfig
make -j4
/output/images/sdcard.img
に、SDカードのイメージが作成されます。
実際に、SDカードに書き込んで、起動できる事を確認しておきます。
この先、想定通り起動できない事が何度がありましたが、この起動するSDカードと比較する事で、どこに問題があるのかを特定する事に役立ちました。
設定ファイル作成編に続く