UbuntuでQMK開発環境を作ってみる
1. はじめに
最近はWindows10のサポート終了が近いこともあって、ノートPCなどは500円でハードオフに引き取られています。こんなノートPCを使ってQMKビルド専用にしても良いし、無料版のVMWareをメインPCにインストールしてUbuntuを走らせても良いと思います。以下は Ubuntu 24.04 LTS でQMK firmwareのビルド環境を作成したときのメモです。Ubuntuのインストール方法はここでは省略します
QMK Firmwareの開発環境の作成方法はQMK Firmware公式のTutorialにあります。所々にプラットフォーム別のタブがあるので、Linuxを選択して読み進めれば良かったのですが、最近のUbuntu 24.04ではうまく行きませんでした。この記事を参考にしてビルド出来るようします。
2. UbuntuにDocker Engineをインストール
Ubuntuのターミナルから以下のコマンドを実行してDoicker Engineをインストールします。
最初は curl がないのでインストールするように促されます。curl はクライアントからサーバへリクエストし、データを転送するためのツールみたいです。
abc@VMware:~$ curl -fsSL https://get.docker.com -o get-docker.sh
コマンド 'curl' が見つかりません。次の方法でインストールできます:
sudo snap install curl # version 8.1.2, or
sudo apt install curl # version 8.5.0-2ubuntu10.4
他のバージョンについては 'snap info curl' を確認してください。
abc@VMware:~$
案内の通りに curl をインストールします。
abc@VMware:~$ sudo apt install curl
[sudo] abc のパスワード:
パッケージリストを読み込んでいます... 完了
依存関係ツリーを作成しています... 完了
状態情報を読み取っています... 完了
以下のパッケージが新たにインストールされます:
curl
<省略>
(データベースを読み込んでいます ... 現在 148392 個のファイルとディレクトリがインストールされています。)
.../curl_8.5.0-2ubuntu10.4_amd64.deb を展開する準備をしています ...
curl (8.5.0-2ubuntu10.4) を展開しています...
curl (8.5.0-2ubuntu10.4) を設定しています ...
man-db (2.12.0-4build2) のトリガを処理しています ...
abc@VMware:~$
Docker Engineをインストールします。
abc@VMware:~$ curl -fsSL https://get.docker.com -o get-docker.sh
abc@VMware:~$ sudo sh get-docker.sh
# Executing docker install script, commit: 6d51e2cd8c04b38e1c2237820245f4fc262aca6c
+ sh -c apt-get -qq update >/dev/null
+ sh -c DEBIAN_FRONTEND=noninteractive apt-get -y -qq install ca-certificates curl >/dev/null
+ sh -c install -m 0755 -d /etc/apt/keyrings
+ sh -c curl -fsSL "https://download.docker.com/linux/ubuntu/gpg" -o /etc/apt/keyrings/docker.asc
+ sh -c chmod a+r /etc/apt/keyrings/docker.asc
+ sh -c echo "deb [arch=amd64 signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu noble stable" > /etc/apt/sources.list.d/docker.list
+ sh -c apt-get -qq update >/dev/null
+ sh -c DEBIAN_FRONTEND=noninteractive apt-get -y -qq install docker-ce docker-ce-cli containerd.io docker-compose-plugin docker-ce-rootless-extras docker-buildx-plugin >/dev/null
+ sh -c docker version
Client: Docker Engine - Community
Version: 27.3.1
API version: 1.47
Go version: go1.22.7
Git commit: ce12230
Built: Fri Sep 20 11:40:59 2024
OS/Arch: linux/amd64
Context: default
<省略>
WARNING: Access to the remote API on a privileged Docker daemon is equivalent
to root access on the host. Refer to the 'Docker daemon attack surface'
documentation for details: https://docs.docker.com/go/attack-surface/
================================================================================
abc@VMware:~$
ユーザを docker グループに追加します。
abc@VMware:~$ sudo usermod -aG docker $USER
※これでdockerコマンド自体はsudoなしで実行できるのだけど、QMKのビルドで別のところで [Errno 13] Permission denied: がでてしまいます。
3. QMKをクローンする
nicola化したGK61 pro用のレポジトリをダウンロードします。フォーク元のqmk/qmk_firmware をダウンロードして、keyboards/skyloong/gk61 だけ入れ替えても構いません。その方が最新のQMKを取り込めます。
abc@VMware:~$ git clone --recurse-submodules https://github.com/ja7rhk/qmk_firmware_gk61_pro.git
Cloning into 'qmk_firmware_gk61_pro'...
remote: Enumerating objects: 542529, done.
remote: Counting objects: 100% (1446/1446), done.
<省略>
Submodule path 'lib/lufa': checked out '549b97320d515bfca2f95c145a67bd13be968faa'
Submodule path 'lib/lvgl': checked out 'e19410f8f8a256609da72cff549598e0df6fa4cf'
Submodule path 'lib/pico-sdk': checked out 'a3398d8d3a772f37fef44a74743a1de69770e9c2'
Submodule path 'lib/printf': checked out 'c2e3b4e10d281e7f0f694d3ecbd9f320977288cc'
Submodule path 'lib/vusb': checked out '819dbc1e5d5926b17e27e00ca6d3d2988adae04e'
abc@VMware:~$
サブモジュールを含めてクローンされます。
4. Dockerのスクリプトでビルドする
ホームからダウンロードしたQMKファームウエアのフォルダーに移動します。
abc@VMware:~/$ cd qmk_firmware_gk61_pro
ダウンロードしたqmk_firmwareのフォルダーにある util/docker_build.sh を実行します。ここまでQMKのビルド環境はインストールしていないので、最初に実行すると qmk/qmk_cli をインストールしています。その後、ビルドが始まります。
abc@VMware:~/qmk_firmware_gk61_pro$ sudo util/docker_build.sh skyloong/gk61/pro_ds:nicola
[sudo] abc のパスワード:
Unable to find image 'ghcr.io/qmk/qmk_cli:latest' locally
latest: Pulling from qmk/qmk_cli
14726c8f7834: Pull complete
d5f08fae84f5: Pull complete
cbfd8093cc56: Pull complete
4f4fb700ef54: Pull complete
3cb190fde554: Pull complete
b3c3deee368c: Pull complete
7bb01f600ccd: Pull complete
127e1681dea5: Pull complete
Digest: sha256:16c4916e95b99bf88d27b15aec8db409ee17265d1710287fde248c6666508966
Status: Downloaded newer image for ghcr.io/qmk/qmk_cli:latest
WARNING: Target folder is not a git repo, you probably downloaded a zip file instead of cloning.
Please consider following https://docs.qmk.fm/#/newbs_getting_started.
<ビルド開始>
Making skyloong/gk61/pro_ds with keymap nicola
Generating: .build/obj_skyloong_gk61_pro_ds_nicola/src/info_deps.d [OK]
arm-none-eabi-gcc (15:8-2019-q3-1+b1) 8.3.1 20190703 (release) [gcc-8-branch revision 273027]
Copyright (C) 2018 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
Generating: .build/obj_skyloong_gk61_pro_ds_nicola/src/info_config.h [OK]
Generating: .build/obj_skyloong_gk61_pro_ds_nicola/src/default_keyboard.c [OK]
Generating: .build/obj_skyloong_gk61_pro_ds_nicola/src/default_keyboard.h [OK]
Compiling: keyboards/skyloong/gk61/pro_ds/keymaps/nicola/nicola.c [OK]
Compiling: keyboards/skyloong/gk61/pro_ds/pro_ds.c [OK]
Compiling: .build/obj_skyloong_gk61_pro_ds_nicola/src/default_keyboard.c [OK]
<省略>
Compiling: platforms/chibios/interrupt_handlers.c [OK]
Linking: .build/skyloong_gk61_pro_ds_nicola.elf [OK]
Creating binary load file for flashing: .build/skyloong_gk61_pro_ds_nicola.bin [OK]
Creating load file for flashing: .build/skyloong_gk61_pro_ds_nicola.hex [OK]
Size after:
text data bss dec hex filename
0 48090 0 48090 bbda skyloong_gk61_pro_ds_nicola.bin
Copying skyloong_gk61_pro_ds_nicola.bin to qmk_firmware folder [OK]
abc@VMware:~/qmk_firmware_gk61_pro$
以上、ビルドが完了してQMKのディレクトリ直下にバイナリファイルが出来ます。
2回目以降は差分のみビルドするので、すぐ終わります。
abc@VMware:~/qmk_firmware_gk61_pro$ sudo util/docker_build.sh skyloong/gk61/pro_ds:nicola
WARNING: Target folder is not a git repo, you probably downloaded a zip file instead of cloning.
Please consider following https://docs.qmk.fm/#/newbs_getting_started.
Making skyloong/gk61/pro_ds with keymap nicola
arm-none-eabi-gcc (15:8-2019-q3-1+b1) 8.3.1 20190703 (release) [gcc-8-branch revision 273027]
Copyright (C) 2018 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
Size before:
text data bss dec hex filename
0 48090 0 48090 bbda skyloong_gk61_pro_ds_nicola.bin
Compiling: quantum/command.c [OK]
Linking: .build/skyloong_gk61_pro_ds_nicola.elf [OK]
Creating binary load file for flashing: .build/skyloong_gk61_pro_ds_nicola.bin [OK]
Creating load file for flashing: .build/skyloong_gk61_pro_ds_nicola.hex [OK]
Size after:
text data bss dec hex filename
0 48090 0 48090 bbda skyloong_gk61_pro_ds_nicola.bin
Copying skyloong_gk61_pro_ds_nicola.bin to qmk_firmware folder [OK]
5. キーボードに書き込む
上記のビルドコマンドに :flash を付けるとキーボードにプログラムの書き込みまで行います。ビルド完了後、0.5秒ごとにキーボードの接続を確認しています(……が増える)。この状態でGK61 DSの場合はESCキーを押しながらUSBを差し込みます。GK61 proの場合はそのまま差し込みます。
abc@VMware:~/qmk_firmware_gk61_pro$ sudo util/docker_build.sh skyloong/gk61/pro_ds:nicola:flash
WARNING: Target folder is not a git repo, you probably downloaded a zip file instead of cloning.
Please consider following https://docs.qmk.fm/#/newbs_getting_started.
Making skyloong/gk61/pro_ds with keymap nicola and target flash
arm-none-eabi-gcc (15:8-2019-q3-1+b1) 8.3.1 20190703 (release) [gcc-8-branch revision 273027]
Copyright (C) 2018 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
Size before:
text data bss dec hex filename
0 48090 0 48090 bbda skyloong_gk61_pro_ds_nicola.bin
Compiling: quantum/command.c [OK]
Linking: .build/skyloong_gk61_pro_ds_nicola.elf [OK]
Creating binary load file for flashing: .build/skyloong_gk61_pro_ds_nicola.bin [OK]
Creating load file for flashing: .build/skyloong_gk61_pro_ds_nicola.hex [OK]
Size after:
text data bss dec hex filename
0 48090 0 48090 bbda skyloong_gk61_pro_ds_nicola.bin
Copying skyloong_gk61_pro_ds_nicola.bin to qmk_firmware folder [OK]
Flashing for bootloader: stm32duino
Bootloader not found. Make sure the board is in bootloader mode. See https://docs.qmk.fm/#/newbs_flashing
Trying again every 0.5s (Ctrl+C to cancel)....................
ファーム書き込み状態のキーボードをPCに差し込むと、VMWareの場合は以下の選択画面が出ます。
仮想マシンを選択してOKをクリックすると書き込みが始まります。書き込み中は絶対にUSBを抜いてはいけません。
..............................
dfu-util 0.9
Copyright 2005-2009 Weston Schmidt, Harald Welte and OpenMoko Inc.
Copyright 2010-2016 Tormod Volden and Stefan Schmidt
This program is Free Software and has ABSOLUTELY NO WARRANTY
Please report bugs to http://sourceforge.net/p/dfu-util/tickets/
Opening DFU capable USB device...
ID 1eaf:0003
Run-time device DFU version 0110
Claiming USB DFU Interface...
Setting Alternate Setting #2 ...
Determining device status: state = dfuIDLE, status = 0
dfuIDLE, continuing
DFU mode device DFU version 0110
Device returned transfer size 1024
Copying data from PC to DFU device
Download [=========================] 100% 48092 bytes
Download done.
state(8) = dfuMANIFEST-WAIT-RESET, status(0) = No error condition is present
Done!
Resetting USB to switch back to runtime mode
abc@VMware:~/qmk_firmware_gk61_pro$
キーボードのUSBを一度抜いて再度差し込むとキーボードとして認識されて使えるようになります。
6. [付録] VSCodeのインストール
QMEをVMWareのUbuntuに入れた場合、VSCodeをUbuntuにインストールした方が便利です。
フォルダーを開くからQMKのソースが入っている \qmk_firmware_gk61_pro を指定するとコードの編集ができます。またターミナルからDockerでビルド出来ますが、これは個別のターミナルでも出来るので不要かもしれません。