每天都會向上游 Linux 核心提交大量更改。通常不會評估這些變更的安全性影響,但其中許多變更有可能影響核心的安全性。評估每個變更的安全影響是一項昂貴且可能不可行的操作。相反,一種更永續和可維護的方法是定期與上游 Linux 核心同步變更。
建議定期使用較新的長期支援 (LTS) 核心更新裝置。定期 LTS 更新可以幫助解決潛在的未被識別的安全漏洞,例如 2019 年初(在公開揭露或被惡意行為者發現之前)發布的零項目報告。
先決條件
- Android 通用核心分支(來自 AOSP)
- 目標裝置核心的 LTS 合併暫存分支
- 設備內核發布分支
- Git 倉庫
- 內核建構工具鏈
與 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) 和自動穩定性壓力測試提供的測試套件進行的。