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.

Reply via email to