meta-dcm/recipes-kernel/linux/old/linux-stm32mp-dcm_%.bbappend

137 lines
4.6 KiB
Plaintext

# Speichere diese Datei als:
# /home/mf/Yocto/DCM/layers/meta-dcm/recipes-kernel/linux/linux-stm32mp-dcm_%.bbappend
# Überschreibe die problematische do_compile-Funktion vollständig
do_compile() {
bbplain "Verwende angepasstes do_compile für DCM-Board"
# Verwende Standard-Build-Verzeichnis
BUILD_DIR="${B}"
KERNEL_SRC="${S}"
# Ermittle Anzahl der Kerne für parallele Kompilierung
PARALLEL_JOBS="${@oe.utils.cpu_count()}"
# Baue Kernel und DTBs in einem Schritt
cd ${KERNEL_SRC}
bbplain "Baue Kernel und DTBs parallel mit ${PARALLEL_JOBS} Jobs..."
make O=${BUILD_DIR} ARCH=arm CROSS_COMPILE=${TARGET_PREFIX} -j ${PARALLEL_JOBS} zImage dtbs
# Überprüfe Erfolg
if [ -f "${BUILD_DIR}/arch/arm/boot/zImage" ]; then
bbplain "Kernel-Image erfolgreich erstellt!"
else
bbfatal "Fehler beim Erstellen des Kernel-Images!"
fi
# Überprüfe DTB
if [ -f "${BUILD_DIR}/arch/arm/boot/dts/st/stm32mp157c-dcm.dtb" ]; then
bbplain "DTB erfolgreich erstellt!"
else
bbwarn "DTB wurde nicht erstellt. Prüfe, ob deine DTS-Datei korrekt ist."
fi
}
# Funktion zum Hinzufügen unserer DTS
do_prepare_dts() {
# Überprüfe die Verzeichnisstruktur
bbplain "Kernel-Quellverzeichnis: ${S}"
# Erstelle das ST-Verzeichnis im Kernel-Quellverzeichnis
mkdir -p ${S}/arch/arm/boot/dts/st
# Kopiere unsere DTS-Datei in das Kernel-Quellverzeichnis
if [ -f ${TOPDIR}/../layers/meta-dcm/recipes-kernel/linux/linux-stm32mp/stm32mp157c-dcm.dts ]; then
bbplain "Kopiere DTS-Datei ins Kernel-Quellverzeichnis"
cp -f ${TOPDIR}/../layers/meta-dcm/recipes-kernel/linux/linux-stm32mp/stm32mp157c-dcm.dts ${S}/arch/arm/boot/dts/st/
# Überprüfe Erfolg
if [ -f "${S}/arch/arm/boot/dts/st/stm32mp157c-dcm.dts" ]; then
bbplain "DTS-Datei erfolgreich kopiert"
else
bbfatal "Fehler beim Kopieren der DTS-Datei"
fi
else
bbfatal "DTS-Datei nicht gefunden!"
fi
# Aktualisiere die Makefile
if [ -f ${S}/arch/arm/boot/dts/st/Makefile ]; then
if ! grep -q "stm32mp157c-dcm.dtb" ${S}/arch/arm/boot/dts/st/Makefile; then
bbplain "Füge stm32mp157c-dcm.dtb zur Makefile hinzu"
sed -i 's/stm32mp157c-dk2.dtb \\/stm32mp157c-dk2.dtb \\\n\tstm32mp157c-dcm.dtb \\/g' ${S}/arch/arm/boot/dts/st/Makefile
else
bbplain "stm32mp157c-dcm.dtb ist bereits in der Makefile enthalten"
fi
else
bbwarn "Makefile nicht gefunden im ST-Verzeichnis"
fi
# Überprüfe, ob stm32mp157.dtsi existiert
if [ ! -f "${S}/arch/arm/boot/dts/st/stm32mp157.dtsi" ]; then
bbplain "stm32mp157.dtsi nicht gefunden, suche im Kernel-Quellbaum..."
DTSI_FILES=$(find ${S} -name "stm32mp157.dtsi")
if [ -n "$DTSI_FILES" ]; then
DTSI_FILE=$(echo "$DTSI_FILES" | head -1)
cp -f "$DTSI_FILE" ${S}/arch/arm/boot/dts/st/
bbplain "stm32mp157.dtsi kopiert nach ${S}/arch/arm/boot/dts/st/"
else
bbwarn "stm32mp157.dtsi nicht gefunden, erstelle eine Dummy-Version"
# Erstelle eine minimale stm32mp157.dtsi
cat > ${S}/arch/arm/boot/dts/st/stm32mp157.dtsi <<EOF
// Minimale stm32mp157.dtsi
/ {
compatible = "st,stm32mp157";
#address-cells = <1>;
#size-cells = <1>;
// Minimale Definitionen für einen gültigen Device Tree
cpus {
#address-cells = <1>;
#size-cells = <0>;
cpu0: cpu@0 {
compatible = "arm,cortex-a7";
device_type = "cpu";
reg = <0>;
};
};
soc {
compatible = "simple-bus";
#address-cells = <1>;
#size-cells = <1>;
};
};
EOF
bbplain "Dummy stm32mp157.dtsi erstellt"
fi
fi
}
# Führe die DTS-Vorbereitung vor der Konfiguration aus
addtask prepare_dts before do_configure after do_patch
# Überschreibe die Installation, um zusätzliche DTBs zu installieren
do_install:append() {
# Stelle sicher, dass unsere DTBs installiert werden
DTB_PATH="${B}/arch/arm/boot/dts/st/stm32mp157c-dcm.dtb"
if [ -f "$DTB_PATH" ]; then
install -d ${D}/${KERNEL_IMAGEDEST}
install -m 0644 $DTB_PATH ${D}/${KERNEL_IMAGEDEST}/
else
bbwarn "DTB nicht gefunden: $DTB_PATH"
fi
}
# Deaktiviere einzelne DTB-Builds, um Fehler zu vermeiden
KERNEL_DTB_LINK_NAME = ""
# Setz SCMVERSION auf "n", damit .scmversion nicht verwendet wird
SCMVERSION = "n"
# Unterdrücke QA-Warnung für buildpaths
INSANE_SKIP:${PN}-src += "buildpaths"