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