Debian Linux カーネル ABI バージョン管理

Debian Linux カーネル ABI バージョン管理

Debian カーネルイメージパッケージのバージョン管理を理解しようとしています。

次の出力を例にしてみましょう。

$ apt search linux-image | grep amd64-unsigned

linux-image-5.10.0-10-amd64-unsigned/stable 5.10.84-1 amd64
linux-image-5.10.0-11-amd64-unsigned/stable-security 5.10.92-1 amd64
. . .

私が正しく理解したなら、

  • カーネルバージョン5.10.84-1→ABIバージョン5.10.0-10
  • カーネルバージョン5.10.92-1→ABIバージョン5.10.0-11

明らかに、Linuxカーネルは従わないようですサービスモデルABIはパッチバージョン間でランダムに変更されるためです。

では、Debian は ABI バージョン番号を変更する時期をどのように決定しますか?

答え1

この内容は次のように記録されます。Debian カーネルマニュアル(Debianユーザーもこのdebian-kernel-handbookパッケージをインストールできます):

ABIのメンテナンスとアップデート

ユーザーがツリーの外部モジュールを頻繁に再構築するのを防ぐために、Debian の安定リリースまたは以前の安定リリースへの更新中にカーネル ABI を変更しないようにします。最も重要なことは、ツリーの外部モジュールがABIの対応する部分に依存しないように見えない限り、ABI名を変更せずにそのような変更を避けることです。

バグ修正やカーネル構成の変更により、ABIが変更されることがあります。関数を条件としてエクスポートする CONFIG_FOO場合、または定義が依存する型を使用している場合は、関数をオンまたはオフにするとそのCONFIG_FOO関数 CONFIG_FOOのABIが変更されるため、カーネル全体のABIが変更されます。ほとんどのドライバは何もエクスポートしないため、個々のドライバの設定を有効または変更しても、通常はABIは変更されません。

カーネルビルドプロセスは、エクスポートされた関数または変数ごとに「シンボルバージョン」を生成します。これは依存する定義のハッシュであり、関数のABIが変更されるたびに変更する必要があります。カーネルモジュールローダはシンボルバージョンを比較し、互換性のないモジュールを検出します。完全なシンボルバージョンセットはカーネルABIを表します。

このディレクトリに以前にアップロードされたパッケージのシンボルバージョンを収集し、新しいカーネルをこれらのdebian/abiバージョンと比較します。 ABI名は変更されていないがABI自体が変更された場合(許可されているとマークされた追加または変更を除く)、ビルドは中断されます。

したがって、デフォルトで既存のモジュールとの互換性を保証できない場合は、ABIを変更する必要があります。 ABIの変更はパッケージ変更ログで追跡されますが、変更の具体的な理由は必ずしも含まれていません(複数の場合があります)。

バラよりDebian Linux カーネルのバージョン管理Debian カーネルのバージョン管理スキームのより一般的な説明です。

関連情報