2019-01-17

Planckのキーマップをビルドする

当時使ってたPCではプログラミングしなくなったのと、改めてQMK firmwareのdocument見たらbuild toolsんとこの記事が変わってるので、今度環境構築がてら再確認してfirmwareのとこだけ新しく書こうと思う。

わたしのkeymapのrepo(krymtkts/qmk_firmware)は「デフォのキーマップをコピった」的なコミットを最後に止まってるので、旧PCに遺物が残されてそう...作り直したほうが早いわ😅

去年はWSLで書き込む方法が確か使えてたはずだけど今は非推奨になってて、MSYS2を使う方法が主流になった???謎い🤔

前回のこの辺の続き。

ビルド環境をセットアップする

ドキュメントQMK Firmware - Installing Build Toolsに記載のWSLの手順をそのままでOK。ちょっとWSLを使いたかったのでMSYS2でのやつではあえてやらなかった。

WSL用のセットアップはutil/wsl_install.shで行う。

$ cd ./c/qmk_firmware/
$ ./util/wsl_install.sh

途中ドライバを全部入れる?と聞かれて、それは流石に...と思ったのでConnectedという接続したドライバだけ入れるやつCにした。

Flip入れる?と聞かれたけどつかわないだろうし必要なときに、と思ったのでN

wsl_install.sh完了後にPlanckのrev4のdefaultキーマップを試しにコンパイルする。

bashを再起動してサンプルのコマンドを実行する。

$ make planck/rev4:default

でバイナリが吐き出されたのでOK。

Planckのfirmwareをビルドする

わたしのキーマップはこちら→qmk_firmware/keymap.c at master · krymtkts/qmk_firmware

2017年末頃にビルドしたころとはkeyboards/planck/配下のコードが結構変わってるようなので、作成済みのキーマップを削除して新しくdefaultキーマップを作成する。それ用のシェルがあるので使う。

$ ./util/new_keymap.sh planck krymtkts

これで一旦ビルドする。revisionはわからんけど時期的に5だと思う。[要出典?]

$ make planck/rev5:krymtkts

コマンドラインでfirmwareを書き込む。revision5では以下のコマンドが正しい。

$ make planck/rev5:krymtkts:dfu

でもエラーになった。なんかエラーが無限に繰り返される。CTRL+Cで中断

$ make planck/rev5:krymtkts:dfu
QMK Firmware 0.6.228
Making planck/rev5 with keymap krymtkts and target dfu

avr-gcc (GCC) 4.9.2
Copyright (C) 2014 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 26614 0 26614 67f6 .build/planck_rev5_krymtkts.hex

Compiling: keyboards/planck/keymaps/krymtkts/keymap.c [OK]
Linking: .build/planck_rev5_krymtkts.elf [OK]
Creating load file for flashing: .build/planck_rev5_krymtkts.hex [OK]
Copying planck_rev5_krymtkts.hex to qmk_firmware folder [OK]
Checking file size of planck_rev5_krymtkts.hex [OK]
* The firmware size is fine - 26614/28672 (2058 bytes free)
Error: Bootloader not found. Trying again in 5s.
Error: Bootloader not found. Trying again in 5s.
Error: Bootloader not found. Trying again in 5s.
Error: Bootloader not found. Trying again in 5s.
Error: Bootloader not found. Trying again in 5s.
^Ctmk_core/avr.mk:141: recipe for target 'dfu' failed
make[1]: *** [dfu] Interrupt
Makefile:529: recipe for target 'planck/rev5:krymtkts:dfu' failed
make: *** [planck/rev5:krymtkts:dfu] Interrupt

エラーダイアログで「libusb0.dllがない」というような旨が表示される。WSLでやろうとしたからダメだったのか?

コマンドラインで焼くのを一旦諦めて、qmk_tookbox.exeを使うことにしたら一発成功、Planckに自分のキーマップを焼くことに成功した。

でもコマンドラインで焼けないのは困るので、PlanckのMakefileのrules.mk見てみたところ、

ifeq ($(strip $(KEYBOARD)), planck/rev4)
BOOTLOADER = atmel-dfu
endif
ifeq ($(strip $(KEYBOARD)), planck/rev5)
BOOTLOADER = qmk-dfu
endif

とあって、rev4と4rev5でbootloaderが変わってることから、あれ?わたしのPlanckもしかしてrev4じゃ?と思って試してみたところ...

$ make planck/rev4:krymtkts:dfu
QMK Firmware 0.6.228
Making planck/rev4 with keymap krymtkts and target dfu

avr-gcc (GCC) 4.9.2
Copyright (C) 2014 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.

Compiling: quantum/audio/muse.c [OK]
Compiling: keyboards/planck/planck.c [OK]
Compiling: keyboards/planck/keymaps/krymtkts/keymap.c [OK]
Compiling: quantum/quantum.c [OK]
Compiling: quantum/keymap_common.c [OK]
Compiling: quantum/keycode_config.c [OK]
Compiling: quantum/matrix.c [OK]
Compiling: quantum/process_keycode/process_audio.c [OK]
Compiling: quantum/process_keycode/process_clicky.c [OK]
Compiling: quantum/audio/audio.c [OK]
Compiling: quantum/audio/voices.c [OK]
Compiling: quantum/audio/luts.c [OK]
Compiling: quantum/process_keycode/process_music.c [OK]
Compiling: tmk_core/common/host.c [OK]
Compiling: tmk_core/common/keyboard.c [OK]
Compiling: tmk_core/common/action.c [OK]
Compiling: tmk_core/common/action_tapping.c [OK]
Compiling: tmk_core/common/action_macro.c [OK]
Compiling: tmk_core/common/action_layer.c [OK]
Compiling: tmk_core/common/action_util.c [OK]
Compiling: tmk_core/common/print.c [OK]
Compiling: tmk_core/common/debug.c [OK]
Compiling: tmk_core/common/util.c [OK]
Compiling: tmk_core/common/eeconfig.c [OK]
Compiling: tmk_core/common/report.c [OK]
Compiling: tmk_core/common/avr/suspend.c [OK]
Compiling: tmk_core/common/avr/timer.c [OK]
Compiling: tmk_core/common/avr/bootloader.c [OK]
Assembling: tmk_core/common/avr/xprintf.S [OK]
Compiling: tmk_core/common/magic.c [OK]
Compiling: tmk_core/protocol/lufa/lufa.c [OK]
Compiling: tmk_core/protocol/usb_descriptor.c [OK]
Compiling: tmk_core/protocol/lufa/outputselect.c [OK]
Compiling: lib/lufa/LUFA/Drivers/USB/Class/Common/HIDParser.c [OK]
Compiling: lib/lufa/LUFA/Drivers/USB/Core/AVR8/Device_AVR8.c [OK]
Compiling: lib/lufa/LUFA/Drivers/USB/Core/AVR8/EndpointStream_AVR8.c [OK]
Compiling: lib/lufa/LUFA/Drivers/USB/Core/AVR8/Endpoint_AVR8.c [OK]
Compiling: lib/lufa/LUFA/Drivers/USB/Core/AVR8/Host_AVR8.c [OK]
Compiling: lib/lufa/LUFA/Drivers/USB/Core/AVR8/PipeStream_AVR8.c [OK]
Compiling: lib/lufa/LUFA/Drivers/USB/Core/AVR8/Pipe_AVR8.c [OK]
Compiling: lib/lufa/LUFA/Drivers/USB/Core/AVR8/USBController_AVR8.c [OK]
Compiling: lib/lufa/LUFA/Drivers/USB/Core/AVR8/USBInterrupt_AVR8.c [OK]
Compiling: lib/lufa/LUFA/Drivers/USB/Core/ConfigDescriptors.c [OK]
Compiling: lib/lufa/LUFA/Drivers/USB/Core/DeviceStandardReq.c [OK]
Compiling: lib/lufa/LUFA/Drivers/USB/Core/Events.c [OK]
Compiling: lib/lufa/LUFA/Drivers/USB/Core/HostStandardReq.c [OK]
Compiling: lib/lufa/LUFA/Drivers/USB/Core/USBTask.c [OK]
Linking: .build/planck_rev4_krymtkts.elf [OK]
Creating load file for flashing: .build/planck_rev4_krymtkts.hex [OK]
Copying planck_rev4_krymtkts.hex to qmk_firmware folder [OK]
Checking file size of planck_rev4_krymtkts.hex [OK]
* The firmware size is fine - 26614/28672 (2058 bytes free)
Bootloader Version: 0x00 (0)
Erasing flash... Success
Checking memory from 0x0 to 0x6FFF... Empty.
Checking memory from 0x0 to 0x67FF... Empty.
0% 100% Programming 0x6800 bytes...
[>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>] Success
0% 100% Reading 0x7000 bytes...
[>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>] Success
Validating... Success
0x6800 bytes written into 0x7000 bytes memory (92.86%).

成功した。時期的にrev5だと思ってたけどrev4だったとは😅まあうまくいってよかった。

キーマップはまだしっくり来ていないのでちまちま更新する予定。