How to Build Android 15 arm64 for QEMU

Rona February 19, 2025 #Build #Setup

ソースコードを取得

 mkdir android && cd android
 repo init -u https://android.googlesource.com/kernel/manifest -b common-android15-6.6-lts
 repo sync -c -d -j`nproc`

ソースコード改変

必要なLKMをkernel本体にくっつける作業

diff --git a/arch/arm64/configs/gki_defconfig b/arch/arm64/configs/gki_defconfig
index e4a6cfe6fa5b..260082894c00 100644
--- a/arch/arm64/configs/gki_defconfig
+++ b/arch/arm64/configs/gki_defconfig
@@ -785,3 +785,19 @@ CONFIG_KUNIT_TEST=m
 CONFIG_KUNIT_EXAMPLE_TEST=m
 # CONFIG_KUNIT_DEFAULT_ENABLED is not set
 # CONFIG_RUNTIME_TESTING_MENU is not set
+
+CONFIG_PTP_1588_CLOCK=y
+CONFIG_E1000=y
+CONFIG_E1000E=y
+CONFIG_VIRTIO_PCI=y
+CONFIG_VIRTIO_BALLOON=y
+CONFIG_VIRTIO_BLK=y
+CONFIG_VIRTIO_NET=y
+CONFIG_9P_FS_SECURITY=y
+CONFIG_NET_9P=y
+CONFIG_NET_9P_VIRTIO=y
+CONFIG_NET_9P_DEBUG=y
+CONFIG_9P_FS=y
+CONFIG_9P_FS_POSIX_ACL=y
+CONFIG_DEVTMPFS=y
+CONFIG_DEVTMPFS_MOUNT=y

diff --git a/build.config.gki b/build.config.gki
index 4b931d9eb333..da87a30d24e8 100644
--- a/build.config.gki
+++ b/build.config.gki
@@ -1,2 +1,2 @@
 DEFCONFIG=gki_defconfig
-POST_DEFCONFIG_CMDS="check_defconfig"
+###POST_DEFCONFIG_CMDS="check_defconfig"

diff --git a/modules.bzl b/modules.bzl
index c93be156738d..9ad3e7624c74 100644
--- a/modules.bzl
+++ b/modules.bzl
@@ -8,7 +8,7 @@ This module contains a full list of kernel modules

 _COMMON_GKI_MODULES_LIST = [
     # keep sorted
-    "drivers/block/virtio_blk.ko",
+    # "drivers/block/virtio_blk.ko",
     "drivers/block/zram/zram.ko",
     "drivers/bluetooth/btbcm.ko",
     "drivers/bluetooth/btqca.ko",
@@ -39,16 +39,16 @@ _COMMON_GKI_MODULES_LIST = [
     "drivers/net/usb/rtl8150.ko",
     "drivers/net/usb/usbnet.ko",
     "drivers/net/wwan/wwan.ko",
-    "drivers/pps/pps_core.ko",
-    "drivers/ptp/ptp.ko",
+    # "drivers/pps/pps_core.ko",
+    # "drivers/ptp/ptp.ko",
     "drivers/usb/class/cdc-acm.ko",
     "drivers/usb/mon/usbmon.ko",
     "drivers/usb/serial/ftdi_sio.ko",
     "drivers/usb/serial/usbserial.ko",
-    "drivers/virtio/virtio_balloon.ko",
-    "drivers/virtio/virtio_pci.ko",
-    "drivers/virtio/virtio_pci_legacy_dev.ko",
-    "drivers/virtio/virtio_pci_modern_dev.ko",
+    # "drivers/virtio/virtio_balloon.ko",
+    # "drivers/virtio/virtio_pci.ko",
+    # "drivers/virtio/virtio_pci_legacy_dev.ko",
+    # "drivers/virtio/virtio_pci_modern_dev.ko",
     "kernel/kheaders.ko",
     "lib/crypto/libarc4.ko",
     "mm/zsmalloc.ko",
@@ -61,8 +61,8 @@ _COMMON_GKI_MODULES_LIST = [
     "net/6lowpan/nhc_routing.ko",
     "net/6lowpan/nhc_udp.ko",
     "net/8021q/8021q.ko",
-    "net/9p/9pnet.ko",
-    "net/9p/9pnet_fd.ko",
+    # "net/9p/9pnet.ko",
+    # "net/9p/9pnet_fd.ko",
     "net/bluetooth/bluetooth.ko",
     "net/bluetooth/hidp/hidp.ko",
     "net/bluetooth/rfcomm/rfcomm.ko",
@@ -97,7 +97,7 @@ _ARM64_GKI_MODULES_LIST = [
     "arch/arm64/geniezone/gzvm.ko",
     "drivers/char/hw_random/cctrng.ko",
     "drivers/misc/open-dice.ko",
-    "drivers/ptp/ptp_kvm.ko",
+    # "drivers/ptp/ptp_kvm.ko",

Build

tools/bazel run //common:kernel_aarch64_dist

Create rootfs

WIP

Boot

qemu-system-aarch64 \
        -m 2048 \
        -smp 2 \
        -machine virt \
        -cpu cortex-a57 \
        -display none \
        -serial stdio \
        -no-reboot \
        -device virtio-rng-pci \
        -cpu coretex-a57 \
        -device e1000,netdev=net0 \
        -netdev user,id=net0,restrict=on,hostfwd=tcp::20022-:22 \
        -drive file=./rootfs.ext2,if=virtio,format=raw,cache=none \
        -snapshot \
        -kernel ./Image \
        -append 'rdinit=/linuxrc console=ttyAMA0 root=/dev/vda verbose'