Qmk Ver0.26.00に最新化してエラーと戦った話
最初に
最近qmkに大幅な更新が行われたとのことで、早速最新化してみようと更新を行いました。
更新の手順はこちらの記事を参考にしました。
クローンしたのがQMK公式リポジトリなのか、フォークしたリポジトリなのかで手順が異なるので注意です。
早速新しいファームウェアを作成したところ、このような形に。
内容を編集してファームウェを作成していきます。ファームウェアの中身についてはymknさんのこちらの記事が参考になります。
内容を書き、いざコンパイル!と行き込んだのもつかの間、下記のようなエラーが出ました。
./lib/chibios/os/rt/include/ch.h:125:10: fatal error: chlib.h: No such file or directory
125 | #include "chlib.h"
| ^~~~~~~~~
chatGPTさんに聞いてみたところ、
「このエラーメッセージは、chlib.h というファイルが見つからないことを示しています。これは、QMK の ChibiOS サブモジュールが正しくインストールされていないか、もしくはサブモジュールの更新が不完全である可能性があります。」
とのこと。以下はchatGPTと共にこのエラーを解消するために行った手順を備忘録として残します。ほぼchatGPTが教えてくれた内容になります。
長いので、何をしたかだけ知りたい方は目次から「まとめ」に飛んでください。
サブモジュールの更新
サブモジュールが正しくない、というエラーが出ているのでサブモジュールを更新します。
cd /c/Users/XXXXX/Documents/GitHub/qmk_firmware (クローンが置いてあるところ)
git submodule update --init --recursive
上記のコマンドを実行します。
そしてまたエラーが出ました。エラー内容は下記の通り。
fatal: Unable to checkout 'XXXXXXXXXXXXXXXXXXXX(英数字の羅列)' in submodule path 'lib/chibios-contrib'
chatGPTによるとこのエラーは「サブモジュールの特定のコミットにチェックアウトできないことを示しています。これは、リポジトリの取得に失敗したか、サブモジュールが壊れている可能性があります。」とのこと。
次はこれを改善する必要があります。
サブモジュールのクリーニング
下記のコマンドにてサブモジュールをリセットします。
cd /c/Users/XXXXX/Documents/GitHub/qmk_firmware (クローンが置いてあるところ)
git submodule deinit -f -- lib/chibios-contrib
が、また先ほどと同じエラーが出ました。
ここでchatGPTへの質問を変えてみます。
自分のアカウントのQMKリポジトリをクローンしているのですが、これはコマンドに関係ありますでしょうか。
と聞いてみたところ、
「自分のフォークが QMK の公式リポジトリから分岐しているため、フォークが古くなっている場合があります。まず、公式リポジトリから最新の変更を取り込む必要があるかもしれません。」
との返答がありました。
フォーク元の最新状態の取得
下記のコマンドでフォーク元から最新の情報を取得していきます。
cd /c/Users/XXXXX/Documents/GitHub/qmk_firmware (クローンが置いてあるところ)
git remote add upstream https://github.com/qmk/qmk_firmware.git
git fetch upstream
git checkout master
git merge upstream/master
2行目のコマンド git remote add upstream https://github.com/qmk/qmk_firmware.git
upstream という名前で公式 QMK リポジトリを追加します。これにより、upstream というリモート名で公式リポジトリにアクセスできるようになります。
3行目のコマンド git fetch upstream
これにより、upstream リポジトリの最新の状態がローカルにダウンロードされます。
5行目のコマンド git merge upstream/master
upstream から取得した最新の変更を自分の master ブランチに統合します。
ここまで出来たら、
git push origin master
を実行します。これで、公式リポジトリから取り込んだ変更が自分のリポジトリにも反映されます。
※git push origin master を実行した後、Username for 'https://github.com': と表示されたら、プロンプトに自分の GitHub ユーザー名を入力します。
次に、Password for 'https://username@github.com': と表示されます。ここで、GitHub アカウントのパスワードまたは Personal Access Token (PAT) を入力します。(詳細は割愛)
※ パスワードや PAT はセキュリティ上表示されないため、入力中に文字が見えなくても正常です。メモ帳など一度テキストに打ち込んでコピペする方がやりやすいかもしれません。
改めてサブモジュールの取得
さて、これで最新の状態に更新されました。
改めてサブモジュールを取得していきます。
git submodule deinit -f -- lib/chibios
git submodule update --init --recursive
上記のコマンドを1行づつ行い、サブモジュールを初期化して、必要なデータを再取得します。
git submodule status
このコマンドで各サブモジュールの状態が表示されます。すべてのサブモジュールが正常に取得されていることを確認します。
改めてセットアップとコンパイル
サブモジュールが正常化されたところで、改めて
qmk setup
を行います。
問題なくsetupできたところで、当初のコンパイルできずに困っていたファームウェアを
qmk compile
してみたところ、無事に書きだすことが出来ました。
ここまでが一連の流れでした。
プログラミングについては全然知識がないのでコマンドについてはほぼchatGPTさんに頼りっきりでしたが、解決までたどり着くことが出来ました。
有難うchatGPTさん…!!
まとめ
①フォーク元の最新状態の取得を行った
②サブモジュールをリセットし、再取得した
③セットアップし直し、再度コンパイルを試みた
こういった流れで解決しました。
①のコマンド
cd /c/Users/XXXXX/Documents/GitHub/qmk_firmware (クローンが置いてあるところ)
git remote add upstream https://github.com/qmk/qmk_firmware.git
git fetch upstream
git checkout master
git merge upstream/master
git push origin master (要ID、パスワード)
②のコマンド
git submodule deinit -f -- lib/chibios
git submodule update --init --recursive
git submodule status
③のコマンド
qmk setup
qmk compile
追記
vial-qmkも同じ手順で解決しました。
違うところは
コマンド①
cd C:\Users\XXXXXX\Documents\GitHub\vial-qmk (vial-qmkのクローンがあるところ)
git remote add upstream https://github.com/vial-kb/vial-qmk.git
git checkout master
git merge upstream/master
git push origin master (要ID、パスワード)
↑この三つはmasterが main や vial などになるかもしれません。
あとは同じです。