log

Windows10・WSLで自作キーボードのファームを焼いた(焼き編)

焼き編は焼くときに毎度やることなどをメモしていく。
焼く前に前提として下準備編を済ませておく必要がある。
udaryyyy.hatenadiary.com

事前知識

Git

バージョン管理システム
不特定多数で1つのプロジェクトを進めていくときに活用できる。
backlog.com
backlog.com
↑この辺まで読む
git-scm.com
今回は特に不特定多数でプロジェクトを進めるわけではなく、個人的にファームウェアを焼くことだけを目的としているためGitの利用は不要に思える。
だがしかし、今後qmk/qmk_firmwareの更新があった場合、それを反映するときにGitを活用しておけば自分の行った変更を保護したまま最新化が行えるため、必要となる。
今回は自分の編集を記録するブランチを作成してからキーマップファイルの変更を行い、ProMicroへの焼きこみを終えた後はキーマップの変更内容を記録(git addとgit commit)し、GitHub上でForkした自分のqmk_firmwareに変更を反映(git push)するところまで実行する。

Gitのブランチを作り移動する

Ubuntuにて下記を入力し、ブランチ情報を確認する。

git branch

このブログを書いている人間レベルだと、

* master

のみが出力される。
何度目かの場合は過去に作ったブランチも表示される。
ここで新しいブランチを作成しそのブランチに移動する。

git checkout -b 〇〇

〇〇は任意の名前などを入れる。
ユーザ名とキーボード名を組み合わせたものなどがよさそう。
ここでもう一度下記を入力する。

git branch

そうすると、下記のように表示される。

  master
* 〇〇

先ほど、〇〇ブランチを作成し移動したため、〇〇の表記が増えるのと、*マーク(自分の作業が記録されるブランチの前につく)が〇〇の前に移動されていればOK。

キーマップファイルをコピーする

/qmk_firmware/keyboards/に移動する。
目的のキーボードのディレクトリを開き、keymapsフォルダに移動する。
~/qmk_firmware/keyboards/キーボード名、みたいな感じになるはず。
下記でフォルダ内のディレクトリ・ファイルの名前一覧が確認できる。

ls

いくつかフォルダがあるので、どれかを自分で編集するためにコピーする。
名前は後で見たらわかれば何でもOK。ユーザー名とか。
例えばdefaultフォルダを自分用に〇〇という名前でコピーするには

cp -r default 〇〇

を入力する。

ls

これで出力された一覧に、〇〇の表記が増えていれば完了。

キーマップの編集

編集したい場合はメモ帳でもvimでもいいので、keymap.cをいじればよい。
下記参考
docs.qmk.fm
qiita.com

makeする

いままで行ったキーマップの変更などをもとにして、ProMicroに書き込むバイナリデータ(=firmware)を作成するコマンド、それがmakeである。
makeコマンドはqmk_firmwareフォルダ直下にて行う必要がある。
例えばMint60の場合

make mint60:〇〇

この〇〇は「キーマップファイルをコピーする」の章で任意に設定した〇〇と同じ文字を入力する。
makeが完了したあと

ls -l *.hex

を入力し、直近の時刻で.hexファイル(ファームウェア)が生成されたことを確認する。
この.hexファイルの名前は書き込みの時に入力するのでメモ帳にでもコピーしておくなどする。

ポートを確認する

usagi.hatenablog.jp
上記記事全体を一読したうえで、「WSL の /dev/ttyS 系と Pro Micro の RESET の注意点」の部分を参考にする。書き込みもこの記事に書いてありますね。
なお、デバイスマネージャーで「ポート」が出てこない場合は「表示」→「非表示のデバイスの表示」で表示される。

書き込むための下準備をする

書き込むために権限の追加などが必要。

以下を実行すればよし
sudo usermod -a -G dialout <username>
sudo chmod a+rw /dev/ttyACM0
usernameのところにはUbuntuのIDをいれます。

【Ubuntu】arduinoに書き込もうとしたら怒られた - ブルーの趣味Log

この2つのコマンドを実行する。
このttyACM0となっているところはttyS〇(〇=「ポートを確認する」で確認した数字)に置き換える。

ファームウェアを書き込む

コマンドを用意する。

用意するだけで実行はまだ。
メモ帳とかにコピーして自分の要素に置き換えておく。

avrdude -p atmega32u4 -c avr109 -P /dev/ttyS● -e -v -U flash:w:/mnt/c/Users/udaryyyy/qmk/qmk_firmware/〇〇.hex

●は「ポートを確認する」で確認したポート番号(私のPCは4だった)
〇〇は「makeする」の最後の部分で確認した.hexファイルの名前を入れる。
あとユーザ名udaryyyyになっているので自分のユーザ名に変更してください。

バイスマネージャーの起動

Windowsのスタートメニューボタンを右クリックし、デバイスマネージャーを起動。
「表示」→「非表示のデバイスの表示」を押下し、非表示のデバイスを表示させる。
メイン画面内「ポート(COMとLPT)」をクリックする。

ProMicroの接続とリセットにかかる時間の確認

バイスママネージャを見ながら、画面が更新されるまでタクトスイッチを押し続けてみて、どのくらいの時間がかかるかを確認。(私の場合は大体1~2秒くらいだった)

コマンドの入力→ProMicroのリセット→コマンド実行

先ほど用意したコマンドをUbuntu側に入力し、エンターキーを押すだけで実行できる状態にする。
ProMicroのタクトスイッチを先ほど確認した時間押し、デバイスマネージャが更新されるのとほぼ同時にコマンドを実行する。
画面に

Reading | ################################################## | 100%

みたいなやつが3回でてきて、終わったっぽい感じになったら出来上がり。
実際に使ってみて問題がないことを確認する。

git addしてgit commitする

今まで行ったキーマップファイルの変更をGitに記録(git addしてgit commit)する。
まずはGitに未記録の変更があるかを確認してもらいます。

git status

たとえば今回、udaryyyyがudaryyyyブランチでmint60のキーマップを変更する作業をした場合以下のように出力される。

udaryyyy@PC名:~/qmk_firmware$ git status
On branch udaryyyy
Your branch is up to date with 'origin/udaryyyy'.

Untracked files:
  (use "git add <file>..." to include in what will be committed)

        keyboards/mint60/keymaps/udaryyyy/

keyboards/mint60/keymaps/udaryyyy/というフォルダが新しくできていることを認識しているようなので、git addしてフォルダとファイルを作成した履歴を追加する。

git add keyboards/mint60/keymaps/udaryyyy/

addのあとのパスは出力の最後の行をコピペでOK。
この後、再度

git status

を実行すると、

On branch udaryyyy
Your branch is up to date with 'origin/udaryyyy'.

Changes to be committed:
  (use "git reset HEAD <file>..." to unstage)

        new file:   keyboards/mint60/keymaps/udaryyyy/config.h
        new file:   keyboards/mint60/keymaps/udaryyyy/keymap.c
        new file:   keyboards/mint60/keymaps/udaryyyy/readme.md

となり、commit待ちの新規ファイル作成履歴があるというようになる。
ここでcommitする。

git commit

パス記載の必要はない。(Change to be committedの対象すべてcommitされる)
commitが完了する前に一度エディタが立ち上がり、変更内容の記載を求められる。
後から変更内容一覧を参照できるので、端的に書いておくとよい。
「mint60_FnとAlt入れ替え」とかそんな感じ、書き終わったら指示に従ってExitする。
これでgit commitが完了。

git pushする

Githubに記録(git push)する。

git push

GitHubのUsernameとPasswordが要求されるので入力。
無事終了したように見えれば終了。


~完~