自 Android 5.0 起,Linux 核心上的 Android 網路堆疊正常運作需要多項提交內容,這些內容相對較晚才上傳,或尚未上傳。手動驗證必要核心功能或追蹤缺少的提交內容並不容易,因此 Android 團隊會分享他們用來確保核心行為符合預期的測試。
執行測試的原因
我們之所以進行這些測試,主要有三個原因:
- 裝置使用的確切 Linux 核心版本通常因裝置而異,且不執行測試就難以判斷任何核心是否正常運作。
- 將核心修補程式轉移到不同核心版本或不同裝置樹狀結構時,可能會產生細微問題,如果不執行測試,就無法發現這些問題。
- 新的網路功能可能需要新的核心功能或修正核心錯誤。
如果測試未通過,裝置的網路堆疊行為不正確,就會導致使用者可見的連線錯誤 (例如 Wi-Fi 網路中斷)。裝置可能也會無法通過 Android Compatibility Test Suite (CTS) 測試。
使用測試
測試會使用 User-Mode Linux,在 Linux 主機上以程序的形式啟動核心。請參閱「建立建構環境」一文,瞭解適用的作業系統版本。單元測試架構會使用適當的磁碟映像檔啟動核心,並從主機檔案系統執行測試。測試以 Python 編寫,並使用 TAP 介面來練習核心行為和 Socket API。
為 ARCH=um 編譯核心
如要執行測試,核心必須為 ARCH=um SUBARCH=x86_64 編譯。上游和常見的 Android 核心樹狀結構 (例如 android-4.4) 都支援這個架構。但有時裝置核心不會以這種模式編譯,因為裝置樹狀結構在常見檔案 (例如 sys/exit.c) 中包含裝置專屬或硬體專屬的程式碼。
在許多情況下,只要確保硬體專屬程式碼位於 #ifdef 後方即可。通常這應該是控制與程式碼相關特定功能的設定選項上的 #ifdef。如果沒有這類設定選項,請將硬體專屬程式碼放在 #ifndef CONFIG_UML 區塊內。
一般來說,修正這個問題應由核心樹狀結構供應商 (例如晶片組或 SoC 供應商) 負責。我們正與原始設備製造商和供應商合作,確保目前和未來的核心都能編譯 ARCH=um
SUBARCH=x86_64,且不需要進行任何變更。
執行測試
測試位於 kernel/tests/net/test。建議從 AOSP 主線執行測試,因為這些測試是最新版本;在某些情況下,特定 Android 版本正常運作所需的核心功能,在該版本中尚未完全涵蓋測試範圍。如要瞭解如何執行測試,請參閱核心網路測試 README 檔案。基本上,從核心樹狀結構頂端執行:
ANDROID_TREE/kernel/tests/net/test/run_net_test.sh all_tests.sh
通過測試
核心網路測試 Python 來源檔案包含註解,指定已知通過測試所需的核心提交內容。測試應在常見的 Kernel 樹狀結構中通過,也就是 AOSP 專案中所有常見的 Kernel 分支 android-4.4 以上版本。kernel/common因此,只要持續從對應的通用核心分支合併,即可通過核心測試。
貢獻
回報問題
如要回報核心網路測試的任何問題,請前往 Android Issue Tracker,並加上 Component-Networking 標籤。
記錄提交內容並新增測試
如要回報上述問題,並盡可能上傳變更來修正問題,請在下列情況中執行此操作:
- 測試未通過常見核心樹狀結構
- 您發現來源註解中未提及的必要提交內容,
- 如要讓測試通過上游核心,必須進行重大變更
- 您認為測試過度指定,或測試在未來的核心上失敗
- 您想為現有測試新增更多測試或擴大涵蓋範圍。