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 核心似乎沒有遵循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 核心版本控制。