Hi Julien, First of all thank you for provinding the detailed documentation- I'm in the process of attempting to replicate it for my own needs.
An issue/concern of mine is the generation of vendor.img after having executed m/make within AOSP and it not creating a vendor.img file. Per the AOSP documentation, a vendor image is normally only created via proprietary binaries that aren't a part of AOSP. I think I might be missing something but I'm not sure what. I read back to your posts from a few months back but I'm not sure if that's what's causing the difference any guidance? Felix CLC On Monday, May 24, 2021 at 2:14:44 PM UTC-4 [email protected] wrote: > 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/df5141ce-3036-4ca9-a75b-bcf36200f805n%40googlegroups.com.
