はじめに
MILK V DUO SでリトルコアのファームウェアをArduino IDEで作り実機に転送して動かすまで、ちょっと手間がかかりましたので知見として残しておこうかと思います。
使用した環境は
- Windows 10
Arduino IDE 2.3.5
ボード対応 SG200x 0.25
MSYS2 Mingw64 - MILK V DUO S (eMMCなしWifiなし)
MILK V DUO S用 arduino対応公式Linux SD版 arduino-milkv-duos-sd-v1.1.4.img.zip
手順
MILK V DUO S用 arduino対応公式Linux SD版 をダウンロードし描き込む
公式サイトよりリンクを辿ってください。今回はV1イメージを使います
使うのは arduino-milkv-duos-sd-v1.1.4.img.zip このファイルです。
アーカイブを7zip等で解凍し、イメージファイルをMicroSD(TF)カードに書き込みます。
書き込みの手順はこの記事ではさわりませんが、MILK V公式のガイドをリンクしておきますので各自のやり方でSSHできるようにしてください。
https://milkv.io/docs/duo/getting-started/boot
https://milkv.io/docs/duo/getting-started/setup
MILK V DUO SにSSHでログインし、設定を変える
MILK V DUO Sの公式LINUXが立ち上がるとLEDが長周期で点滅を始めます。
リトルコア側でLEDを使用するので、ビッグコア側のLED使用を止めるようにします。
mv /mnt/system/blink.sh /mnt/system/blink.sh_backup && sync
V1.1.4での再起動はこのコマンドで。
/sbin/reboot
MSYS2 Mingw64でPythonをインストールし、PATHを通す
Arduino IDE用のSG200xボード設定 バージョン0.25では、別途Pythonの実行ファイルにパスが通っている事が必要です。ここは他の方の記事などを参考に自力でインストールしてください。
PySerialがインストールされていない場合は、それもよそで方法を見つけてインストールしてください。
既にインストール済みでまだPATHが通っていないと仮定して続けます。PATHが通っているようなら次の手順へ言ってください。
Windowsのスタートメニューから、設定を開き、検索窓に「システムの詳細設定」と入力しエンターキーを押し、システムのプロパティを開きます。
システムのプロパティダイアログが起動したら、右下にある環境変数ボタンを押して環境変数ダイアログを開きます。
システムの環境変数から変数「Path」の列を選択し編集ボタンを押します。
新規ボタンを押してPythonの実行ファイルがある場所のフルパスを入力します。例:「C:\mingw64\bin」
項目が追加されたらOKを押してダイアログを全て閉じてください。
Arduino IDEを起動し、MILK V DUO S用のボード設定をインストールする
公式の手順に従い、ボードとシリアルポートの設定まで奨めます。
ここで一度ビルドをかけてみます。
まずArduinoIDEのメニューからファイル→スケッチ例→01.Basics→blinkを開き、適当な名前で保存します。
ボードとシリアルポートの設定を行い、メニューからスケッチ→検証・コンパイルを実行します。
ld.exeから_getpid/_killの実態がないという警告が出る場合は無視して問題有りません。この警告が出てもファイルはできています。
次の手順でファームウェアができているか確認します。
- Arduino IDEのメニューからスケッチ→コンパイル済みバイナリをエクスポートを実行
- Arduino IDEのメニューからスケッチ→スケッチフォルダを表示
- 開いたエクスプローラのファイル一覧ペインの中からbuildフォルダを開く。
- *.bin *.map *.hex *.elfができていたらビルド成功。
Arduino IDEのMILK V DUO S用ボード設定を確認し、問題があるようなら書き換える
SG200xのボード定義0.25では、pathに含まれるWindowsのユーザー名にホワイトスペース(0x20)が含まれている場合、Pythonで書かれた転送ツールが失敗します。"Tanaka Minoru"等、フルネームを半角スペースで区切っている場合はボード定義のplatform.txtを修正して対応します。(Issueを上げておいたので、もしかしたら将来修正されるかもしれませんし、されないかもしれません)
ファイルは以下を探してみてください。ご自身の環境に合わせて適宜読み替えてください。
C:\Users\(ユーザー名)\AppData\Local\Arduino15\packages\sophgo\hardware\sg200x\0.25\platform.txt
書き換える行は以下の行です。
tools.burntool_py.upload.pattern_args= -p "{serial.port}" -f {build.path}/{build.project_name}.elf
上記の行を検索し、下記のように書き換えます。
tools.burntool_py.upload.pattern_args= -p "{serial.port}" -f "{build.path}/{build.project_name}.elf"
書き換えたらArduino IDEを再起動します。
Arduino IDEやSCPから転送を試みる
Arduino IDEが再び起動したら、メニューの”スケッチ→書き込み”で転送を試みます。
転送に成功したらLチカがはじまるはずです。
もう一つの転送方法として、WinSCPを使う方法を紹介します。
WinSCPでDuo Sにログインすると、エクスプローラのようなペイン表示でDUO Sのファイルシステムを探索できます。
Arduino IDEからファームの転送が成功していると、下記のファイルがWindows上のスケッチフォルダのbuildの中にある物と同一になっているはずです。
/lib/firmware/arduino.elf
今後Arduino IDEから転送しなくてもWinSCPからこのファイルを書き換えてリセットすればファームは置き換わるはずです。
おわりに
スケッチをビルドして転送し動かすところまでの手順を紹介しました。
私はaptを使いたいので普段はduos用Debianを使っていますが、配布サイトの説明ではリトルコア対応とされつつArduino IDEからの転送はうまくいかなかった経験をしましたので、最低限ビルドからLチカまで通す事を優先に、今回の手順をまとめました。
時間がたつともっと楽で良い手順で環境を整えられるようになるかもしれません。
2025年7月の段階でWindowsからMILK V DUO Sのリトルコアファームウェア開発をする際に、参考になればと思います。