每天都會將大量變更提交至上游 Linux 核心。這些變更通常不會經過安全性影響評估,但其中許多變更可能會影響核心的安全性。評估這些變更對安全性造成的影響,是一項成本高昂且可能無法實行的作業。而是要定期與上游 Linux kernel 同步變更,以獲得更具永續性且可維護的方法是。
建議您定期使用較新的長期支援 (LTS) 核心更新裝置。定期的 LTS 更新可協助解決未經認可的潛在安全漏洞,例如 這份 Project Zero 報告 (2019 年初),在公開揭露或遭惡意人士發現之前,就已解決這類問題。
必要條件
- Android 通用核心分支版本 (來自 Android 開放原始碼計畫)
- 目標裝置核心的 LTS 合併階段分支
- 裝置核心發布分支
- Git 存放區
- 核心建構工具鍊
與 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) 和自動化穩定性壓力測試,執行最終驗證作業,確保產品映像檔不會退化。