動作環境
- Windows 10 Pro 21H2
- Windows Subsystem for Linux (WSL2)
- Ubuntu 22.04.1 LTS
- Docker Desktop v4.12.0
- avrdude v7.0
- Visual Studio Code v1.72.0
- Remote Development v0.21.0
- Windows Subsystem for Linux (WSL2)
警告
追記[2023/12/30]: Windows11の場合avrdude.sh
実行エラーとなるため、Windows側でqmk_toolboxで書き込む必要がある。
ファームウェア作成
【WSL側】qmk_firmware
をクローンし、カスタムする(ここではLet's Splitキーボード)のキーマップのディレクトリを作成する。
$ git clone --recurse-submodules https://github.com/qmk/qmk_firmware.git
$ cd qmk_firmware
$ git switch -c custom-lets_split
$ mkdir -p keyboards/lets_split/keymaps/hgshdt
このディレクトリにカスタムしたconfig.h
, keymap.c
, rules.mk
などを格納し、dockerビルド用のスクリプトでビルドする。lets_split_rev2_hgshdt.hex
が作成されることを確認する。
$ util/docker_build.sh lets_split:hgshdt
書き込み
【Windows側】avrdude
のリリースのサイトから、avrdude-v7.0-windows-x64.zip
をダウンロードし、Windows側の任意のディレクトリにダウンロード・ファイルを解凍する。
-
avrdude.exe
:Windowsの任意のディレクトリに格納する(ここではC:\workspace\qmk\avr
とする) -
avrdude.conf
:WSL側のqmk_firmware
内にコピーする
【WSL側】書き込み用のスクリプト(avrdude.sh
)を作成する。
$ cd qmk_firmware
$ vi avrdude.sh
avrdude.sh
の中身は以下。WSLでavrdudeを簡単に使う為の奴 (github.com)を流用させていただいた。変数AVRDIR
に、Windows側に保存したavrdude.exe
のディレクトリを指定する。
AVRDIR="/mnt/c/workspace/qmk/avr"
MODECMD='/mnt/c/Windows/System32/mode.com'
GET_COMPORT='/mnt/c/Windows/System32/reg.exe query HKLM\HARDWARE\DEVICEMAP\SERIALCOMM'
CONNECTED_COMPORT=$(${MODECMD}|grep -oE 'COM[0-9]+'| tr '\n' '|' | sed -e 's/|$//g')
echo "connected port: $CONNECTED_COMPORT"
TARGET_COMPORT=""
while [ "$TARGET_COMPORT" = "" ];do
sleep 0.5
printf "."
if [ -z "$CONNECTED_COMPORT" ]; then
TARGET_COMPORT=$(${GET_COMPORT}|grep -oE 'COM[0-9]+')
else
TARGET_COMPORT=$(${GET_COMPORT}|grep -vE $CONNECTED_COMPORT|grep -oE 'COM[0-9]+')
fi
done
echo ""
echo $TARGET_COMPORT
${AVRDIR}/avrdude.exe -C ./avrdude.conf -c avr109 -p m32u4 -P ${TARGET_COMPORT} -U flash:w:$1
作成したファームウェアをこのシェルスクリプトの引数に指定して実行する。スクリプト実行後待機状態中にリセットスイッチを押す(Let's Splitの場合、最初に左キーボードをUSB接続して実行。次に右キーボードをUSB接続して実行。最後に再度?左キーボードをUSB接続して実行)。
$ sh avrdude.sh lets_split_rev2_hgshdt.hex