359 lines
11 KiB
Plaintext
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"
|