Android 15 (Android 開放原始碼計畫實驗功能) 以上版本支援建構 頁面大小為 16 KB 的 Android 裝置。這個選項會使用額外記憶體, 可以改善系統效能
16 KB 頁面僅支援含有 16 KB 核心的 arm64
目標。
不過,您也可以選擇
在 x86_64
上模擬 Cuttlefish 的 16 KB 使用者空間。
如要啟用 16 KB 頁面,請在裝置上設定下列建構選項:
PRODUCT_NO_BIONIC_PAGE_SIZE_MACRO := true
移除PAGE_SIZE
,元件則會在執行階段決定網頁大小。PRODUCT_MAX_PAGE_SIZE_SUPPORTED := 16384
,可確保平台 ELF 檔案 以 16 KB 對齊。這個大於需要的大小適用於 未來相容性。以 16 KB ELF 對齊後,核心可支援 4 KB/16 KB 網頁大小。
驗證建構標記
選取 lunch
目標後,請確認已設定建構標記
測試環境:
$ source build/envsetup.sh
$ lunch target
$ get_build_var TARGET_MAX_PAGE_SIZE_SUPPORTED
16384
$ get_build_var TARGET_NO_BIONIC_PAGE_SIZE_MACRO
true
如果前兩個指令分別傳回 16384
和 true
,就表示您的建構作業
根據 16 KB ELF 對齊建構共用程式庫
如要建構 Cloud Storage 中的 Android 專案, 您只需要在目標中設定這些建構標記:
PRODUCT_NO_BIONIC_PAGE_SIZE_MACRO := true
PRODUCT_MAX_PAGE_SIZE_SUPPORTED := 16384
建立不屬於共用程式庫的共用程式庫 Android 專案, 您需要傳遞下列連接器標記:
-Wl,-z,max-page-size=16384
驗證二進位檔,並預先建構以 16 KB ELF 對齊
驗證對齊和執行階段行為的最佳方式,就是利用 16 KB 已編譯的核心。不過,為了提早找出部分問題:
從 Android W (AOSP 實驗功能) 開始,您可以設定
PRODUCT_CHECK_PREBUILT_MAX_PAGE_SIZE := true
於建構期間。使用Android.bp
和ignore_max_page_size: true
Android.mk
中的LOCAL_IGNORE_MAX_PAGE_SIZE := true
可暫時忽略 具體做法是指示 Kubernetes 建立並維護 一或多個代表這些 Pod 的物件這些設定會驗證所有預先建構的項目,讓您偵測到 已更新,但並未對齊 16 KB。您可以執行
atest elf_alignment_test
,以驗證 裝置端 ELF 檔案 Android 15 (Android 開放原始碼計畫實驗功能) 以上版本。