状況を想像してみてください。
あなた自身のカスタムカーネルを実行しています。新しい小さなアップデートがリリースされました。それが昨日リリースされ、すでに実行されていると.config
しましょう。5.16.16
5.16.15
どうやって決めますか?〜しなければならない5.16.16
変更が含まれています実際に設定に影響しますか?コンパイルして再起動する必要がありますか、それとも0に変更され、安全にスキップできますか?
私はこれについて考えています:
- パッチ適用
- カーネルバージョンをすでに実行しているバージョンに戻します。
- カーネルをビルドし、一時ディレクトリにインストールします。
- バイナリ比較結果ファイル
これはいいえ。モジュールは一致するかもしれませんが(完全にはわかりません)、vmlinuz
ビルド日時とカーネルがビルドされた回数を識別する数字(例:Linux localhost.localdomain 5.16.15 #1 SMP PREEMPT Thu Mar 17 11:20:15 2022 x86_64 x86_64 x86_64 GNU/Linux
- 見てわかるように)が含まれているため、異なります#1
。
これは何とかスキップする必要があります。
つまり、ローカル変数を無視する再現可能なカーネルビルドを探しています。
持つタキシードを作る しかし、私のカスタム.configを使用する方法がわかりません。それがすべてです。
答え1
ここで知っておくべきことを知らせる再現可能なカーネルビルドを取得する簡単な方法はありません。
ただし、カーネルのビルドは実際に再構築する必要があるファイルだけを再構築するのに非常にうまく機能するため、これを使用してバンプの関連性を高めることができます。
$ git checkout v5.16.14
$ make bzImage modules
$ md5sum $(find . -name \*.o | sort) > v5.16.14.sums
$ git checkout v5.16.15
$ make bzImage modules
$ md5sum $(find . -name \*.o | sort) > v5.16.15.sums
(および上記の使用は、カーネルのファイル命名制限のためにfind
楽観的に可能です。)sort
vmlinux.o
そして、ファイルkallsyms
以外のターゲットファイルに変更が表示されたら、そのソースファイルの変更を調べることができます。
最も信頼性の高いポイントリリースの逸脱の程度を考慮すると、これは次のとおりです。何もないビルドを変更するソースコードから。を使用すると、make allnoconfig
最小x86-64カーネルは5.16.14と5.16.15の間に25個の変更されたオブジェクトを表示します。