meta-dcm/recipes-kernel/linux/linux-stm32mp-dcm_6.6.bb.ba...

359 lines
11 KiB
Plaintext

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