Linux 穩定的合併

每天都會向上游 Linux 核心提交大量更改。通常不會評估這些變更的安全性影響,但其中許多變更有可能影響核心的安全性。評估每個變更的安全影響是一項昂貴且可能不可行的操作。相反,一種更永續和可維護的方法是定期與上游 Linux 核心同步變更。

建議定期使用較新的長期支援 (LTS) 核心更新裝置。定期 LTS 更新可以幫助解決潛在的未被識別的安全漏洞,例如 2019 年初(在公開揭露或被惡意行為者發現之前)發布的零項目報告

先決條件

  • Android 通用核心分支(來自 AOSP)
  • 目標裝置核心的 LTS 合併暫存分支
  • 設備內核發布分支
  • Git 倉庫
  • 內核建構工具鏈

與 LTS 更改合併

合併 LTS 更改
圖 1 :合併 LTS 更改

以下步驟概述了 LTS 合併的典型步驟。

  • 將目標核心發布分支反向合併到 -LTS staging 分支
  • 將 linux-stable 或 Android common 本地合併到 -LTS staging 分支
  • 解決合併衝突(根據需要諮詢區域/代碼所有者)
  • 在本地建置並執行健全性/單元測試(請參閱下面的測試部分)
  • 將 Android 常見變更上傳並合併到 LTS staging 分支
  • 使用 -LTS staging 分支進行徹底測試(請參閱下面的測試部分)
  • 查看測試結果
  • 解決任何迴歸問題,根據需要平分合併
  • 將 -LTS staging 分支合併到主裝置核心發布分支
  • 為您的裝置建立新的 Android 版本,其中包括暫存 LTS 內核
  • 使用新核心編譯發布版本/ROM

與 LTS 合併的範例。

將 android-4.9 合併到主分支(透過 LTS staging)並簽出並同步 LTS staging 分支:

repo init -b <Device kernel LTS staging branch>  # init
repo sync
git checkout -b lts <Device kernel LTS staging branch>
git merge <Device kernel release branch>         # back-merge
git commit

此時,最好在繼續之前將反向合併推送到來源遠端。之後,將 Android common 合併到 LTS staging 中。

git merge -X patience android-4.9-q            # LTS merge

解決合併衝突

大多數情況下,Android 通用核心和 -LTS staging 分支之間會有衝突。解決 LTS 合併期間的合併衝突可能具有挑戰性,因此以下是解決這些問題的有用提示。

增量合併

如果自從使用 LTS 更新裝置核心以來已經過了很長一段時間,則自從上游發布最後一次合併更新以來,很可能已經有許多(> 50)穩定版本。解決這個問題的最佳方法是透過一次合併較少數量的版本(<=5 個次要版本)來慢慢趕上,同時在每個步驟中進行測試。

例如,如果設備核心版本子層級為 4.14.100,上游穩定子層級為 4.14.155,則最好以小增量進行合併,以確保可以充分審查和測試合理的變更量。

一般來說,我們發現每次合併以 <= 5 個次要版本的批次增量工作可以確保補丁集更易於管理。

測試

快速開機測試

要執行快速啟動測試,您必須先在本機上合併 LTS 變更並建立核心。
以下步驟說明了快速啟動測試流程。

使用 USB 電纜將目標裝置連接到計算機,並使用 Android 偵錯橋 (ADB) 將 .ko 推送到裝置。

adb root
adb disable-verity
adb reboot
(wait for device boot-to-home)
adb root
adb remount
adb push *.ko vendor/lib/modules/
adb reboot bootloader

啟動 dtbo 並旁加載核心映像。

fastboot boot --header-version=2 Image.lz4 (redo again if device rebooted)

檢查 /dev/kmsg 日誌是否有錯誤。

adb shell
su
cat /dev/kmsg  (inspect kernel log for obvious new errors)

安卓測試

首先使用新的 LTS 核心和模組在本地構建 -userdebug 映像。

檢查 /dev/kmsg 是否有任何錯誤並確認沒有錯誤,然後再繼續。測試以下內容以確保一切都按預期運行。

  • 無線網路速度
  • Chrome瀏覽器
  • 使用相機應用程式捕捉影像和視頻
  • 使用內建揚聲器和藍牙耳機播放 YouTube 視頻
  • 透過營運商網路呼叫
  • 透過 Wi-Fi 進行視訊通話

自動化測試套件

確保產品影像不會退化的最終驗證是使用供應商測試套件(VTS) 和自動穩定性壓力測試提供的測試套件進行的。