見出し画像

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でビルド出来ますが、これは個別のターミナルでも出来るので不要かもしれません。

VSCodeを使ったコード編集


この記事が気に入ったらサポートをしてみませんか?