213 lines
7.2 KiB
Bash
Executable File
213 lines
7.2 KiB
Bash
Executable File
#!/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 <recipe>' beginnen."
|
|
echo ""
|