Debian

Debian Linux 核心 ABI 版本控制

  • March 2, 2022

我正在嘗試了解 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 核心似乎沒有遵循semver 模型,因為 ABI 在更新檔版本之間的變化相當隨意。

那麼 Debian 是如何確定何時需要調整 ABI 版本號的呢?

這記錄在Debian 核心手冊中(Debian 使用者也可以安裝該debian-kernel-handbook軟體包):

維護和更新 ABI

為了避免使用者需要頻繁地重建樹外模組,我們盡量避免在更新到 Debian 穩定版或 oldstable 版本期間更改核心 ABI。最重要的是,我們避免在不更改 ABI 名稱的情況下進行此類更改,除非樹外模組似乎不依賴於 ABI 的該部分。

對核心的錯誤修復或配置更改可能會改變 ABI。如果導出函式以 為條件 CONFIG_FOO,或者它使用定義依賴於的類型 CONFIG_FOO,則打開 CONFIG_FOO或關閉會更改該函式的 ABI,從而更改整個核心的 ABI。啟用或更改單個驅動程序的配置通常不會更改 ABI,因為大多數驅動程序不會導出任何內容。

核心建構過程為每個導出的函式或變數生成一個“符號版本”。這是它所依賴的定義的散列,並且應該在函式的 ABI 更改時更改。核心模組載入器通過比較符號版本來檢測不兼容的模組。整個符號版本集代表核心 ABI。

我們在目錄下收集以前上傳的包的符號版本debian/abi,然後將新核心與那些進行比較。如果 ABI 名稱未更改但 ABI 本身已更改(添加或我們標記為可接受的更改除外),則建構將中止。

所以本質上,如果不能保證與現有模組的兼容性,ABI 就會改變。ABI 凸起在封裝更改日誌中進行了跟踪,儘管不一定具有凸起的具體原因(很可能不止一個)。

有關 Debian 核心版本控制方案的更一般描述,請參閱Debian Linux 核心版本控制。

引用自:https://unix.stackexchange.com/questions/692596