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
如果前两个命令分别返回 16384
和 true
,则表示已正确设置 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