COMPATIBLE_MACHINE:append = "|stm32mp157c-dcm" # Ensure fwconfig directory exists before FIP creation do_deploy:prepend() { bbplain "=== FIP DCM PREPARATION ===" # Get the exact sysroot path that FIP uses FIP_SYSROOT="${RECIPE_SYSROOT}" FW_CONFIG_DIR="${FIP_SYSROOT}/arm-trusted-firmware/fwconfig" bbplain "FIP_SYSROOT: ${FIP_SYSROOT}" bbplain "FW_CONFIG_DIR: ${FW_CONFIG_DIR}" # Create the fwconfig directory if it doesn't exist if [ ! -d "${FW_CONFIG_DIR}" ]; then bbplain "Creating missing fwconfig directory: ${FW_CONFIG_DIR}" mkdir -p "${FW_CONFIG_DIR}" else bbplain "fwconfig directory already exists" fi # Check if fw-config files already exist if [ ! -f "${FW_CONFIG_DIR}/fw-config.dtb" ]; then bbplain "Creating fw-config DTB files for FIP..." # Method 1: Try to copy from TF-A deploy directory TFA_DEPLOY_DIR="${DEPLOY_DIR_IMAGE}" if [ -f "${TFA_DEPLOY_DIR}/fw-config.dtb" ]; then bbplain "Copying fw-config from TF-A deploy directory" cp "${TFA_DEPLOY_DIR}/fw-config.dtb" "${FW_CONFIG_DIR}/" else bbplain "TF-A fw-config not found in deploy, creating minimal version" # Create minimal binary DTB as fallback printf '\xd0\x0d\xfe\xed\x00\x00\x00\x38\x00\x00\x00\x28\x00\x00\x00\x28\x00\x00\x00\x10\x00\x00\x00\x11\x00\x00\x00\x10\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x09\x00\x00\x00' > "${FW_CONFIG_DIR}/fw-config.dtb" fi # Create all the naming variants that found_file() function might look for if [ -f "${FW_CONFIG_DIR}/fw-config.dtb" ]; then cd "${FW_CONFIG_DIR}" # Create all possible naming patterns that the found_file function searches for cp fw-config.dtb fw_config.dtb # DTB-STORAGE pattern cp fw-config.dtb fw-config-stm32mp157c-dcm-sdcard.dtb cp fw-config.dtb fw_config-stm32mp157c-dcm-sdcard.dtb # DTB-CONFIG pattern cp fw-config.dtb fw-config-stm32mp157c-dcm-optee-sdcard.dtb cp fw-config.dtb fw_config-stm32mp157c-dcm-optee-sdcard.dtb # DTB-SECONDARY_CONFIG pattern cp fw-config.dtb fw-config-stm32mp157c-dcm-optee.dtb cp fw-config.dtb fw_config-stm32mp157c-dcm-optee.dtb # DTB pattern cp fw-config.dtb fw-config-stm32mp157c-dcm.dtb cp fw-config.dtb fw_config-stm32mp157c-dcm.dtb # STORAGE pattern cp fw-config.dtb fw-config-sdcard.dtb cp fw-config.dtb fw_config-sdcard.dtb # CONFIG pattern cp fw-config.dtb fw-config-optee-sdcard.dtb cp fw-config.dtb fw_config-optee-sdcard.dtb # SECONDARY_CONFIG pattern cp fw-config.dtb fw-config-optee.dtb cp fw-config.dtb fw_config-optee.dtb # SOC-STORAGE pattern cp fw-config.dtb fw-config-stm32mp15-sdcard.dtb cp fw-config.dtb fw_config-stm32mp15-sdcard.dtb # SOC-CONFIG pattern cp fw-config.dtb fw-config-stm32mp15-optee-sdcard.dtb cp fw-config.dtb fw_config-stm32mp15-optee-sdcard.dtb # SOC-SECONDARY_CONFIG pattern cp fw-config.dtb fw-config-stm32mp15-optee.dtb cp fw-config.dtb fw_config-stm32mp15-optee.dtb # SOC pattern cp fw-config.dtb fw-config-stm32mp15.dtb cp fw-config.dtb fw_config-stm32mp15.dtb # Legacy machine-specific patterns cp fw-config.dtb fw-config-stm32mp157c-dcm.dtb cp fw-config.dtb stm32mp157c-dcm-fw-config.dtb cp fw-config.dtb stm32mp157c-dcm-fw-config-optee.dtb # CRITICAL: Also create the exact file the FIP script is looking for cp fw-config.dtb stm32mp157c-dcm-fw-config.dtb cd - bbplain "Created $(ls -1 ${FW_CONFIG_DIR}/*.dtb | wc -l) fw-config variants" fi else bbplain "fw-config.dtb already exists in fwconfig directory" fi # Also ensure OP-TEE files have compatible naming OPTEE_DIR="${FIP_SYSROOT}/optee" if [ -d "${OPTEE_DIR}" ]; then bbplain "Checking OP-TEE file naming compatibility..." # Look for _v2 files and create compatible versions - FIXED Shell syntax for file in "${OPTEE_DIR}"/tee-*_v2-*.bin; do if [ -f "$file" ]; then filename=$(basename "$file") # Create standard naming variants (remove _v2 and long suffixes) - POSIX compatible case "$filename" in tee-header_v2-*) standard_name=$(echo "$filename" | sed 's/_v2-stm32mp157c-dcm-stm32mp157c-dcm/-stm32mp157c-dcm-optee-sdcard/') cp "$file" "${OPTEE_DIR}/$standard_name" # Also create simpler variants simple_name=$(echo "$filename" | sed 's/_v2-stm32mp157c-dcm-stm32mp157c-dcm//') cp "$file" "${OPTEE_DIR}/$simple_name" bbplain "Created OP-TEE header variants: $standard_name, $simple_name" ;; tee-pager_v2-*) standard_name=$(echo "$filename" | sed 's/_v2-stm32mp157c-dcm-stm32mp157c-dcm/-stm32mp157c-dcm-optee-sdcard/') cp "$file" "${OPTEE_DIR}/$standard_name" simple_name=$(echo "$filename" | sed 's/_v2-stm32mp157c-dcm-stm32mp157c-dcm//') cp "$file" "${OPTEE_DIR}/$simple_name" bbplain "Created OP-TEE pager variants: $standard_name, $simple_name" ;; tee-pageable_v2-*) standard_name=$(echo "$filename" | sed 's/_v2-stm32mp157c-dcm-stm32mp157c-dcm/-stm32mp157c-dcm-optee-sdcard/') cp "$file" "${OPTEE_DIR}/$standard_name" simple_name=$(echo "$filename" | sed 's/_v2-stm32mp157c-dcm-stm32mp157c-dcm//') cp "$file" "${OPTEE_DIR}/$simple_name" bbplain "Created OP-TEE pageable variants: $standard_name, $simple_name" ;; esac fi done fi # CRITICAL: Copy fw-config files to ALL possible search paths the FIP script might use bbplain "=== COPYING FW-CONFIG TO ALL POSSIBLE SEARCH PATHS ===" if [ -f "${FW_CONFIG_DIR}/fw-config.dtb" ]; then # Copy to root arm-trusted-firmware directory (where FIP might expect it) ATF_ROOT="${FIP_SYSROOT}/arm-trusted-firmware" cp "${FW_CONFIG_DIR}/fw-config.dtb" "${ATF_ROOT}/" 2>/dev/null || true cp "${FW_CONFIG_DIR}/fw_config-stm32mp157c-dcm-sdcard.dtb" "${ATF_ROOT}/" 2>/dev/null || true cp "${FW_CONFIG_DIR}/fw_config.dtb" "${ATF_ROOT}/" 2>/dev/null || true # CRITICAL: Create the EXACT file the FIP script is looking for cp "${FW_CONFIG_DIR}/fw-config.dtb" "${ATF_ROOT}/stm32mp157c-dcm-fw-config.dtb" 2>/dev/null || true cp "${FW_CONFIG_DIR}/fw-config.dtb" "${FW_CONFIG_DIR}/stm32mp157c-dcm-fw-config.dtb" 2>/dev/null || true # Copy all variants to ATF root for dtb_file in "${FW_CONFIG_DIR}"/*.dtb; do if [ -f "$dtb_file" ]; then filename=$(basename "$dtb_file") cp "$dtb_file" "${ATF_ROOT}/$filename" 2>/dev/null || true fi done # Copy to any other directories that might exist for search_dir in "${FIP_SYSROOT}/arm-trusted-firmware"/*; do if [ -d "$search_dir" ]; then bbplain "Copying fw-config to: $search_dir" cp "${FW_CONFIG_DIR}/fw-config.dtb" "$search_dir/" 2>/dev/null || true cp "${FW_CONFIG_DIR}/fw_config-stm32mp157c-dcm-sdcard.dtb" "$search_dir/" 2>/dev/null || true cp "${FW_CONFIG_DIR}/fw_config.dtb" "$search_dir/" 2>/dev/null || true fi done # Also copy to the sysroot root (just in case) cp "${FW_CONFIG_DIR}/fw-config.dtb" "${FIP_SYSROOT}/" 2>/dev/null || true cp "${FW_CONFIG_DIR}/fw_config-stm32mp157c-dcm-sdcard.dtb" "${FIP_SYSROOT}/" 2>/dev/null || true bbplain "fw-config files copied to all possible search locations" fi # CRITICAL: Create enhanced FIP script with runtime patching bbplain "=== CREATING ENHANCED FIP SCRIPT ===" FIP_SCRIPT="${RECIPE_SYSROOT_NATIVE}/usr/bin/create_st_fip_binary.sh" if [ -f "$FIP_SCRIPT" ]; then bbplain "Found FIP script at: $FIP_SCRIPT" # Create a backup cp "$FIP_SCRIPT" "${FIP_SCRIPT}.backup" 2>/dev/null || true # Create enhanced found_file function in a separate file echo '#!/bin/bash' > "${WORKDIR}/enhanced_found_file.sh" echo '' >> "${WORKDIR}/enhanced_found_file.sh" echo 'function found_file(){' >> "${WORKDIR}/enhanced_found_file.sh" echo ' local path_search=$1' >> "${WORKDIR}/enhanced_found_file.sh" echo ' local file_prefix=$2' >> "${WORKDIR}/enhanced_found_file.sh" echo ' local file_extension=$3' >> "${WORKDIR}/enhanced_found_file.sh" echo ' ' >> "${WORKDIR}/enhanced_found_file.sh" echo ' echo "=== DCM DEBUG: found_file called ===" >&2' >> "${WORKDIR}/enhanced_found_file.sh" echo ' echo "path_search: $path_search" >&2' >> "${WORKDIR}/enhanced_found_file.sh" echo ' echo "file_prefix: $file_prefix" >&2' >> "${WORKDIR}/enhanced_found_file.sh" echo ' echo "file_extension: $file_extension" >&2' >> "${WORKDIR}/enhanced_found_file.sh" echo ' ' >> "${WORKDIR}/enhanced_found_file.sh" echo ' # DCM: Enhanced search for ANY fw-config related prefix' >> "${WORKDIR}/enhanced_found_file.sh" echo ' if [[ "$file_prefix" == *"fw-config"* ]] || [[ "$file_prefix" == *"fw_config"* ]]; then' >> "${WORKDIR}/enhanced_found_file.sh" echo ' echo "=== DCM: Searching for fw-config variant: $file_prefix ===" >&2' >> "${WORKDIR}/enhanced_found_file.sh" echo ' ' >> "${WORKDIR}/enhanced_found_file.sh" echo ' # Try exact match first' >> "${WORKDIR}/enhanced_found_file.sh" echo ' [ -e "$path_search/$file_prefix.$file_extension" ] && echo "$path_search/$file_prefix.$file_extension" && return' >> "${WORKDIR}/enhanced_found_file.sh" echo ' [ -e "$path_search/../fwconfig/$file_prefix.$file_extension" ] && echo "$path_search/../fwconfig/$file_prefix.$file_extension" && return' >> "${WORKDIR}/enhanced_found_file.sh" echo ' [ -e "$path_search/fwconfig/$file_prefix.$file_extension" ] && echo "$path_search/fwconfig/$file_prefix.$file_extension" && return' >> "${WORKDIR}/enhanced_found_file.sh" echo ' ' >> "${WORKDIR}/enhanced_found_file.sh" echo ' # Try our created fw-config files with generic names' >> "${WORKDIR}/enhanced_found_file.sh" echo ' [ -e "$path_search/fwconfig/fw-config.$file_extension" ] && echo "$path_search/fwconfig/fw-config.$file_extension" && return' >> "${WORKDIR}/enhanced_found_file.sh" echo ' [ -e "$path_search/fwconfig/fw_config.$file_extension" ] && echo "$path_search/fwconfig/fw_config.$file_extension" && return' >> "${WORKDIR}/enhanced_found_file.sh" echo ' [ -e "$path_search/../fwconfig/fw-config.$file_extension" ] && echo "$path_search/../fwconfig/fw-config.$file_extension" && return' >> "${WORKDIR}/enhanced_found_file.sh" echo ' [ -e "$path_search/../fwconfig/fw_config.$file_extension" ] && echo "$path_search/../fwconfig/fw_config.$file_extension" && return' >> "${WORKDIR}/enhanced_found_file.sh" echo ' ' >> "${WORKDIR}/enhanced_found_file.sh" echo ' # Try in arm-trusted-firmware root directory' >> "${WORKDIR}/enhanced_found_file.sh" echo ' [ -e "$path_search/../fw-config.$file_extension" ] && echo "$path_search/../fw-config.$file_extension" && return' >> "${WORKDIR}/enhanced_found_file.sh" echo ' [ -e "$path_search/../fw_config.$file_extension" ] && echo "$path_search/../fw_config.$file_extension" && return' >> "${WORKDIR}/enhanced_found_file.sh" echo ' [ -e "$path_search/../$file_prefix.$file_extension" ] && echo "$path_search/../$file_prefix.$file_extension" && return' >> "${WORKDIR}/enhanced_found_file.sh" echo ' ' >> "${WORKDIR}/enhanced_found_file.sh" echo ' echo "=== DCM: fw-config variant not found anywhere ===" >&2' >> "${WORKDIR}/enhanced_found_file.sh" echo ' fi' >> "${WORKDIR}/enhanced_found_file.sh" echo ' ' >> "${WORKDIR}/enhanced_found_file.sh" echo ' # DCM: Enhanced search for OP-TEE files (_v2 variants)' >> "${WORKDIR}/enhanced_found_file.sh" echo ' if [[ "$file_prefix" == *"tee-"*"_v2"* ]]; then' >> "${WORKDIR}/enhanced_found_file.sh" echo ' echo "=== DCM: Searching for OP-TEE variant: $file_prefix ===" >&2' >> "${WORKDIR}/enhanced_found_file.sh" echo ' ' >> "${WORKDIR}/enhanced_found_file.sh" echo ' # Convert _v2 to non-v2 names' >> "${WORKDIR}/enhanced_found_file.sh" echo ' base_name=$(echo "$file_prefix" | sed "s/_v2//")' >> "${WORKDIR}/enhanced_found_file.sh" echo ' echo "=== DCM: Trying base name: $base_name ===" >&2' >> "${WORKDIR}/enhanced_found_file.sh" echo ' ' >> "${WORKDIR}/enhanced_found_file.sh" echo ' # Try our created OP-TEE files' >> "${WORKDIR}/enhanced_found_file.sh" echo ' [ -e "$path_search/$base_name.$file_extension" ] && echo "$path_search/$base_name.$file_extension" && return' >> "${WORKDIR}/enhanced_found_file.sh" echo ' [ -e "$path_search/$base_name-stm32mp157c-dcm-optee-sdcard.$file_extension" ] && echo "$path_search/$base_name-stm32mp157c-dcm-optee-sdcard.$file_extension" && return' >> "${WORKDIR}/enhanced_found_file.sh" echo ' [ -e "$path_search/$base_name-stm32mp157c-dcm-optee.$file_extension" ] && echo "$path_search/$base_name-stm32mp157c-dcm-optee.$file_extension" && return' >> "${WORKDIR}/enhanced_found_file.sh" echo ' [ -e "$path_search/$base_name-stm32mp157c-dcm.$file_extension" ] && echo "$path_search/$base_name-stm32mp157c-dcm.$file_extension" && return' >> "${WORKDIR}/enhanced_found_file.sh" echo ' ' >> "${WORKDIR}/enhanced_found_file.sh" echo ' echo "=== DCM: OP-TEE variant not found ===" >&2' >> "${WORKDIR}/enhanced_found_file.sh" echo ' fi' >> "${WORKDIR}/enhanced_found_file.sh" echo ' ' >> "${WORKDIR}/enhanced_found_file.sh" echo ' # DCM: Enhanced search for U-Boot files' >> "${WORKDIR}/enhanced_found_file.sh" echo ' if [[ "$file_prefix" == *"u-boot"* ]]; then' >> "${WORKDIR}/enhanced_found_file.sh" echo ' echo "=== DCM: Searching for U-Boot variant: $file_prefix ===" >&2' >> "${WORKDIR}/enhanced_found_file.sh" echo ' ' >> "${WORKDIR}/enhanced_found_file.sh" echo ' # Try common U-Boot naming patterns' >> "${WORKDIR}/enhanced_found_file.sh" echo ' [ -e "$path_search/$file_prefix-stm32mp15-default.$file_extension" ] && echo "$path_search/$file_prefix-stm32mp15-default.$file_extension" && return' >> "${WORKDIR}/enhanced_found_file.sh" echo ' [ -e "$path_search/$file_prefix-stm32mp157c-dcm.$file_extension" ] && echo "$path_search/$file_prefix-stm32mp157c-dcm.$file_extension" && return' >> "${WORKDIR}/enhanced_found_file.sh" echo ' [ -e "$path_search/$file_prefix-stm32mp15.$file_extension" ] && echo "$path_search/$file_prefix-stm32mp15.$file_extension" && return' >> "${WORKDIR}/enhanced_found_file.sh" echo ' ' >> "${WORKDIR}/enhanced_found_file.sh" echo ' echo "=== DCM: U-Boot variant not found ===" >&2' >> "${WORKDIR}/enhanced_found_file.sh" echo ' fi' >> "${WORKDIR}/enhanced_found_file.sh" echo ' ' >> "${WORKDIR}/enhanced_found_file.sh" echo ' # Original search strategy' >> "${WORKDIR}/enhanced_found_file.sh" echo ' [ -e "$path_search/$file_prefix-$SEARCH_DTB-$SEARCH_STORAGE.$file_extension" ] && echo "$path_search/$file_prefix-$SEARCH_DTB-$SEARCH_STORAGE.$file_extension" && return' >> "${WORKDIR}/enhanced_found_file.sh" echo ' [ -e "$path_search/$file_prefix-$SEARCH_DTB-$SEARCH_CONFIG.$file_extension" ] && echo "$path_search/$file_prefix-$SEARCH_DTB-$SEARCH_CONFIG.$file_extension" && return' >> "${WORKDIR}/enhanced_found_file.sh" echo ' [ -e "$path_search/$file_prefix-$SEARCH_DTB.$file_extension" ] && echo "$path_search/$file_prefix-$SEARCH_DTB.$file_extension" && return' >> "${WORKDIR}/enhanced_found_file.sh" echo ' [ -e "$path_search/$file_prefix-$SEARCH_STORAGE.$file_extension" ] && echo "$path_search/$file_prefix-$SEARCH_STORAGE.$file_extension" && return' >> "${WORKDIR}/enhanced_found_file.sh" echo ' [ -e "$path_search/$file_prefix-$SEARCH_CONFIG.$file_extension" ] && echo "$path_search/$file_prefix-$SEARCH_CONFIG.$file_extension" && return' >> "${WORKDIR}/enhanced_found_file.sh" echo ' [ -e "$path_search/$file_prefix-$SEARCH_SOC_NAME-$SEARCH_STORAGE.$file_extension" ] && echo "$path_search/$file_prefix-$SEARCH_SOC_NAME-$SEARCH_STORAGE.$file_extension" && return' >> "${WORKDIR}/enhanced_found_file.sh" echo ' [ -e "$path_search/$file_prefix-$SEARCH_SOC_NAME-$SEARCH_CONFIG.$file_extension" ] && echo "$path_search/$file_prefix-$SEARCH_SOC_NAME-$SEARCH_CONFIG.$file_extension" && return' >> "${WORKDIR}/enhanced_found_file.sh" echo ' [ -e "$path_search/$file_prefix-$SEARCH_SOC_NAME.$file_extension" ] && echo "$path_search/$file_prefix-$SEARCH_SOC_NAME.$file_extension" && return' >> "${WORKDIR}/enhanced_found_file.sh" echo ' ' >> "${WORKDIR}/enhanced_found_file.sh" echo ' echo "NOTFOUND"' >> "${WORKDIR}/enhanced_found_file.sh" echo '}' >> "${WORKDIR}/enhanced_found_file.sh" echo '' >> "${WORKDIR}/enhanced_found_file.sh" # Create new FIP script that sources our enhanced function first echo '#!/bin/bash' > "${FIP_SCRIPT}.new" echo '' >> "${FIP_SCRIPT}.new" echo '# DCM Enhanced FIP Script' >> "${FIP_SCRIPT}.new" echo 'echo "=== DCM FIP SCRIPT PATCH ACTIVE ===" >&2' >> "${FIP_SCRIPT}.new" echo '' >> "${FIP_SCRIPT}.new" # Add our enhanced found_file function cat "${WORKDIR}/enhanced_found_file.sh" >> "${FIP_SCRIPT}.new" # Add the original script content, excluding the original found_file function awk ' BEGIN { in_function = 0; skip_shebang = 1 } /^#!/ && skip_shebang { skip_shebang = 0; next } /^function found_file/ { in_function = 1; next } in_function && /^}$/ { in_function = 0; next } !in_function { print } ' "${FIP_SCRIPT}.backup" >> "${FIP_SCRIPT}.new" # Replace the original script mv "${FIP_SCRIPT}.new" "$FIP_SCRIPT" chmod +x "$FIP_SCRIPT" bbplain "FIP script enhanced successfully" else bbwarn "FIP script not found at $FIP_SCRIPT" fi # Final verification if [ -d "${FW_CONFIG_DIR}" ]; then FILE_COUNT=$(ls -1 "${FW_CONFIG_DIR}"/*.dtb 2>/dev/null | wc -l) bbplain "✓ FW_conf directory verified: ${FW_CONFIG_DIR} contains ${FILE_COUNT} DTB files" else bbfatal "✗ FW_conf directory still missing: ${FW_CONFIG_DIR}" fi bbplain "=== FIP DCM PREPARATION COMPLETED ===" }