启用 16 KB 开关

16 KB 切换开关允许您尝试 16 KB 内核。此开关可以在 4 KB 内核和 16 KB 内核之间切换,可以在设置应用的“开发者选项”菜单中找到。16 KB 切换开关可用于检查应用程序与 16 KB 内核的兼容性,但由于在 16 KB 模式下使用子页块(当为 /data/metadata 分区使用 EXT4 时),它可能无法反映实际 16 KB 设备的性能。

配置切换开关的步骤

  1. 确保设备已设置变量以实现页面大小无关性(可与 4 KB 和 16 KB 页面大小的内核一起使用)。您可能需要直接安装 16k 内核,以确保设备可以直接在 16 KB 模式下工作,然后再继续添加开发者选项。请参阅虚拟设备示例 目标配置

        PRODUCT_NO_BIONIC_PAGE_SIZE_MACRO := true
        PRODUCT_MAX_PAGE_SIZE_SUPPORTED := 16384
    
  2. 设置产品变量以在设置中显示开发者选项 PRODUCT_16K_DEVELOPER_OPTION := true

  3. 使用 BOARD_KERNEL_PATH_16K 设置内核路径。此内核应使用 CONFIG_ARM64_16K_PAGES=y 构建。

      BOARD_KERNEL_PATH_16K := kernel/prebuilts/mainline/$(TARGET_KERNEL_ARCH)/16k/kernel-mainline.
    
  4. 设置模块配置路径 BOARD_KERNEL_MODULES_16K。这指向支持 16KB 的内核模块。设置这些参数将在系统分区上创建两个 OTA - boot_ota_16k.zip(用于切换到 16 KB 内核)和 boot_ota_4k.zip(用于切换到 4 KB 内核)。通过设置 BOARD_16K_OTA_USE_INCREMENTAL := true 来启用增量 OTA,以获得更小的引导 OTA 大小。

      BOARD_KERNEL_MODULES_16K += $(wildcard kernel/prebuilts/mainline/$(TARGET_KERNEL_ARCH)/16k/*.ko)
      BOARD_KERNEL_MODULES_16K += $(wildcard kernel/prebuilts/common-modules/virtual-device/mainline/$(TARGET_KERNEL_ARCH)/16k/*.ko)
    
  5. 设置 BOARD_16K_OTA_MOVE_VENDOR := true 以将 OTA 移动到 vendor 分区。可选,大多数设备不应设置此项。

验证

成功设置后

  1. 16 KB 切换开关在设置应用中可见,显示“以 16 KB 页面大小启动”。
  2. /system/boot_otas/vendor/boot_otas 包含两个 OTA zip 文件 - boot_ota_16k.zipboot_ota_4k.zip

使用 16 KB 切换开关

  1. 按照 开发者选项文档 中的指示启用开发者选项。
  2. 如果设备被检测为 OEM 锁定,则会显示一个对话框,请求用户 OEM 解锁手机。按照步骤进行 OEM 解锁
  3. 当用户点击“以 16 KB 页面大小启动”时,/data/metadata 分区需要为 ext4。如果不是,则会显示一个对话框,请求用户擦除设备。回答“是”会擦除设备,您将不得不再次激活开发者选项。
  4. 16 KB 切换开关现在显示一个确认对话框,以切换到 16 KB,并在确认后应用引导 OTA。然后,您可以在 4 KB 和 16 KB 模式之间来回切换,而无需清除数据分区来测试应用行为。

检查 16 KB 模式

按照 获取页面大小 中的步骤验证页面大小。