Android 15 (Android 開放原始碼計畫實驗功能) 以上版本支援使用 16 KB 頁面大小建構 Android。這個選項會使用額外記憶體,但可以改善系統效能。
只有具備 16 KB 核心的 arm64
目標才支援 16 KB 頁面。不過,您也可以選擇在 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 對齊建構共用程式庫
如要建構屬於 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 (Android 開放原始碼計畫實驗功能) 開始,您可以在建構期間設定
PRODUCT_CHECK_PREBUILT_MAX_PAGE_SIZE := true
。如要暫時忽略這些錯誤,請在Android.bp
和Android.mk
中使用ignore_max_page_size: true
。LOCAL_IGNORE_MAX_PAGE_SIZE := true
這些設定會驗證所有預先建構的項目,讓您偵測到更新但 16 KB 不一致的情況。在搭載 Android 15 (Android 開放原始碼計畫實驗功能) 以上版本的裝置上,您可以執行
atest elf_alignment_test
,驗證裝置端 ELF 檔案的對齊方式。