I am trying to create a super.img using an Android 11 vendor image and a pure Android 13 system image. I am using the merge_target_files tool in the system build area followed by build_super_image tool.
However the host_init_verifier errors out, it appears that the init rc files from the vendor refer to hidl interfaces that the host_init_verifier doesn't know anything about.
Based on some digging it appears that during the system build a tool generates a c++ file from hidl_inheritance_hierarchy.json which contains and embedded list of known hidl interfaces and is statically compiled into the host_init_verifier itself. Since I am using a pure Android 13 system build I am not sure how it would ever know about custom vendor interfaces reference in the vendor init file.
If I hack the host_init_verifier file interface_utils.cpp to not perform the hidl interface check then the merge proceeds but that doesn't seem like the correct solution. Maybe I need to get hidl_inheritance_hierarchy.json to contain all the custom vendor interfaces? I am not sure if that is the correct approach or how to do that.
-- Jacob
Here is the relevant part of the error:
2023-04-28 22:49:47 - common.py - INFO : Running: "/home/jacob/work/platforms/qcmdevice/aosp/out/host/linux-x86/bin/host_init_verifier --out_system /tmp/merge_target_files_50lso94e/output/SYSTEM --property-contexts=/tmp/merge_target_files_50lso94e/output/SYSTEM/etc/selinux/plat_property_contexts -p /tmp/merge_target_files_50lso94e/output/SYSTEM/etc/passwd --out_vendor /tmp/merge_target_files_50lso94e/output/VENDOR --property-contexts=/tmp/merge_target_files_50lso94e/output/VENDOR/etc/selinux/vendor_property_contexts -p /tmp/merge_target_files_50lso94e/output/VENDOR/etc/passwd --out_product /tmp/merge_target_files_50lso94e/output/PRODUCT -p /tmp/merge_target_files_50lso94e/output/PRODUCT/etc/passwd --out_system_ext /tmp/merge_target_files_50lso94e/output/SYSTEM_EXT -p /tmp/merge_target_files_50lso94e/output/SYSTEM_EXT/etc/passwd --out_odm /tmp/merge_target_files_50lso94e/output/VENDOR/odm -p /tmp/merge_target_files_50lso94e/output/VENDOR/odm/etc/passwd"
2023-04-28 22:49:47 - common.py - INFO : Running: "/home/jacob/work/platforms/qcmdevice/aosp/out/host/linux-x86/bin/secilc -m -M true -G -N -c 30 -o /tmp/merge_target_files_50lso94e/output/META/combined_sepolicy -f /dev/null /tmp/merge_target_files_50lso94e/output/SYSTEM/etc/selinux/plat_sepolicy.cil /tmp/merge_target_files_50lso94e/output/SYSTEM/etc/selinux/mapping/30.0.cil /tmp/merge_target_files_50lso94e/output/VENDOR/etc/selinux/vendor_sepolicy.cil /tmp/merge_target_files_50lso94e/output/VENDOR/etc/selinux/plat_pub_versioned.cil /tmp/merge_target_files_50lso94e/output/SYSTEM/etc/selinux/mapping/30.0.compat.cil"
2023-04-28 22:49:48 - merge_target_files.py - ERROR : Failed to run command '['host_init_verifier', '--out_system', '/tmp/merge_target_files_50lso94e/output/SYSTEM', '--property-contexts=/tmp/merge_target_files_50lso94e/output/SYSTEM/etc/selinux/plat_property_contexts', '-p', '/tmp/merge_target_files_50lso94e/output/SYSTEM/etc/passwd', '--out_vendor', '/tmp/merge_target_files_50lso94e/output/VENDOR', '--property-contexts=/tmp/merge_target_files_50lso94e/output/VENDOR/etc/selinux/vendor_property_contexts', '-p', '/tmp/merge_target_files_50lso94e/output/VENDOR/etc/passwd', '--out_product', '/tmp/merge_target_files_50lso94e/output/PRODUCT', '-p', '/tmp/merge_target_files_50lso94e/output/PRODUCT/etc/passwd', '--out_system_ext', '/tmp/merge_target_files_50lso94e/output/SYSTEM_EXT', '-p', '/tmp/merge_target_files_50lso94e/output/SYSTEM_EXT/etc/passwd', '--out_odm', '/tmp/merge_target_files_50lso94e/output/VENDOR/odm', '-p', '/tmp/merge_target_files_50lso94e/output/VENDOR/odm/etc/passwd']' (exit code 1):
host_init_verifier: /tmp/merge_target_files_50lso94e/output/VENDOR/etc/init/android.hardware...@2.4-service_64.rc: 18:
Interface is not in the known set of hidl_interfaces: 'vendor.qti.hardware.camera.postproc@1.0::IPostProcService'. Please ensure the interface is spelled correctly and built by a hidl_interface target.
host_init_verifier: /tmp/merge_target_files_50lso94e/output/VENDOR/etc/init/android.hardware.wifi.supplicant-service.rc: 3:
Interface is not in the known set of hidl_interfaces: 'vendor.qti.hardware.wifi.supplicant@2.0::ISupplicantVendor'. Please ensure the interface is spelled correctly and built by a hidl_interface target.
Interface is not in the known set of hidl_interfaces: 'vendor.qti.hardware.wifi.supplicant@2.1::ISupplicantVendor'. Please ensure the interface is spelled correctly and built by a hidl_interface target.
Interface is not in the known set of hidl_interfaces: 'vendor.qti.hardware.wifi.supplicant@2.2::ISupplicantVendor'. Please ensure the interface is spelled correctly and built by a hidl_interface target.
... more errors ...
host_init_verifier: Failed to parse init scripts with 13 error(s).
Traceback (most recent call last):
File "/home/jacob/work/platforms/qcmdevice/aosp/out/host/linux-x86/bin/merge_target_files/internal/stdlib/runpy.py", line 196, in _run_module_as_main
File "/home/jacob/work/platforms/qcmdevice/aosp/out/host/linux-x86/bin/merge_target_files/internal/stdlib/runpy.py", line 86, in _run_code
File "/home/jacob/work/platforms/qcmdevice/aosp/out/host/linux-x86/bin/merge_target_files/__main__.py", line 12, in <module>
File "/home/jacob/work/platforms/qcmdevice/aosp/out/host/linux-x86/bin/merge_target_files/internal/stdlib/runpy.py", line 196, in _run_module_as_main
File "/home/jacob/work/platforms/qcmdevice/aosp/out/host/linux-x86/bin/merge_target_files/internal/stdlib/runpy.py", line 86, in _run_code
File "/home/jacob/work/platforms/qcmdevice/aosp/out/host/linux-x86/bin/merge_target_files/merge_target_files.py", line 611, in <module>
File "/home/jacob/work/platforms/qcmdevice/aosp/out/host/linux-x86/bin/merge_target_files/merge_target_files.py", line 602, in main
File "/home/jacob/work/platforms/qcmdevice/aosp/out/host/linux-x86/bin/merge_target_files/merge_target_files.py", line 416, in merge_target_files
common.ExternalError: Found incompatibilities in the merged target files package.