Hi guys, I'm trying to boot a FIT image, containing a Linux Kernel, an FDT and optee. I am using U-boot 2018.03, as it came in the NXP i.MX6UL Yocto distribution, patched it with Bryan O'Donoghue's optee patches of March 2018, and out-configured NXP's CONFIG_IMX_OPTEE.
Below the DTS for my for the FIT image: /dts-v1/; / { description = "XXX i.MX6UL Linux"; #address-cells = <1>; images { kernel@1 { description = "Linux kernel"; data = /incbin/("/home/XXX/zImage.bin"); type = "kernel"; arch = "arm"; os = "linux"; compression = "none"; load = <0x80800000>; entry = <0x80800000>; }; fdt@1 { description = "Flattened Device Tree"; data = /incbin/("/home/XXX/XXX.dtb"); type = "flat_dt"; arch = "arm"; load = <0x83000000>; compression = "none"; }; optee@1 { description = "OP/TEE"; data = /incbin/("/home/XXX/tee.bin"); type = "kernel"; arch = "arm"; os = "tee"; compression = "none"; load = <0x8dffffe4>; entry = <0x8e000000>; }; }; configurations { default = "tee@1"; tee@1 { description = "Boot Linux kernel through OP/TEE"; kernel = "optee@1"; fdt = "fdt@1"; loadables = "kernel@1"; }; bare@1 { description = "Boot bare Linux kernel"; kernel = "kernel@1"; fdt = "fdt@1"; }; }; }; Booting this image using bootm 0x85000000#bare works, so both Kernel sub-image and FDT sub-image are OK. Booting the default configuration (tee@1) however, produces an error: => bootm 0x85000000 ## Loading kernel from FIT Image at 85000000 ... Using 'tee@1' configuration Trying 'optee@1' kernel subimage Description: OP/TEE Type: Kernel Image Compression: uncompressed Data Start: 0x85887e5c Data Size: 315732 Bytes = 308.3 KiB Architecture: ARM OS: Trusted Execution Environment Load Address: 0x8dffffe4 Entry Point: 0x8e000000 Verifying Hash Integrity ... OK No Trusted Execution Environment ARM Kernel Image Image This error is triggered in .../common/image-fit.c: if ((!type_ok || !os_ok) && image_type != IH_TYPE_LOADABLE) { fit_image_get_os(fit, noffset, &os); printf("No %s %s %s Image\n", genimg_get_os_name(os), genimg_get_arch_name(arch), genimg_get_type_name(image_type)); bootstage_error(bootstage_id + BOOTSTAGE_SUB_CHECK_ALL); return -EIO; type_ok = 1 os_ok = 0 image_type = 2 The failing argument here is os_ok, which is set shortly before: os_ok = image_type == IH_TYPE_FLATDT || image_type == IH_TYPE_FPGA || fit_image_check_os(fit, noffset, IH_OS_LINUX) || fit_image_check_os(fit, noffset, IH_OS_U_BOOT) || fit_image_check_os(fit, noffset, IH_OS_OPENRTOS); The optee sub-image in my FIT image is of type IH_OS_TEE, clearly not in this list, but neither are the vast majority of the other OSes. I could set 'os' in my DTS file to 'linux', but everybody else seems to use 'tee', most even set 'type' to 'tee'. But even the current master branch is not including IH_OS_TEE in setting os_ok. Should it be included, or am I doing something else wrong? (BTW, including IH_OS_TEE still fails to launch optee, but I'd like to start at the most obvious error first.) With kind regards, Robert. -- DISCLAIMER De informatie, verzonden in of met dit e-mailbericht, is vertrouwelijk en uitsluitend voor de geadresseerde(n) bestemd. Het gebruik van de informatie in dit bericht, de openbaarmaking, vermenigvuldiging, verspreiding en|of verstrekking daarvan aan derden is niet toegestaan. Gebruik van deze informatie door anderen dan geadresseerde(n) is strikt verboden. Aan deze informatie kunnen geen rechten worden ontleend. U wordt verzocht bij onjuiste adressering de afzender direct te informeren door het bericht te retourneren en het bericht uit uw computersysteem te verwijderen.