Linux 穩定版合併

每天都會將大量變更提交至上游 Linux 核心。這些變更通常不會經過安全性影響評估,但其中許多變更可能會影響核心的安全性。評估這些變更對安全性造成的影響,是一項成本高昂且可能無法實行的作業。而是要定期與上游 Linux kernel 同步變更,以獲得更具永續性且可維護的方法是。

建議您定期使用較新的長期支援 (LTS) 核心更新裝置。定期的 LTS 更新可協助解決未經認可的潛在安全漏洞,例如 這份 Project Zero 報告 (2019 年初),在公開揭露或遭惡意人士發現之前,就已解決這類問題。

必要條件

  • Android 通用核心分支版本 (來自 Android 開放原始碼計畫)
  • 目標裝置核心的 LTS 合併階段分支
  • 裝置核心發布分支
  • Git 存放區
  • 核心建構工具鍊

與 LTS 變更合併

合併 LTS 變更
圖 1:合併 LTS 變更

以下步驟概述 LTS 合併的一般步驟。

  • 將目標核心版本分支併入 -LTS 前置分支
  • 在本機將 linux-stable 或 Android 通用版本合併至 -LTS 暫存分支
  • 解決合併衝突 (視需要諮詢區域/代碼擁有者)
  • 在本機建構並執行例行性/單元測試 (請參閱下方的測試一節)
  • 上傳並合併 Android 通用變更至 LTS 暫存分支
  • 使用 -LTS 測試分支進行全面測試 (請參閱下方的測試部分)
  • 查看測試結果
  • 解決任何迴歸問題,視需要進行快速合併
  • 將 -LTS 暫存分支合併至主要裝置核心版本分支
  • 為裝置建立新的 Android 版本 (內含測試環境 LTS 核心)
  • 使用新核心編譯發布版本/ROM

與 LTS 合併的範例。

將 android-4.9 合併至主分支 (透過 LTS 前置區),並檢出及同步 LTS 前置區分支:

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 通用項目合併至 LTS 階段。

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

解決合併衝突

在大多數情況下,Android 通用核心與 -LTS 暫存分支之間會發生衝突。在 LTS 合併期間解決合併衝突可能相當困難,因此以下提供一些實用提示,協助您解決這些問題。

逐步合併

如果在裝置核心透過 LTS 更新後已過很長一段時間,則自上次合併的上游更新發布以來,可能已有 (超過 50 個) 穩定版。要解決這個問題,最佳做法是一次逐步合併較小的版本 (<=5 個子版本),並在每個步驟各階段進行測試。

舉例來說,如果裝置核心子層級為 4.14.100,而上游穩定子層級為 4.14.155,建議以小幅增量合併,確保可適當審查及測試合理數量的變更。

一般來說,我們發現以每個合併版本的 5 個次要版本為單位,逐步處理批次作業,可確保更易於管理的修補程式集合。

測試

快速啟動測試

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

使用 USB 傳輸線將目標裝置連接至電腦,然後使用 Android Debug Bridge (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)

Android 測試

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

請檢查 /dev/kmsg 是否有任何錯誤,並確認沒有錯誤後再繼續。請測試下列項目,確保一切運作正常。

  • Wi-Fi 速度
  • Chrome 瀏覽器
  • 使用相機應用程式拍攝圖片和影片
  • 使用內建喇叭和藍牙耳機播放 YouTube 影片
  • 透過電信業者網路撥打電話
  • 透過 Wi-Fi 進行視訊通話

自動化測試套件

您可以使用供應商測試套件 (VTS) 和自動化穩定性壓力測試,執行最終驗證作業,確保產品映像檔不會退化。