#!/bin/bash - unalias -a # Setze den Pfad zum Meta-Layer-Root if [ -z "$META_LAYER_ROOT" ]; then _META_LAYER_ROOT=layers/meta-st else _META_LAYER_ROOT=$META_LAYER_ROOT fi # Setze ROOTOE für oe sdk baseline ROOTOE=$PWD while test ! -d "${ROOTOE}/${_META_LAYER_ROOT}" && test "${ROOTOE}" != "/" do ROOTOE=$(dirname ${ROOTOE}) done if test "${ROOTOE}" == "/" then echo "[ERROR] Du versuchst das Skript außerhalb des OE SDK-Verzeichnisses zu starten" return 1 fi # Konstantes Build-Verzeichnis definieren BUILD_DIR=build-openstlinuxeglfs-stm32mp157c-dcm # Prüfe, ob alle notwendigen Layer existieren check_layers() { local missing_layers=() # Liste aller Layer, die geprüft werden sollen local layers=( "layers/openembedded-core/meta" "layers/meta-openembedded/meta-oe" "layers/meta-openembedded/meta-python" "layers/meta-openembedded/meta-networking" "layers/meta-openembedded/meta-gnome" "layers/meta-openembedded/meta-multimedia" "layers/meta-openembedded/meta-webserver" "layers/meta-st/meta-st-stm32mp" "layers/meta-st/meta-st-stm32mp-addons" "layers/meta-st/meta-st-openstlinux" "layers/meta-dcm" ) for layer in "${layers[@]}"; do if [ ! -d "${ROOTOE}/${layer}" ]; then missing_layers+=("${layer}") fi done if [ ${#missing_layers[@]} -gt 0 ]; then echo "Warnung: Folgende Layer fehlen in deinem Setup:" for layer in "${missing_layers[@]}"; do echo " ${layer}" done echo "Das Script wird fortgesetzt, aber es könnten Probleme auftreten." echo fi } # Entferne alte dtc 1.6.1 Datei, falls vorhanden remove_old_dtc() { DTC_RECIPE_FILE="${ROOTOE}/layers/meta-dcm/recipes-devtools/dtc/dtc_1.6.1.bb" if [ -f "${DTC_RECIPE_FILE}" ]; then echo "Entferne altes dtc 1.6.1 Recipe..." rm -f "${DTC_RECIPE_FILE}" fi } # Erstelle bbappend für optee-stm32mp-addons, um das Repository-Problem zu beheben create_optee_bbappend() { OPTEE_APPEND_DIR="${ROOTOE}/layers/meta-dcm/recipes-security/optee" OPTEE_APPEND_FILE="${OPTEE_APPEND_DIR}/optee-stm32mp-addons_%.bbappend" mkdir -p "${OPTEE_APPEND_DIR}" echo "Erstelle bbappend für optee-stm32mp-addons, um den Branch zu korrigieren..." cat > "${OPTEE_APPEND_FILE}" << 'EOF' # Korrigiere den Branch im optee-stm32mp-addons Rezept SRC_URI = "git://github.com/STMicroelectronics/optee-stm32mp-addons;protocol=https;branch=master" # Erzwinge kein Klonen bei Fehlern, falls das Repo vorübergehend nicht erreichbar ist BB_FETCH_PREMIRRORONLY = "1" EOF } # Initialisiere oder aktualisiere das Build-Verzeichnis setup_build_dir() { if [ ! -d "${ROOTOE}/${BUILD_DIR}" ]; then echo "Erstelle neues Build-Verzeichnis: ${BUILD_DIR}" # Initiiere das buildsystem mit dem default oe-init-build-env script source ${ROOTOE}/layers/openembedded-core/oe-init-build-env ${BUILD_DIR} > /dev/null is_new_build=true else echo "Verwende existierendes Build-Verzeichnis: ${BUILD_DIR}" # Prüfe, ob conf-Verzeichnis existiert oder beschädigt ist if [ ! -d "${ROOTOE}/${BUILD_DIR}/conf" ] || [ ! -f "${ROOTOE}/${BUILD_DIR}/conf/local.conf" ]; then echo "Conf-Verzeichnis fehlt oder ist beschädigt, initialisiere neu..." source ${ROOTOE}/layers/openembedded-core/oe-init-build-env ${BUILD_DIR} > /dev/null is_new_build=true else # Initiiere das buildsystem mit dem default oe-init-build-env script source ${ROOTOE}/layers/openembedded-core/oe-init-build-env ${BUILD_DIR} > /dev/null is_new_build=false fi fi } # Prüfe Layer vor dem Fortfahren check_layers # Entferne alte dtc 1.6.1 Datei remove_old_dtc # Erstelle bbappend für optee-stm32mp-addons create_optee_bbappend # Setup Build-Verzeichnis setup_build_dir # Aktualisiere nur die Konfigurationsdateien, wenn es ein neuer Build ist oder wenn Flag gesetzt ist if [ "$is_new_build" = true ] || [ "$FORCE_CONFIG_UPDATE" = true ]; then # Aktualisiere bblayers.conf echo "Aktualisiere bblayers.conf mit allen notwendigen Layern..." cat > ${BUILDDIR}/conf/bblayers.conf << EOF # LAYER_CONF_VERSION is increased each time build/conf/bblayers.conf # changes incompatibly LCONF_VERSION = "7" BBPATH = "\${TOPDIR}" BBFILES ?= "" BBLAYERS ?= " \\ ${ROOTOE}/layers/openembedded-core/meta \\ ${ROOTOE}/layers/meta-openembedded/meta-oe \\ ${ROOTOE}/layers/meta-openembedded/meta-python \\ ${ROOTOE}/layers/meta-openembedded/meta-networking \\ ${ROOTOE}/layers/meta-openembedded/meta-gnome \\ ${ROOTOE}/layers/meta-openembedded/meta-multimedia \\ ${ROOTOE}/layers/meta-openembedded/meta-webserver \\ ${ROOTOE}/layers/meta-st/meta-st-stm32mp \\ ${ROOTOE}/layers/meta-st/meta-st-stm32mp-addons \\ ${ROOTOE}/layers/meta-st/meta-st-openstlinux \\ ${ROOTOE}/layers/meta-dcm \\ " EOF # Aktualisiere local.conf nur, wenn es ein neuer Build ist if [ "$is_new_build" = true ]; then echo "Aktualisiere local.conf mit den richtigen Einstellungen..." cat >> ${BUILDDIR}/conf/local.conf << EOF # Distribution DISTRO = "openstlinux-eglfs" # Machine MACHINE = "stm32mp157c-dcm" # Set EULA acceptance ACCEPT_EULA_stm32mp157c-dcm = "1" # Optionen für Download-Probleme BB_FETCH_PREMIRRORONLY = "1" FETCHCMD_git = "git -c http.sslVerify=false" EOF fi else echo "Verwende bestehende Konfigurationsdateien." fi # Füge linux-stm32mp_%.bbappend hinzu, um mit DTC 1.7.0 zu arbeiten KERNEL_APPEND_DIR="${ROOTOE}/layers/meta-dcm/recipes-kernel/linux" KERNEL_APPEND_FILE="${KERNEL_APPEND_DIR}/linux-stm32mp_%.bbappend" if [ ! -f "${KERNEL_APPEND_FILE}" ] || [ "$FORCE_CONFIG_UPDATE" = true ]; then echo "Erstelle linux-stm32mp_%.bbappend in meta-dcm Layer für die Arbeit mit DTC 1.7.0" mkdir -p "${KERNEL_APPEND_DIR}" cat > "${KERNEL_APPEND_FILE}" << 'EOF' # Vorverarbeiten der DTS-Dateien für dtc 1.7.0 do_compile:prepend() { # Setze erweiterte DTC-FLAGS für Include-Pfade export DTC_FLAGS="-i ${S}/include -i ${S}/arch/arm/boot/dts -i ${S}/scripts/dtc/include-prefixes" # Verwende CPP zum Vorverarbeiten der DTS-Dateien if [ -d ${S}/arch/arm/boot/dts ]; then DTS_DIR=${S}/arch/arm/boot/dts DTS_FILES=$(find ${DTS_DIR} -name "stm32mp157c-*.dts") for dts_file in ${DTS_FILES}; do # Erstelle Verzeichnis für vorprozessierte Dateien dirname_dts=$(dirname ${dts_file}) basename_dts=$(basename ${dts_file}) mkdir -p ${B}/preprocessed_dts echo "Vorverarbeiten von $dts_file mit CPP..." # Vorverarbeiten mit CPP, um alle Includes zu verarbeiten ${CPP} -nostdinc -undef -x assembler-with-cpp -I${DTS_DIR} -I${S}/include -I${S}/arch/arm/boot/dts -I${S}/scripts/dtc/include-prefixes \ -o ${B}/preprocessed_dts/${basename_dts} ${dts_file} # Ersetze Original-DTS mit vorverarbeiteter DTS cp ${B}/preprocessed_dts/${basename_dts} ${dts_file} done fi } EOF fi echo "" echo "meta-dcm Layer Setup abgeschlossen." echo "Du verwendest Build-Verzeichnis: ${BUILD_DIR}" echo "Du kannst nun mit 'bitbake ' beginnen." echo ""