LinuxでDocker(compose)を使ってQMKファームウェアのビルドと書き込み
QMKファームウェア書き込みは今まではQMK Toolboxを使ってたが、Linuxだと素朴にはQMK Toolboxは使えない認識で、かといってWindowsを起動するのもめんどくさい。
LinuxでQMKファームウェア書き込みをやる、また、環境を汚さないためにDockerを使う。
docker composeでqmk cliを使う
docker composeでqmk cliを使うことでQMKファームウェアの書き込みをやるようにした。
github: https://github.com/kefi550/qmk_firmware/blob/kefi/compose.yml
services:
json2c:
image: ghcr.io/qmk/qmk_cli
working_dir: /qmk_firmware
volumes:
- .:/qmk_firmware
environment:
JSON_PATH: keymap_json/ergodash/rev1/keymaps/kefi550/keymap.json
KEYBOARD: omkbd/ergodash/rev1
KEYMAP: kefi550
command: /bin/bash -c "qmk json2c $${JSON_PATH} > keyboards/$${KEYBOARD}/keymaps/$${KEYMAP}/keymap.c"
compile:
image: ghcr.io/qmk/qmk_cli
working_dir: /qmk_firmware
volumes:
- .:/qmk_firmware
- ./.build:/qmk_firmware/.build
environment:
KEYBOARD: omkbd/ergodash/rev1
KEYMAP: kefi550
SKIP_GIT: true
command: /bin/bash -c "qmk compile -kb $${KEYBOARD} -km $${KEYMAP}"
flash:
image: ghcr.io/qmk/qmk_cli
working_dir: /qmk_firmware
privileged: true
volumes:
- .:/qmk_firmware
- /dev:/dev:rw
environment:
KEYBOARD: omkbd/ergodash/rev1
KEYMAP: kefi550
SKIP_GIT: true
command: /bin/bash -c "qmk flash -kb $${KEYBOARD} -km $${KEYMAP}"
flash_from_json:
image: ghcr.io/qmk/qmk_cli
working_dir: /qmk_firmware
privileged: true
volumes:
- .:/qmk_firmware
- /dev:/dev:rw
environment:
JSON_PATH: ./keymap_json/ergodash/rev1/keymaps/kefi550/keymap.json
SKIP_GIT: true
command: /bin/bash -c "qmk flash $${JSON_PATH}"
基本的に json2c, compile, flashといったqmk cliのコマンド(自分が使うやつ)をそのまま書き下しただけのような感じ。
flash
では、ProMicroをPCにつなげたときのデバイス(自分の環境だと /dev/ttyACM0
)をコンテナから触れるようにするために /dev
をマウントしてる。
とはいえほぼ、flash_from_json
しか使わない。
qmk flash
はqmk configurator等で作った、キーボード情報を含んだjsonを与えるだけでビルド、書き込みまでやってくれるらしい。
https://github.com/qmk/qmk_firmware/blob/fa98117a3e10afed347f16b2614e4e8a9e26cd32/lib/python/qmk/cli/flash.py#L73
flash_from_json
ではそれを使うことで、jsonを使ってProMicroへの書き込みまでを行う。
主な使い方
qmk/qmk_firmwareをcloneしてdocker compose yamlを置く
git clone --recursive-submodules https://github.com/qmk/qmk_firmware.git
cd qmk_firmware
# qmk_firmware ディレクトリ下に↑のdocker composeのyamlを置く
curl https://github.com/kefi550/qmk_firmware/blob/kefi/compose.yml -o compose.yml
qmk configuratorでキーマップJSONを作る
https://config.qmk.fm/
いつもお世話になっております。
キーマップを編集してQMK keymap jsonファイルを上記qmk_firmwareディレクトリ下にダウンロードする。
compose.yml内のJSON_PATHを書き換える
JSON_PATH: ./keymap.json
flash 実行
ProMicroをPCにケーブルで接続して以下を実行。
docker compose up flash_from_json
以下のようにProMicro等の接続を待ちはじめるので、この表示になったらProMicroをリセットする(リセットボタン等)。
flash_from_json-1 | Waiting for USB serial port - reset your controller now (Ctrl+C to cancel)..........