启用 16kB 页面大小

Android 15(AOSP 实验版)及更高版本支持构建具有 16kB 页面大小的 Android。此选项会使用额外的内存,但可以提高系统性能。

只有内核为 16kB 的 arm64 目标才支持 16kB 页面。 不过,还有一个x86_64 上为 Cuttlefish 模拟 16KB 用户空间的选项。

如需启用 16kB 页面,请在设备上设置以下构建选项:

  • PRODUCT_NO_BIONIC_PAGE_SIZE_MACRO := true 会移除 PAGE_SIZE 定义,并让组件在运行时确定页面大小。
  • PRODUCT_MAX_PAGE_SIZE_SUPPORTED := 16384,用于确保以 16kB 对齐方式构建平台 ELF 文件。这种超出所需尺寸的大小是为了在未来实现兼容性。 采用 16kB ELF 对齐方式后,内核可以支持 4kB/16kB 页面大小。

验证 build 标志

选择 lunch 目标后,请验证是否已在环境中正确设置 build 标志:

$ 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

如果前两个命令分别返回 16384true,则表示已正确设置 build 标志。

构建采用 16kB ELF 对齐方式的共享库

如需构建属于 Android 项目的共享库,您只需在目标中设置以下 build 标志即可:

  • PRODUCT_NO_BIONIC_PAGE_SIZE_MACRO := true
  • PRODUCT_MAX_PAGE_SIZE_SUPPORTED := 16384

如需构建不属于 Android 项目的共享库,您需要传递以下链接器标志:

-Wl,-z,max-page-size=16384