Android 15 (экспериментальная AOSP) и более поздние версии поддерживают сборку Android с размером страницы 16 КБ. Этот вариант использует дополнительную память, но повышает производительность системы.
Страницы размером 16 КБ поддерживаются только на устройствах arm64
с ядрами 16 КБ. Однако существует также возможность имитировать пользовательское пространство размером 16 КБ на x86_64
для Cuttlefish.
Чтобы включить страницы размером 16 КБ, установите на устройстве следующие параметры сборки:
-
PRODUCT_NO_BIONIC_PAGE_SIZE_MACRO := true
удаляет определениеPAGE_SIZE
и заставляет компоненты определять размер страницы во время выполнения. -
PRODUCT_MAX_PAGE_SIZE_SUPPORTED := 16384
который гарантирует, что файлы ELF платформы создаются с выравниванием 16 КБ. Этот размер, превышающий необходимый, предназначен для совместимости в будущем. При выравнивании ELF 16 КБ ядро может поддерживать размеры страниц 4 КБ/16 КБ.
Проверьте флаги сборки
После выбора цели 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
соответственно, ваши флаги сборки установлены правильно.
Создавайте общие библиотеки с выравниванием ELF размером 16 КБ.
Чтобы создать общие библиотеки, являющиеся частью проекта Android , вам нужно всего лишь установить эти флаги сборки в вашей цели:
-
PRODUCT_NO_BIONIC_PAGE_SIZE_MACRO := true
-
PRODUCT_MAX_PAGE_SIZE_SUPPORTED := 16384
Чтобы создать общие библиотеки, которые не являются частью проекта Android , вам необходимо передать этот флаг компоновщика:
-Wl,-z,max-page-size=16384