diff --git a/srcpkgs/rpi5-kernel b/srcpkgs/rpi5-kernel deleted file mode 120000 index 3b4ec073331..00000000000 --- a/srcpkgs/rpi5-kernel +++ /dev/null @@ -1 +0,0 @@ -rpi-kernel \ No newline at end of file diff --git a/srcpkgs/rpi5-kernel-dbg b/srcpkgs/rpi5-kernel-dbg new file mode 120000 index 00000000000..a39308783f8 --- /dev/null +++ b/srcpkgs/rpi5-kernel-dbg @@ -0,0 +1 @@ +rpi5-kernel \ No newline at end of file diff --git a/srcpkgs/rpi5-kernel-headers b/srcpkgs/rpi5-kernel-headers index 3b4ec073331..a39308783f8 120000 --- a/srcpkgs/rpi5-kernel-headers +++ b/srcpkgs/rpi5-kernel-headers @@ -1 +1 @@ -rpi-kernel \ No newline at end of file +rpi5-kernel \ No newline at end of file diff --git a/srcpkgs/rpi5-kernel/files b/srcpkgs/rpi5-kernel/files new file mode 120000 index 00000000000..a88aa558fb6 --- /dev/null +++ b/srcpkgs/rpi5-kernel/files @@ -0,0 +1 @@ +../rpi-kernel/files \ No newline at end of file diff --git a/srcpkgs/rpi5-kernel/template b/srcpkgs/rpi5-kernel/template new file mode 100644 index 00000000000..8eec56b584e --- /dev/null +++ b/srcpkgs/rpi5-kernel/template @@ -0,0 +1,294 @@ +# Template file for 'rpi5-kernel' +# +# We track the latest Raspberry Pi LTS kernel as that is what is used in the +# official Raspberry Pi OS distribution. This is currently 6.6: +# +# https://forums.raspberrypi.com/viewtopic.php?t=361116 +# +# Commit hash is picked from latest tag [1], if appropriate, or from latest +# "Merge remote-tracking branch 'stable/linux-6.x.y' into rpi-6.x.y" commit. +# +# [1] https://github.com/raspberrypi/linux/tags +# +# Upstream documentation: https://www.raspberrypi.com/documentation/computers/linux_kernel.html +# +# XXX: KEEP IN SYNC WITH rpi-kernel +pkgname=rpi5-kernel +version=6.6.67 +revision=1 +_githash=730a6e5cb8cd195e8dd2bb1406af277621831583 +archs="aarch64*" +hostmakedepends="perl kmod uboot-mkimage openssl-devel bc bison flex xz pahole + python3 elfutils-devel cpio tar zstd" +makedepends="ncurses-devel" +short_desc="Linux kernel for Raspberry Pi 5 (${version%.*} series)" +maintainer="classabbyamp " +license="GPL-2.0-only" +homepage="http://www.kernel.org" +distfiles="https://github.com/raspberrypi/linux/archive/${_githash}.tar.gz" +checksum=df7e50191f8f4bbaabebf33902f7b776b446757e9617258b71fc5af7374934b4 +python_version=3 + +_kernver="${version}_${revision}" +triggers="kernel-hooks" +kernel_hooks_version="${_kernver}" + +nodebug=yes # generated manually +nostrip=yes +noverifyrdeps=yes +noshlibprovides=yes + +# These files could be modified when an external module is built. +mutable_files=" + /usr/lib/modules/${_kernver}/modules.builtin.bin + /usr/lib/modules/${_kernver}/modules.builtin.alias.bin + /usr/lib/modules/${_kernver}/modules.softdep + /usr/lib/modules/${_kernver}/modules.dep + /usr/lib/modules/${_kernver}/modules.dep.bin + /usr/lib/modules/${_kernver}/modules.symbols + /usr/lib/modules/${_kernver}/modules.symbols.bin + /usr/lib/modules/${_kernver}/modules.alias + /usr/lib/modules/${_kernver}/modules.alias.bin + /usr/lib/modules/${_kernver}/modules.devname" + +# reproducible build +export KBUILD_BUILD_TIMESTAMP=$(LC_ALL=C date -ud @${SOURCE_DATE_EPOCH:-0}) +export KBUILD_BUILD_USER=voidlinux +export KBUILD_BUILD_HOST=voidlinux + +if [ "$CROSS_BUILD" ]; then + _cross="CROSS_COMPILE=${XBPS_CROSS_TRIPLET}-" +fi + +provides="rpi-kernel-${version}_${revision}" +replaces="rpi-kernel>=0" + +do_configure() { + local cfg overlay tgt="oldconfig" + + # If there's a file called -dotconfig, use it to + # configure the kernel; otherwise use board defaults. + if [ -f "${FILESDIR}/arm64-dotconfig-custom" ]; then + msg_normal "Detected a custom .config file for your arch, using it.\n" + cfg="${FILESDIR}/arm64-dotconfig-custom" + elif [ -f "${FILESDIR}/arm64-dotconfig" ]; then + msg_normal "Detected a .config file for your arch, using it.\n" + cfg="${FILESDIR}/arm64-dotconfig" + else + msg_normal "Using default configuration for your arch.\n" + cfg=arch/arm64/configs/bcm2712_defconfig + tgt=olddefconfig + fi + + # apply custom settings for the pi5 kernel (mostly just page size) + if [ -f "${FILESDIR}/rpi5-config-overlay-custom" ]; then + overlay="${FILESDIR}/rpi5-config-overlay-custom" + elif [ -f "${FILESDIR}/rpi5-config-overlay" ]; then + overlay="${FILESDIR}/rpi5-config-overlay" + fi + + cp -f "$cfg" .config + scripts/kconfig/merge_config.sh -m .config "$overlay" + make ${makejobs} ARCH=arm64 ${_cross} ${tgt} + + # Always use our revision to CONFIG_LOCALVERSION to match our pkg version. + sed -i -e "s|^\(CONFIG_LOCALVERSION=\).*|\1\"_${revision}\"|" .config +} + +do_build() { + export LDFLAGS= + make ARCH=arm64 ${_cross} ${makejobs} prepare + make ARCH=arm64 ${_cross} ${makejobs} Image.gz modules dtbs +} + +do_install() { + local arch=arm64 hdrdest + + # Run depmod after compressing modules - makes depmod.sh a noop + sed -i '2iexit 0' scripts/depmod.sh + vmkdir usr/lib + ln -s usr/lib/ ${DESTDIR} + + # Install kernel, firmware and modules + make ${makejobs} ARCH=arm64 INSTALL_MOD_PATH=${DESTDIR} ${_cross} modules_install + + hdrdest=${DESTDIR}/usr/src/kernel-headers-${_kernver} + + vinstall .config 644 boot config-${_kernver} + vinstall System.map 644 boot System.map-${_kernver} + + case "$XBPS_TARGET_MACHINE" in + armv6*) vinstall arch/arm64/boot/zImage 644 boot kernel.img ;; + armv6*) vinstall arch/arm64/boot/zImage 644 boot kernel7.img ;; + aarch64*) vinstall arch/arm64/boot/Image.gz 644 boot kernel8.img ;; + esac + + # Install device tree blobs + make ${makejobs} ARCH=arm64 INSTALL_DTBS_PATH="${DESTDIR}/boot" dtbs_install + + # move dtbs that ended up in /boot/broadcom + if [ -d "${DESTDIR}/boot/broadcom" ]; then + mv "${DESTDIR}"/boot/broadcom/*dtb "${DESTDIR}/boot" + fi + + # Switch to /usr. + vmkdir usr + + cd ${DESTDIR}/usr/lib/modules/${_kernver} + rm -f source build + ln -sf ../../../src/kernel-headers-${_kernver} build + + cd ${wrksrc} + # Install required headers to build external modules + install -Dm644 Makefile ${hdrdest}/Makefile + install -Dm644 Kbuild ${hdrdest}/Kbuild + install -Dm644 kernel/Makefile ${hdrdest}/kernel/Makefile + install -Dm644 .config ${hdrdest}/.config + for file in $(find . -name Kconfig\*); do + mkdir -p ${hdrdest}/$(dirname $file) + install -Dm644 $file ${hdrdest}/${file} + done + for file in $(find arch/arm64 scripts -name module.lds -o -name Kbuild.platforms -o -name Platform); do + mkdir -p ${hdrdest}/$(dirname $file) + install -Dm644 $file ${hdrdest}/${file} + done + mkdir -p ${hdrdest}/include + # Remove firmware stuff provided by the "linux-firmware" pkg. + rm -rf ${DESTDIR}/usr/lib/firmware + + for i in acpi asm-generic clocksource config crypto drm generated linux vdso \ + math-emu media net pcmcia scsi sound trace uapi video xen dt-bindings; do + if [ -d include/$i ]; then + cp -a include/$i ${hdrdest}/include + fi + done + + cd ${wrksrc} + mkdir -p ${hdrdest}/arch/arm64 + cp -a arch/arm64/include ${hdrdest}/arch/arm64 + + # needed for mv-debug + cp scripts/sign-file "${XBPS_WRAPPERDIR}" + + # Remove helper binaries built for host, + # if generated files from the scripts/ directory need to be included, + # they need to be copied to ${hdrdest} before this step + if [ "$CROSS_BUILD" ]; then + make ${makejobs} ARCH=arm64 ${_cross} _mrproper_scripts + # remove host specific objects as well + find scripts -name '*.o' -delete + fi + + # Copy files necessary for later builds, like nvidia and vmware + cp Module.symvers ${hdrdest} + cp -a scripts ${hdrdest} + mkdir -p ${hdrdest}/security/selinux + cp -a security/selinux/include ${hdrdest}/security/selinux + mkdir -p ${hdrdest}/tools/include + cp -a tools/include/tools ${hdrdest}/tools/include + if [ -d "arch/arm64/tools" ]; then + cp -a "arch/arm64/tools" "${hdrdest}/arch/arm64" + fi + cp -a kernel/time/timeconst.bc "${hdrdest}/kernel/time" + cp -a kernel/bounds.c "${hdrdest}/kernel" + mkdir -p "${hdrdest}/arch/x86/entry/syscalls" + cp -a arch/x86/entry/syscalls/syscall_32.tbl "${hdrdest}/arch/x86/entry/syscalls" + + mkdir -p ${hdrdest}/arch/arm64/kernel + cp arch/arm64/Makefile ${hdrdest}/arch/arm64 + mkdir -p ${hdrdest}/arch/arm64/kernel + cp arch/arm64/kernel/asm-offsets.s ${hdrdest}/arch/arm64/kernel + cp -a arch/arm64/kernel/vdso ${hdrdest}/arch/arm64/kernel/ + + # add headers for lirc package + # pci + for i in bt8xx cx88 saa7134; do + mkdir -p ${hdrdest}/drivers/media/pci/${i} + cp -a drivers/media/pci/${i}/*.h ${hdrdest}/drivers/media/pci/${i} + done + # usb + for i in em28xx pwc; do + mkdir -p ${hdrdest}/drivers/media/usb/${i} + cp -a drivers/media/usb/${i}/*.h ${hdrdest}/drivers/media/usb/${i} + done + # i2c + mkdir -p ${hdrdest}/drivers/media/i2c + cp drivers/media/i2c/*.h ${hdrdest}/drivers/media/i2c + for i in cx25840; do + mkdir -p ${hdrdest}/drivers/media/i2c/${i} + cp -a drivers/media/i2c/${i}/*.h ${hdrdest}/drivers/media/i2c/${i} + done + + # Add md headers + mkdir -p ${hdrdest}/drivers/md + cp drivers/md/*.h ${hdrdest}/drivers/md + + # Add inotify.h + mkdir -p ${hdrdest}/include/linux + cp include/linux/inotify.h ${hdrdest}/include/linux + + # Add wireless headers + mkdir -p ${hdrdest}/net/mac80211/ + cp net/mac80211/*.h ${hdrdest}/net/mac80211 + + # add dvb headers for http://mcentral.de/hg/~mrec/em28xx-new + mkdir -p ${hdrdest}/drivers/media/dvb-frontends + cp drivers/media/dvb-frontends/lgdt330x.h \ + ${hdrdest}/drivers/media/dvb-frontends/ + cp drivers/media/i2c/msp3400-driver.h ${hdrdest}/drivers/media/i2c/ + + # add dvb headers + mkdir -p ${hdrdest}/drivers/media/usb/dvb-usb + cp drivers/media/usb/dvb-usb/*.h ${hdrdest}/drivers/media/usb/dvb-usb/ + mkdir -p ${hdrdest}/drivers/media/dvb-frontends + cp drivers/media/dvb-frontends/*.h ${hdrdest}/drivers/media/dvb-frontends/ + mkdir -p ${hdrdest}/drivers/media/tuners + cp drivers/media/tuners/*.h ${hdrdest}/drivers/media/tuners/ + + # Add xfs and shmem for aufs building + mkdir -p ${hdrdest}/fs/xfs/libxfs + mkdir -p ${hdrdest}/mm + cp fs/xfs/libxfs/xfs_sb.h ${hdrdest}/fs/xfs/libxfs/xfs_sb.h + + # Extract debugging symbols and compress modules + msg_normal "$pkgver: extracting debug info and compressing modules, please wait...\n" + install -Dm644 vmlinux ${DESTDIR}/usr/lib/debug/boot/vmlinux-${_kernver} + ( + cd ${DESTDIR} + export DESTDIR + export SIGN_FILE="${XBPS_WRAPPERDIR}/sign-file sha512 ${wrksrc}/certs/signing_key.pem ${wrksrc}/certs/signing_key.x509" + find ./ -name '*.ko' -print0 | \ + xargs -0r -n1 -P ${XBPS_MAKEJOBS} ${FILESDIR}/mv-debug + ) + # ... and run depmod again. + depmod -b ${DESTDIR}/usr -F System.map ${_kernver} + rm -f ${DESTDIR}/lib +} + +rpi5-kernel-headers_package() { + nostrip=yes + noverifyrdeps=yes + noshlibprovides=yes + short_desc+=" - source headers for 3rd party modules" + provides="rpi-kernel-headers-${version}_${revision}" + replaces="rpi-kernel-headers>=0" + pkg_install() { + vmove usr/src + vmove "usr/lib/modules/${_kernver}/build" + } +} + +rpi5-kernel-dbg_package() { + preserve=yes + nostrip=yes + noverifyrdeps=yes + noshlibprovides=yes + repository=debug + short_desc+=" - debugging symbols" + provides="rpi-kernel-dbg-${version}_${revision}" + replaces="rpi-kernel-dbg>=0" + pkg_install() { + vmove usr/lib/debug + vmove "boot/System.map-${_kernver}" + } +} diff --git a/srcpkgs/rpi5-kernel/update b/srcpkgs/rpi5-kernel/update new file mode 120000 index 00000000000..569e7021672 --- /dev/null +++ b/srcpkgs/rpi5-kernel/update @@ -0,0 +1 @@ +../rpi-kernel/update \ No newline at end of file