# Speichere diese Datei als: # /home/mf/Yocto/DCM/layers/meta-dcm/recipes-kernel/linux/linux-stm32mp-dcm_6.6.bb # Minimales Kernel-Rezept für DCM-Board - OHNE kernel.bbclass # Um alle Konflikte zu vermeiden SUMMARY = "Linux Kernel für STM32MP157C DCM Board" DESCRIPTION = "Angepasster Linux Kernel 6.6 für das DCM Board basierend auf STM32MP157C" LICENSE = "GPL-2.0-only" LIC_FILES_CHKSUM = "file://COPYING;md5=6bc538ed5bd9a7fc9398086aedcd7e46" # KEIN inherit kernel - um alle Probleme zu vermeiden # Kernel-Version und Quelle KERNEL_VERSION = "6.6.48" PV = "${KERNEL_VERSION}-stm32mp-r1" # Git-Repository für ST-Kernel - verwende AUTOREV um die neueste Version zu holen SRCREV = "${AUTOREV}" # Git-Repository für ST-Kernel SRC_URI = "git://github.com/STMicroelectronics/linux.git;protocol=https;branch=v6.6-stm32mp" # DCM-spezifische Dateien FILESEXTRAPATHS:prepend := "${THISDIR}/linux-stm32mp:" SRC_URI += "file://fragment-01-dcm.config" SRC_URI += "file://0002-fix-stm32-rifsc-debugfs.patch" S = "${WORKDIR}/git" B = "${WORKDIR}/build" # Architektur und Maschine COMPATIBLE_MACHINE = "(stm32mp157c-dcm)" # Package-Name PN = "linux-stm32mp-dcm" # Dependencies DEPENDS += "u-boot-tools-native" DEPENDS += "bc-native" DEPENDS += "openssl-native" DEPENDS += "flex-native" DEPENDS += "bison-native" # Kernel-Konfiguration KERNEL_DEFCONFIG = "stm32_defconfig" # Image-Typen KERNEL_IMAGETYPE = "uImage" # U-Boot-Parameter UBOOT_ENTRYPOINT = "0xC2000040" UBOOT_LOADADDRESS = "0xC2000040" # Installation-Pfad KERNEL_IMAGEDEST = "boot" # Provides PROVIDES = "virtual/kernel" # Packages PACKAGES = "${PN} ${PN}-dev ${PN}-dbg" FILES:${PN} = "/boot/*" FILES:${PN}-dev = "/usr/src/*" # Funktion zum Hinzufügen der DCM-DTS zum Kernel-Quellverzeichnis do_prepare_dts() { bbplain "Bereite DCM DTS vor..." # Erstelle das ST-Verzeichnis im Kernel-Quellverzeichnis mkdir -p ${S}/arch/arm/boot/dts/st # Kopiere unsere DTS-Datei if [ -f ${THISDIR}/linux-stm32mp/stm32mp157c-dcm.dts ]; then bbplain "Kopiere DCM DTS-Datei" cp -f ${THISDIR}/linux-stm32mp/stm32mp157c-dcm.dts ${S}/arch/arm/boot/dts/st/ else bbfatal "DCM DTS-Datei nicht gefunden: ${THISDIR}/linux-stm32mp/stm32mp157c-dcm.dts" fi # Füge DTB zur Makefile hinzu 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 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 fi fi } # Konfiguration do_configure() { bbplain "Konfiguriere Kernel für DCM Board" cd ${S} # Erstelle Build-Verzeichnis mkdir -p ${B} # Verwende Standard-STM32-Defconfig oe_runmake O=${B} ARCH=arm CROSS_COMPILE=${TARGET_PREFIX} ${KERNEL_DEFCONFIG} # Füge DCM-Fragment hinzu falls vorhanden if [ -f ${WORKDIR}/fragment-01-dcm.config ]; then bbplain "Merge DCM-Konfigurationsfragment" cat ${WORKDIR}/fragment-01-dcm.config >> ${B}/.config oe_runmake O=${B} ARCH=arm CROSS_COMPILE=${TARGET_PREFIX} olddefconfig fi } # Kernel-Build do_compile() { bbplain "Kompiliere Kernel für DCM Board" # Anzahl paralleler Jobs PARALLEL_JOBS="${@oe.utils.cpu_count()}" cd ${S} # Build zImage und DTBs oe_runmake O=${B} ARCH=arm CROSS_COMPILE=${TARGET_PREFIX} -j ${PARALLEL_JOBS} zImage dtbs # Prüfe zImage if [ ! -f "${B}/arch/arm/boot/zImage" ]; then bbfatal "zImage Build fehlgeschlagen" fi bbplain "zImage erfolgreich erstellt" # Erstelle uImage bbplain "Erstelle uImage..." mkimage -A arm -O linux -T kernel -C none \ -a ${UBOOT_LOADADDRESS} -e ${UBOOT_ENTRYPOINT} \ -n "Linux Kernel ${KERNEL_VERSION}" \ -d ${B}/arch/arm/boot/zImage \ ${B}/arch/arm/boot/uImage # Prüfe uImage if [ ! -f "${B}/arch/arm/boot/uImage" ]; then bbfatal "uImage Build fehlgeschlagen" fi bbplain "uImage erfolgreich erstellt" # Prüfe DTB if [ -f "${B}/arch/arm/boot/dts/st/stm32mp157c-dcm.dtb" ]; then bbplain "DCM DTB erfolgreich erstellt" else bbwarn "DCM DTB nicht erstellt" fi } # Installation do_install() { bbplain "Installiere Kernel-Dateien für DCM Board (eigene Implementation)" # Erstelle Verzeichnisse install -d ${D}/${KERNEL_IMAGEDEST} # Installiere zImage bbplain "Installiere zImage" install -m 0644 ${B}/arch/arm/boot/zImage ${D}/${KERNEL_IMAGEDEST}/zImage-${KERNEL_VERSION} ln -sf zImage-${KERNEL_VERSION} ${D}/${KERNEL_IMAGEDEST}/zImage # Installiere uImage bbplain "Installiere uImage" install -m 0644 ${B}/arch/arm/boot/uImage ${D}/${KERNEL_IMAGEDEST}/uImage-${KERNEL_VERSION} ln -sf uImage-${KERNEL_VERSION} ${D}/${KERNEL_IMAGEDEST}/uImage # Installiere DTB falls vorhanden if [ -f "${B}/arch/arm/boot/dts/st/stm32mp157c-dcm.dtb" ]; then bbplain "Installiere DCM DTB" install -m 0644 ${B}/arch/arm/boot/dts/st/stm32mp157c-dcm.dtb ${D}/${KERNEL_IMAGEDEST}/stm32mp157c-dcm-${KERNEL_VERSION}.dtb ln -sf stm32mp157c-dcm-${KERNEL_VERSION}.dtb ${D}/${KERNEL_IMAGEDEST}/stm32mp157c-dcm.dtb fi # Installiere System.map und config if [ -f "${B}/System.map" ]; then bbplain "Installiere System.map" install -m 0644 ${B}/System.map ${D}/${KERNEL_IMAGEDEST}/System.map-${KERNEL_VERSION} ln -sf System.map-${KERNEL_VERSION} ${D}/${KERNEL_IMAGEDEST}/System.map fi if [ -f "${B}/.config" ]; then bbplain "Installiere Kernel-Config" install -m 0644 ${B}/.config ${D}/${KERNEL_IMAGEDEST}/config-${KERNEL_VERSION} ln -sf config-${KERNEL_VERSION} ${D}/${KERNEL_IMAGEDEST}/config fi bbplain "DCM Kernel-Installation abgeschlossen!" } # Task-Reihenfolge addtask prepare_dts after do_patch before do_configure addtask configure after do_prepare_dts before do_compile addtask compile after do_configure before do_install addtask install after do_compile before do_populate_sysroot # QA-Überprüfungen unterdrücken INSANE_SKIP:${PN} += "buildpaths packages-list"