Android 15 (experimental de AOSP) y las versiones posteriores admiten la compilación. Android con un tamaño de página de 16 KB Esta opción usa memoria adicional, pero mejora el rendimiento del sistema.
Las páginas de 16 KB solo son compatibles con objetivos arm64
con kernels de 16 KB.
Sin embargo, también hay una opción
Simula un espacio de usuario de 16 KB en x86_64
para Cuttlefish.
Para habilitar páginas de 16 KB, configura las siguientes opciones de compilación en un dispositivo:
PRODUCT_NO_BIONIC_PAGE_SIZE_MACRO := true
quita elPAGE_SIZE
. definen y hace que los componentes determinen el tamaño de la página en el tiempo de ejecución.PRODUCT_MAX_PAGE_SIZE_SUPPORTED := 16384
, que garantiza que los archivos ELF de la plataforma se crean con una alineación de 16 KB. Este tamaño más grande de lo necesario es para la compatibilidad en el futuro. Con la alineación ELF de 16 KB, el kernel puede admitir Tamaños de página de 4 KB o 16 KB
Verifica las marcas de compilación
Después de seleccionar el destino lunch
, verifica que las marcas de compilación estén configuradas
de forma correcta en el entorno:
$ 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
Si los dos comandos anteriores muestran 16384
y true
respectivamente, tu compilación
estén configuradas correctamente.
Cómo compilar bibliotecas compartidas con alineación ELF de 16 KB
Para compilar bibliotecas compartidas que son parte del proyecto de Android, Solo debes configurar estas marcas de compilación en tu destino:
PRODUCT_NO_BIONIC_PAGE_SIZE_MACRO := true
PRODUCT_MAX_PAGE_SIZE_SUPPORTED := 16384
Para compilar bibliotecas compartidas que no forman parte de proyecto de Android, debes pasar esta marca del vinculador:
-Wl,-z,max-page-size=16384
Verifica objetos binarios y precompilados para una alineación ELF de 16 KB
La mejor manera de verificar la alineación y el comportamiento del tiempo de ejecución es probar y ejecutar en un Kernel compilado de 16 KB Sin embargo, para detectar algunos problemas antes, haz lo siguiente:
A partir de Android W (experimental de AOSP), puedes configurar
PRODUCT_CHECK_PREBUILT_MAX_PAGE_SIZE := true
en el tiempo de compilación Usaignore_max_page_size: true
enAndroid.bp
yLOCAL_IGNORE_MAX_PAGE_SIZE := true
enAndroid.mk
para ignorarlas temporalmente de ellos. Estos parámetros de configuración verifican todas las compilaciones previas y te permiten detectar se actualiza, pero no está alineado con 16 KB.Puedes ejecutar
atest elf_alignment_test
, que verifica la alineación de archivos ELF integrados en los dispositivos que se lanzan con Android 15 (experimental de AOSP) y versiones posteriores