Hi again,
Here is the AOSP 10 on ARM64 QEMU version of the procedure I follow.
Andoid
5.10 arm64 kernel build included, like for x86_64.
Appart from using "vdb" and "vdc" into fstab instead of sdb and sdc,
and
removing some "rild.rc" file, the approach is the same. With some
additionnal information at the end
repo init -u <https://android.googlesource.com/platform/manifest> -b
android-10.0.0_r47
repo sync
source build/envsetup.sh
lunch
m -j $(nproc)
# out/target/product/generic_arm64/system.img
# out/target/product/generic_arm64/vendor.img
Create and ext4 format the partition image files:
qemu-img create rootfs.img 5G
qemu-img create userdata.img 1G
qemu-img create cache.img 500M
losetup /dev/loop0 rootfs.img
losetup /dev/loop1 userdata.img
losetup /dev/loop2 cache.img
mkfs -t ext4 /dev/loop0
mkfs -t ext4 /dev/loop1
mkfs -t ext4 /dev/loop2
losetup -d /dev/loop1
losetup -d /dev/loop2
*Mouting the rootfs partition *
mount -t ext4 /dev/loop0 /where/you/want
cp -a [system.img mount point] [rootfs/mount/point]
The content of system.img may be copied inside a folder which is
named like
the mount point. Move everything 1 folder above.
cp -a [vendor.img mount point] [rootfs/mount/point]
If the name of the "vendor.img" mount point is "vendor", everything
should
now be inside the "/vendor" folder of the rootfs. If not, you have to
move
it to /vendor folder
Delete these files:
/vendor/lib/hw/camera.ranchu.so
/vendor/lib/hw64/camera.ranchu.so
/vendor/lib/hw/camera.ranchu.jpeg.so
/vendor/lib/hw64/camera.ranchu.jpeg.so
/vendor/lib/hw/vendor/lib/hw/gralloc.ranchu
/vendor/lib/hw64/gralloc.ranchu
/vendor/lib/hw/hwcomposer.ranchu
/vendor/lib/hw64/hwcomposer.ranchu
/vendor/lib/hw/vulkan.ranchu.so
/vendor/lib/hw64/vulkan.ranchu.so
/vendor/etc/init/rild.rc
Change /vendor/etc/fstab.ranchu, those 2 lines should be enough:
/dev/block/vdb /data ext4
noatime,nosuid,nodev,nomblk_io_submit,errors=panic
wait,check,quota,reservedsize=128M,first_stage_mount
/dev/block/vdc /cache ext4
noatime,nosuid,nodev,nomblk_io_submit,errors=panic
wait,check,quota,reservedsize=128M,first_stage_mount
Change /vendor/etc/init/hw/init.ranchu.rc by changing this line:
setprop ro.hardware.egl emulation
to
setprop ro.hardware.egl swiftshader
*Manufacturing an up to date 5.10 ARM64 Android kernel:*
git clone <https://android.googlesource.com/kernel/configs>
/!\ From configs/android-5.10/android-recommended.config, if you want
to
use a mouse, remove the following line : # CONFIG_INPUT_MOUSE is not
set
git clone <https://android.googlesource.com/kernel/common> -b
android12-5.10
Start from copying "arch/arm64/configs/defconfig" file to the root of
the
kernel tree, name it ".config", and append to it:
CONFIG_NETFILTER_ADVANCED=y
Content of configs/android-5.10/android-base.config
Content of configs/android-5.10/android-recommended.config
Content of configs/android-5.10/android-recommended-arm64.config
make ARCH=arm64 menuconfig, exit, save: yes.
By looking with some tools, some of the things included into
x86_64_defconfig, android-base.config, android-recommended.config are
not
included into the resulting ".config".
It works anyway, but it would be nice to know why theese option aren't
enabling.
Still missing from arm64/configs/defconfig
CONFIG_SYSVIPC=y
CONFIG_ACPI_APEI_PCIEAER=y
CONFIG_KSM=y
CONFIG_IP6_NF_NAT=m
CONFIG_IP6_NF_TARGET_MASQUERADE=m
CONFIG_LEGACY_PTY_COUNT=16
CONFIG_POWER_AVS=y
CONFIG_BACKLIGHT_GENERIC=m
CONFIG_QCOM_IOMMU=y
CONFIG_NFS_FS=y
CONFIG_NFS_V4=y
CONFIG_NFS_V4_1=y
CONFIG_NFS_V4_2=y
CONFIG_ROOT_NFS=y
Still missing from android-base.config:
CONFIG_TRACE_GPU_MEM=y
Still missing from android-recommended.config:
CONFIG_BACKLIGHT_LCD_SUPPORT=y
CONFIG_REFCOUNT_FULL=y
CONFIG_SDCARD_FS=y
Now, some options that are still disabled, but should be enabled
according
to android-base-conditional.xml:
CONFIG_ARMV8_DEPRECATED=y
CONFIG_CP15_BARRIER_EMULATION=y
CONFIG_SETEND_EMULATION=y
CONFIG_SHADOW_CALL_STACK=y
CONFIG_SWP_EMULATION=y
CONFIG_BPF_JIT_ALWAYS_ON=y
CONFIG_KFENCE=y
CONFIG_USERFAULTFD=y
CONFIG_AIO and CONFIG_ANDROID_BINDERFS options (from
android-base.config)
are causing early reboot without explanations. Would be nice to know
why,
to keep them enabled and have something running... Until so, disable
them
by adding at the end of .config:
# CONFIG_AIO is not set
# CONFIG_ANDROID_BINDERFS is not set
Adding VirtIO things:
CONFIG_VIRTIO=y
CONFIG_VIRTIO_PCI=y
CONFIG_VIRTIO_PCI_LEGACY=y
CONFIG_VIRTIO_BALLOON=y
CONFIG_VIRTIO_INPUT=y
CONFIG_VIRTIO_MMIO=y
CONFIG_VIRTIO_MMIO_CMDLINE_DEVICES=y
CONFIG_VIRTIO_DMA_SHARED_BUFFER=y
CONFIG_BLK_MQ_VIRTIO=y
CONFIG_MEMORY_BALLOON=y
CONFIG_BALLOON_COMPACTION=y
CONFIG_PAGE_REPORTING=y
CONFIG_DRM_GEM_SHMEM_HELPER=y
CONFIG_DRM_VIRTIO_GPU=y
make ARCH=arm64 menuconfig, exit, save: yes.
make ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- -j $(nproc)
make ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu-
INSTALL_MOD_PATH=/home/user/Desktop/ INSTALL_MOD_STRIP=1
modules_install
*"Installing" the kernel:*
Place the the arch/arm64/boot/Image.gz file at the same place as the
rootfs.img, userdata.img and cache.img files
Place the content of /home/user/Desktop/lib/modules/5.10.37+/ into
/vendor/lib/modules/
*Unmount rootfs.img*
umount /its/mount/point
losetup -d /dev/loop0
*Ready to go:*
>From an x86_64 computer:
qemu-system-aarch64 -M virt -cpu cortex-a72 -accel
tcg,thread=multi
-smp 4 -m 2048 -kernel Image.gz -monitor none -parallel none -append
"root=/dev/vda rootfstype=ext4 ro init=/init selinux=1 checkreqprot=1
androidboot.selinux=permissive console=ttyAMA0
androidboot.hardware=ranchu
loglevel=8" -serial mon:stdio -vga std -device ramfb -device
nec-usb-xhci
-device usb-kbd -device usb-mouse -bios
/usr/share/qemu-efi-aarch64/QEMU_EFI.fd -drive
format=raw,file=rootfs.img
-drive format=raw,file=userdata.img -drive format=raw,file=cache.img
If you are lucky enough to have an arm64 machine with KVM available
on it,
and enough RAM, into the above command line, remplace:
qemu-system-aarch64 -M virt -cpu cortex-a72 -accel
tcg,thread=multi
-smp 4 -m 2048
by
kvm -M virt -cpu host -accel kvm -smp 4 -m 2048
In summary, from an arm64 computer :
kvm -M virt -cpu host -accel kvm -smp 4 -m 2048 -kernel Image.gz
-monitor none -parallel none -append "root=/dev/vda rootfstype=ext4 ro
init=/init selinux=1 checkreqprot=1 androidboot.selinux=permissive
console=ttyAMA0 androidboot.hardware=ranchu loglevel=8" -serial
mon:stdio
-vga std -device ramfb -device nec-usb-xhci -device usb-kbd -device
usb-mouse -bios /usr/share/qemu-efi-aarch64/QEMU_EFI.fd -drive
format=raw,file=rootfs.img -drive format=raw,file=userdata.img -drive
format=raw,file=cache.img
*Bits of additionnal information:*
Having ARM64 AOSP running on QEMU from x86_64, even with "-accel
tcg,thread=multi" which makes things much better, you still need to
wait 30
seconds before having "android" boot logo (on an AMD 3700X) and 350
seconds
(almost 6 minutes) on first boot before having the android main
screen with
icons and all stuff (2 minutes at the following boots).
There are some repeated messages about camera 2.4 stuff and
[email protected]. You
may remove the
/vendor/etc/init/[email protected], but
messages about "[email protected]" will still
appear, so
you may remove the associated entries (camera and radio) from
/vendor/manifext.xml. Then no more messages about it.
In case of need to debug, you may type "logcat" in the console: this
give
way too much informations but you may spot information on what you are
looking for, or few lines above some service crashing (sometimes some
messages contains usefull information to tell you why it is going to
crash
just after). Into the "userdata.img" partition you may also find
"/tombstones" folder, containing crash logs of services.
In order to cleanly poweroff your emulated system you can type
"reboot -p"
so that the "userdata.img" is kept as clean as possible.
--
--
You received this message because you are subscribed to the "Android
Building"
mailing list.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to
[email protected]
For more options, visit this group at
<http://groups.google.com/group/android-building?hl=en>
---
You received this message because you are subscribed to the Google
Groups
"Android Building" group.
To unsubscribe from this group and stop receiving emails from it,
send an email
to [email protected].
To view this discussion on the web visit
<https://groups.google.com/d/msgid/android-building/0dd7a47b-4fdd-48d3-b5bf-fe0af08f8c5en%40googlegroups.com>.