Android 15 (AOSP sperimentale) e versioni successive supportano la creazione Android con una dimensione pagina di 16 kB. Questa opzione utilizza memoria aggiuntiva, migliora le prestazioni del sistema.
Le pagine da 16 kB sono supportate solo su destinazioni arm64
con kernel da 16 kB.
Tuttavia, esiste anche la possibilità di
simulano 16 kB di spazio utente su x86_64
per Seppia.
Per attivare le pagine da 16 kB, imposta le seguenti opzioni di build su un dispositivo:
PRODUCT_NO_BIONIC_PAGE_SIZE_MACRO := true
rimuovePAGE_SIZE
e consente ai componenti di determinare le dimensioni della pagina in fase di runtime.PRODUCT_MAX_PAGE_SIZE_SUPPORTED := 16384
che garantisce i file ELF della piattaforma con un allineamento di 16 kB. Questa dimensione più grande del necessario è per la compatibilità futura. Con un allineamento ELF a 16 kB, il kernel può supportare Dimensioni delle pagine: 4 kB/16 kB.
Verifica i flag di build
Dopo aver selezionato la destinazione lunch
, verifica che i flag di build siano configurati
correttamente nell'ambiente:
$ 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
Se i due comandi precedenti restituiscono rispettivamente 16384
e true
, la build
siano impostati correttamente.
Crea librerie condivise con allineamento ELF di 16 kB
Per creare librerie condivise che fanno parte del Android project, devi solo impostare questi flag di build nella destinazione:
PRODUCT_NO_BIONIC_PAGE_SIZE_MACRO := true
PRODUCT_MAX_PAGE_SIZE_SUPPORTED := 16384
Per creare librerie condivise che non fanno parte di Android project, devi passare questo flag del linker:
-Wl,-z,max-page-size=16384
Verifica i file binari e predefiniti per l'allineamento ELF a 16 kB
Il modo migliore per verificare l'allineamento e il comportamento di runtime è testare ed eseguire un deployment Kernel compilato da 16 kB. Tuttavia, al fine di individuare alcuni problemi prima:
A partire da Android W (AOSP sperimentale), puoi impostare
PRODUCT_CHECK_PREBUILT_MAX_PAGE_SIZE := true
in fase di creazione. Utilizza le funzionalità diignore_max_page_size: true
aAndroid.bp
eLOCAL_IGNORE_MAX_PAGE_SIZE := true
inAndroid.mk
per ignorare temporaneamente che li rappresentano. Queste impostazioni verificano tutti i predefiniti e ti consentono di rilevare quando viene aggiornato, ma non è allineato a 16 kB.Puoi eseguire
atest elf_alignment_test
, che verifica l'allineamento di file ELF sul dispositivo per i dispositivi che vengono avviati con Android 15 (AOSP sperimentale) e versioni successive.