I figured out my issue from when I last posted. The problem was I didn't keep the super partitions inside fstab.ranchu which this documentation states is necessary
https://source.android.com/devices/tech/ota/dynamic_partitions/implement So my fstab includes - System - Vendor - Product - /dev/block/vdb - /dev/block/vdc which seems to get me further, I can now interact with the console and I get the android splash screen (presumably because there's no graphics being emulated, but that's fine) I am getting the errors @Julien mentioned with services defined by rc scripts in /vendor/etc/init/android.hardware...@*.rc I systematically tried removing them, and changing manifest.xml but now I get new errors that tell my hwservicemanager is trying to start them. Anyone have any ideas how to stop hwservicemanager from running or fix these warnings? Console still works and I can interact with the filesystem for now though. On Tuesday, June 29, 2021 at 7:32:17 PM UTC-4 Jake Brown wrote: > Hi Julien, > > Just joining this conversation and I have some questions. > > I actually do have a physical arm64 device that I am trying to act as a > hypervisor to run multiple androids on. I am running Ubuntu 20.04 on the > aarch64 host and I believe what you have outlined is of great help, but I > am running into some issues.... > > Here's what I've done to recap > - Generated the empty userdata.img and cache.img > - Generated rootfs.img and placed the contents of /vendor and /system into > the block that were generated from running lunch from AOSP 10 arm64 > - I moved contents of /system to be on the same level as /vendor within > rootfs > - I made the /vendor/etc/fstab.ranchu to include only the two lines you > mention above removing any defaults > - combined the defconfig, android-base, recommended and recommended-arm64 > config files. > - created a directory in /vendor/lib called /modules and added all the > modules.* files and kernel directory that was generated from running the > following commands > > > *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* > - Made the Image.gz, rootfs.img, userdata.img, cache.img all be > incorporated into the kvm command which is identical to what you have. I > didn't change anything regarding the qemu command. > > > So I think I followed the instructions but I am getting a *"Kernel panic > - not syncing: Requested init /init failed"* error when I try and boot. > > > A few questions regarding the section on "*Manufacturing an up to date > 5.10 ARM64 Android kernel" * > > - When you said "root" of the kernel file tree, did you mean to place the* > '.config'* file in *'arch/arm64/configs/'*? or in root of the project > where the .config file gets generated after running make > - Do I need to append the configs you mention that are missing before I > run *'make ARCH=arm64 menuconfig'*? I assume so since it generates a new > .config file. > > From my understanding from reading previous conversation about "init", > it's not able to find it that executable so how can I work through this > issue? > > Appreciate any help anyone can provide, > > Thanks! > > > > > > 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/0daaa0b5-f364-4f34-993a-bd4aa92cafe1n%40googlegroups.com.
