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

198 lines
6.2 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
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"