Android 15(AOSP 實驗版)及更高版本支援建置具有 16kB 頁面大小的 Android。此選項使用額外的內存,但會提高系統效能。
16kB 頁面僅在具有 16kB 核心的arm64
目標上支援。不過,還有一個選項可以在x86_64
上為 Cuttlefish 模擬 16KB 使用者空間。
若要啟用 16kB 頁面,請在裝置上設定以下建置選項:
-
PRODUCT_NO_BIONIC_PAGE_SIZE_MACRO := true
刪除PAGE_SIZE
定義,並使元件在執行時決定頁面大小。 -
PRODUCT_MAX_PAGE_SIZE_SUPPORTED := 16384
確保平台 ELF 檔案以 16kB 對齊方式建置。這個大於需要的尺寸是為了將來的兼容性。透過 16kB ELF 對齊,核心可以支援 4kB/16kB 頁面大小。
驗證建造標誌
選擇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
,則您的建置標誌設定正確。
建立具有 16kB ELF 對齊的共享庫
要建立屬於android 專案一部分的共享庫,您只需在目標中設定這些建置標誌:
-
PRODUCT_NO_BIONIC_PAGE_SIZE_MACRO := true
-
PRODUCT_MAX_PAGE_SIZE_SUPPORTED := 16384
要建立不屬於android 專案的共享庫,您需要傳遞此連結器標誌:
-Wl,-z,max-page-size=16384