はじめに
AtomVM を最新のソースコードからビルドする手順をまとめておきたいと思います。
※ 写真はイメージです
対象環境
今回試したときの環境は次のとおりです。
- マイコン
- Seeed Studio XIAO ESP32-S3(オンボード LED は GPIO 21)
- ホスト PC
- Debian 系 Linux(LMDE7)
- 主なソフトウェア
手順の全体像
やることをざっくり並べると、以下のとおりです。
- AtomVM・ESP-IDF・esptool の準備
- Elixir コアライブラリ生成
- ESP32-S3 向け AtomVM をビルド
- ESP32-S3 に AtomVM を書き込み
順に見ていきます。
AtomVM と ESP-IDF の準備
ホスト環境に必要なツールをインストール
まずは、AtomVM のビルドや ESP32-S3 への書き込みに必要なツールを揃えます。
# Elixir と Python は任意の方法でインストールされている前提
elixir --version
python3 --version
sudo apt install git wget flex bison gperf cmake ninja-build \
ccache libffi-dev libssl-dev dfu-util libusb-1.0-0
AtomVMで使えるツールのバージョンについては以下の資料で確認してください。
ESP-IDF を使うために必要なツールについては以下の資料を確認してください。
AtomVM のソースコードを取得
# AtomVMのソースコードの保存場所は任意
mkdir -p $HOME/Projects/atomvm
cd $HOME/Projects/atomvm
git clone https://github.com/atomvm/AtomVM
以降は、$HOME/Projects/atomvm/AtomVM をAtomVM のソースコードのルートディレクトリとします。
ESP-IDF(ESP32-S3 用)をインストール
執筆時点では AtomVM の公式サポートは v5.4 までなのですが、手元では v5.5 で動作を確認。
# esp-idfのソースコードの保存場所は任意
mkdir -p $HOME/esp
cd $HOME/esp
git clone --branch v5.5 --recursive https://github.com/espressif/esp-idf.git
cd esp-idf
# esp32s3 向けツール群をインストール
./install.sh esp32s3
idf.py --version
詳しくは公式ドキュメントを参照してください。
esptool のインストール
pip install esptool
esptool version
詳しくは公式ドキュメントを参照してください。
Elixir コアライブラリ生成
ESP32 用の完全なイメージを作るためには、先にホスト PC 上で Generic UNIX 版 AtomVM をビルドしておく必要があります。
cd "$HOME/Projects/atomvm/AtomVM"
mkdir -p build
cd build
cmake ..
make -j"$(nproc)"
# 任意だが、atomvm コマンドをインストールしておくと便利らしい
sudo make install
which atomvm
ビルド完了後、次のようなファイルが生成されているはずです。
ls build/libs/esp32boot
# esp32boot.avm
# elixir_esp32boot.avm
# ...
詳しくは公式ドキュメントを参照してください。
ESP32-S3 向け AtomVM をビルド
ESP32 プラットフォーム用ディレクトリに移動
cd $HOME/Projects/atomvm/AtomVM/src/platforms/esp32
ESP-IDF 環境を読み込む
source $HOME/esp/esp-idf/export.sh
Elixir 用パーティションテーブルを指定
Elixir 用のパーティションレイアウトを使うため、sdkconfig.defaults に partitions-elixir.csv を指定します。
CONFIG_PARTITION_TABLE_CUSTOM_FILENAME="partitions-elixir.csv"
これで、boot.avm / main.avm などが Elixir 向けの構成になります。
ESP32-S3 向けにビルド
ESP-IDF は機種ごとに target 名が異なります。
AtomVM のドキュメントでは esp32 を例にしていますが、ESP32-S3 を使う場合は esp32s3 を指定してください。
idf.py set-target esp32s3
idf.py reconfigure
idf.py build
ここまでで
- ESP32-S3 向け AtomVM 本体
- Elixir / Erlang コアライブラリを含むビルド成果物
- 各種補助スクリプト(
mkimage.sh/flashimage.shなど)
がそろった状態になります。
Release イメージを生成
ESP32-S3 に書き込むための「ひとまとめのイメージ」を mkimage.sh で作成します。
./build/mkimage.sh --boot ../../../build/libs/esp32boot/elixir_esp32boot.avm
elixir_esp32boot.avm を取り込んだ、Elixir 対応の Release イメージが生成されます。
ls -lh build/atomvm-esp32*
# build/atomvm-esp32s3-xxxxxx.img のようなファイルができているはず
ESP32-S3 に AtomVM を書き込み
フラッシュ全消去
esptool --chip auto --port /dev/ttyACM0 erase-flash
Release イメージを書き込む
mkimage.sh が生成したイメージを、flashimage.sh でまとめて書き込みます。
./build/flashimage.sh -p /dev/ttyACM0
flashimage.sh の中では esptool.py が呼ばれ、
適切なオフセットに bootloader / パーティションテーブル / AtomVM 本体 / Elixir コアライブラリが書き込まれます。
ここまで終わると、XIAO ESP32-S3 上に AtomVM 本体と Elixir 標準ライブラリ入りの boot.avm がそろった状態になっています。
おわりに
AtomVM をソースコードからビルドする手順をまとめました。
ソースコードからビルドできるようになることで、
用途にあわせた独自イメージが作成できるようになります。
![]()
![]()
![]()
