Japanese Stable CLIP を試してみた

カーネルモジュールに署名する

https://pokotenote.blogspot.com/2020/11/ok.html

自分でビルドしたカーネルで起動ができましたが、カーネルモジュールをロードしようとすると、

insmod /vendor/lib/modules/qca_cld3_wlan.ko
insmod: failed to load /vendor/lib/modules/qca_cld3_wlan.ko: Required key not available
エラーになってしまい、ロードできません。
これは、モジュールには署名されている必要があり、その署名がカーネルに埋め込まれるモノとペアになっていないと上記のエラーがでるようです。
カーネルの署名はビルド時に自動生成されるので、自分でビルドしたカーネルと、vendor パーティションにある元のモジュールでは署名が一致しないのですね。

カーネルを gcc 4.9 でビルドしていれば、問題は署名だけなので、それを修正すればよいはずです。カーネルをビルドした際に、out フォルダ配下にカーネルモジュールも生成されますが、このモジュールはまだ署名されていないので、これもそのままでは使えません。
どうやら、カーネルへの署名は make modules_install プロセスで実施されるようなので、この時点では署名前のモジュールしか生成されていません。

では、どのように署名をすればいいのでしょうか?

これは、コマンドが用意されていました。カーネルをビルドした際に作成される、out/script/sign-file というコマンドがそれです。このコマンドの構文は、
scripts/sign-file [-dp] hash algo="" key x509 module [dest]
となります。hash algo は sha256、key と x509 は out/certs/signing_key.pem と out/certs/signing_key.x509 を、module は署名するモジュールを指定します。モジュールは、実機から抜き出してくればよいかと思います。

これを、/vendor/lib/modules 配下の各モジュールに実施して、再度配置すればモジュールがロード可能になります。

この辺のモジュールへの署名については、カーネルのドキュメントに記述があるようでした。
Web で見る場合は以下を参照で。

コメント