# 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 - übernommen vom ST-Rezept LINUX_VERSION = "6.6" LINUX_SUBVERSION = ".48" LINUX_TARGET = "stm32mp" LINUX_RELEASE = "r1" KERNEL_VERSION = "${LINUX_VERSION}${LINUX_SUBVERSION}" PV = "${LINUX_VERSION}${LINUX_SUBVERSION}-${LINUX_TARGET}-${LINUX_RELEASE}" # Verwende die exakte Revision vom ST-Rezept SRCREV = "3682d604ecbdd233bb7e38b8e18f0496d78a8969" # 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" # Kernel-spezifische Variablen für andere Rezepte KERNEL_VERSION = "${LINUX_VERSION}${LINUX_SUBVERSION}" STAGING_KERNEL_DIR = "${STAGING_DIR_HOST}/usr/src/kernel" STAGING_KERNEL_BUILDDIR = "${STAGING_DIR_HOST}/usr/src/kernel" # Dependencies DEPENDS += "u-boot-tools-native" DEPENDS += "bc-native" DEPENDS += "openssl-native" DEPENDS += "flex-native" DEPENDS += "bison-native" DEPENDS += "rsync-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 kernel-headers kernel-imagebootfs" # Packages - erweitert um alle notwendigen Kernel-Pakete PACKAGES = "${PN} ${PN}-dev ${PN}-dbg kernel-headers ${PN}-headers kernel-imagebootfs" PACKAGES =+ "kernel-modules" FILES:${PN} = "/boot/*" FILES:${PN}-dev = "/usr/src/* /usr/lib/modules/*/build" FILES:${PN}-headers = "/usr/src/linux-header-*" FILES:kernel-headers = "/usr/src/linux-header-*" FILES:kernel-imagebootfs = "/boot/*" FILES:kernel-modules = "/usr/lib/modules/*" # RPROVIDEs für Kompatibilität RPROVIDES:${PN} = "kernel-${LINUX_VERSION}${LINUX_SUBVERSION}" RPROVIDES:kernel-headers = "kernel-headers" RPROVIDES:kernel-imagebootfs = "kernel-imagebootfs" # 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 fi # Füge TFP410-Support hinzu bbplain "Aktiviere TFP410, TLV320 und Maya-W2-Support + PCM-068 SOM" cat >> ${B}/.config << EOF # PCM-068-024113I SOM Support CONFIG_PHYTEC_PCM068=y # TFP410 DVI Transmitter Support CONFIG_DRM_TI_TFP410=m CONFIG_DRM_BRIDGE=y CONFIG_DRM_PANEL_BRIDGE=y CONFIG_DRM_STM=y CONFIG_DRM_STM_DSI=y # Display und Framebuffer Support CONFIG_FB=y CONFIG_DRM=y CONFIG_DRM_FBDEV_EMULATION=y CONFIG_DRM_SIMPLE_BRIDGE=y CONFIG_DRM_DISPLAY_CONNECTOR=y # eMMC Support (4GB auf PCM-068) CONFIG_MMC=y CONFIG_MMC_SDHCI=y CONFIG_MMC_SDHCI_PLTFM=y CONFIG_MMC_SDHCI_STM32=y CONFIG_MMC_STM32_SDMMC=y # NOR Flash Support (16MB auf PCM-068) CONFIG_MTD=y CONFIG_MTD_SPI_NOR=y CONFIG_SPI_STM32_QSPI=y # EEPROM Support (4KB auf PCM-068) CONFIG_EEPROM_AT24=y # Ethernet PHY Support (DP83867 auf PCM-068) CONFIG_DP83867_PHY=y CONFIG_PHYLIB=y # TLV320 Audio Codec Support (I2C1 + SAI2) CONFIG_SND=y CONFIG_SND_SOC=y CONFIG_SND_SOC_STM32=y CONFIG_SND_SOC_STM32_SAI=y CONFIG_SND_SOC_STM32_I2S=y CONFIG_SND_SOC_TLV320AIC23=m CONFIG_SND_SOC_TLV320AIC3X=m CONFIG_SND_SIMPLE_CARD=y CONFIG_SND_SOC_SIMPLE_CARD=y # Audio Support CONFIG_SND_PCM=y CONFIG_SND_HWDEP=y CONFIG_SND_TIMER=y CONFIG_SND_HRTIMER=y # M2-Maya-W2 WLAN+BT Support (u-blox MAYA-W2 = Broadcom BCM43xx) CONFIG_BRCMFMAC=m CONFIG_BRCMFMAC_SDIO=y CONFIG_BRCMFMAC_USB=y CONFIG_BRCMFMAC_PCIE=y # Bluetooth Support (USART3) CONFIG_BT=y CONFIG_BT_RFCOMM=y CONFIG_BT_RFCOMM_TTY=y CONFIG_BT_BNEP=y CONFIG_BT_BNEP_MC_FILTER=y CONFIG_BT_BNEP_PROTO_FILTER=y CONFIG_BT_HIDP=y CONFIG_BT_HCIBTUSB=y CONFIG_BT_HCIUART=y CONFIG_BT_HCIUART_BCM=y CONFIG_BT_HCIUART_H4=y # WLAN Support CONFIG_CFG80211=y CONFIG_MAC80211=y CONFIG_WIRELESS=y CONFIG_WEXT_CORE=y CONFIG_WEXT_PROC=y # SDIO Support für Maya-W2 WLAN (SDMMC3) CONFIG_MMC_SDHCI=y CONFIG_MMC_SDHCI_PLTFM=y CONFIG_MMC_SDHCI_STM32=y # GPIO Support für TFP410 Control CONFIG_GPIOLIB=y CONFIG_GPIO_STM32=y # I2C Support CONFIG_I2C=y CONFIG_I2C_STM32F4=y EOF oe_runmake O=${B} ARCH=arm CROSS_COMPILE=${TARGET_PREFIX} olddefconfig } # Kernel-Build do_compile() { bbplain "Kompiliere Kernel für DCM Board" # Anzahl paralleler Jobs PARALLEL_JOBS="${@oe.utils.cpu_count()}" cd ${S} # Build zImage, DTBs und Module oe_runmake O=${B} ARCH=arm CROSS_COMPILE=${TARGET_PREFIX} -j ${PARALLEL_JOBS} zImage dtbs modules # 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 bbplain "Kernel-Module erfolgreich erstellt" } # 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 # Installiere Kernel-Headers für SDK und andere Pakete bbplain "Installiere Kernel-Headers" cd ${S} oe_runmake O=${B} ARCH=arm CROSS_COMPILE=${TARGET_PREFIX} headers_install INSTALL_HDR_PATH=${D}/usr/src/linux-header-${KERNEL_VERSION} # Kernel sollte diese Header nicht exportieren rm -f ${D}/usr/src/linux-header-${KERNEL_VERSION}/include/scsi/scsi.h || true # Entferne ..install.cmd Dateien die Probleme verursachen können find ${D}/usr/src/linux-header-${KERNEL_VERSION} -name ..install.cmd | xargs rm -f || true # Installiere Kernel-Module bbplain "Installiere Kernel-Module" oe_runmake O=${B} ARCH=arm CROSS_COMPILE=${TARGET_PREFIX} modules_install INSTALL_MOD_PATH=${D}/usr 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 # Kernel-spezifische Tasks die von anderen Paketen erwartet werden do_shared_workdir() { bbplain "Erstelle shared_workdir für andere Kernel-Module" # Erstelle das shared_workdir Verzeichnis install -d ${STAGING_KERNEL_DIR} install -d ${STAGING_KERNEL_BUILDDIR} # Kopiere notwendige Kernel-Headers und Build-Dateien if [ -d "${S}" ]; then cp -a ${S}/* ${STAGING_KERNEL_DIR}/ 2>/dev/null || true fi if [ -d "${B}" ]; then cp -a ${B}/.config ${STAGING_KERNEL_BUILDDIR}/ 2>/dev/null || true cp -a ${B}/Module.symvers ${STAGING_KERNEL_BUILDDIR}/ 2>/dev/null || true cp -a ${B}/scripts ${STAGING_KERNEL_BUILDDIR}/ 2>/dev/null || true cp -a ${B}/include ${STAGING_KERNEL_BUILDDIR}/ 2>/dev/null || true fi bbplain "shared_workdir erstellt" } addtask shared_workdir after do_compile before do_install # QA-Überprüfungen unterdrücken INSANE_SKIP:${PN} += "buildpaths packages-list"