# 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 <; #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"