Simulate Cuttlefish with 16 KB page size on x86_64

This setup requires an x86_64 Linux host. This page shows how to build and start Cuttlefish with 16 KB page size support on x86_64. The instructions on this page assume that Cuttlefish packages are installed in your machine. For instructions to install them, see Step 1 of Install Cuttlefish.

You can launch Cuttlefish by either downloading the prebuilt artifacts directly from the Android Continuous Integration site or build them from AOSP if you need to modify the source code.

Kernel implementation

Support for emulating x86_64 16 KB pages is added in the Android 14 6.6 GKI in the page_size_emulation patch series. Passing page_shift=14 on the command-line enables this emulation. x86_64 targets with the _16k suffix (or old targets with the _pgagnostic suffix), such as aosp_cf_x86_64_phone_pgagnostic, pass this option by default and work in 16 KB mode by default.

Launch Cuttlefish by downloading the artifacts

Navigate to Android Continuous Integration site and enter aosp-main-throttled as the branch name. Click the latest build for the aosp_cf_x86_64_phone_pgagnostic target. Now, follow the instructions from Step 5 of Install Cuttlefish.

Launch Cuttlefish by building from AOSP

Build and launch Cuttlefish with a page-agnostic target:

$ mkdir main && cd main
$ repo init -u https://android.googlesource.com/platform/manifest -b main
$ repo sync -c -j32

# Build cf agnostic target.
$ source build/envsetup.sh
$ lunch aosp_cf_x86_64_phone_pgagnostic-trunk_staging-userdebug
$ m

# Launch cf with a kernel with 16 KB page size support.
$ launch_cvd
...
...
VIRTUAL_DEVICE_DISPLAY_POWER_MODE_CHANGED
virtio_input_hid_handle_status: unknown type 20
virtio_input_hid_handle_status: unknown type 20
virtio_input_hid_handle_status: unknown type 20
virtio_input_hid_handle_status: unknown type 20
Generating new secret with slot ID: 4
VIRTUAL_DEVICE_BOOT_STARTED
VIRTUAL_DEVICE_NETWORK_MOBILE_CONNECTED

Verify page size and boot

To verify page size and boot status:

  1. Access the shell as root:

    $ adb root
    adbd is already running as root
    $ adb shell
    vsoc_x86_64_pgagnostic:/ #
    
  2. Verify page size and boot status:

    vsoc_x86_64_pgagnostic::/ # getconf PAGE_SIZE
    16384
    vsoc_x86_64_pgagnostic::/ # getprop | grep sys.boot.completed
    sys.boot_completed: 1