# ============================================================================= # KERNEL SPEC - Ro-ASD Linux Kernel (EXPERIMENTAL) # Vanilla Linux 7.0 + Fedora-derived config + experimental patches # ============================================================================= %global debug_package %{nil} %global __strip /bin/true %global _build_id_links none %global _default_patch_fuzz 2 %global _disable_source_fetch 0 %global __brp_mangle_shebangs %{nil} # Optional patch gates # Kernel-side xpadneo integration is not recommended by default. Prefer DKMS/RPM. %{!?with_xpadneo_kernel:%global with_xpadneo_kernel 0} %{!?with_linux_surface:%global with_linux_surface 0} %{!?with_xe_nonx86:%global with_xe_nonx86 0} # === Basic Information === Name: ro-kernel-experimental %global branch experimental %global buildid .ro_%{branch} Version: 7.0 Release: 105%{?dist} Summary: Ro-ASD Experimental Kernel - Gaming and Low-Latency Optimized License: GPLv2 URL: https://github.com/Project-Ro-ASD/ro-kernel Vendor: Ro-ASD Kernel Team ExclusiveArch: x86_64 # === Macro Definitions === %define kverrel %{version}-%{release}%{?buildid}.%{_arch} %define kverstr %{version}-%{release}%{?buildid} # Compression settings %global compression xz %global compression_flags --compress %global compext xz # === Sources === Source0: https://cdn.kernel.org/pub/linux/kernel/v7.x/linux-%{version}.tar.xz Source1: config # === Patches === Patch0: 0001-bore-roasd-7.0.patch Patch1: 0001-Allow-to-set-custom-USB-pollrate-for-specific-device-roasd-7.0.patch Patch2: valve-gamescope-framerate-control-fixups-roasd-7.0.patch Patch3: capture-device-nv12-fixup.patch Patch4: 0857-hwmon-nct6775-Add-ROG-STRIX-X870-I-GAMING-WIFI.patch Patch5: xpadneo-kernel-integration-roasd-7.0.patch Patch6: xpadneo-kernel-integration-roasd-fix-7.0.patch Patch7: MA350.patch Patch8: xe-nonx86-roasd-7.0.patch Patch9: linux-surface-roasd-7.0.patch # === Build Dependencies === BuildRequires: bash bc binutils bison flex gcc gcc-c++ make perl-interpreter BuildRequires: rsync openssl openssl-devel elfutils-libelf-devel dwarves BuildRequires: python3 python3-devel python3-pyyaml BuildRequires: kernel-rpm-macros BuildRequires: kmod bash coreutils tar git-core which BuildRequires: bzip2 xz findutils m4 perl-Carp perl-devel perl-generators diffutils gawk BuildRequires: asciidoc xmlto python3-docutils BuildRequires: libcap-devel libcap-ng-devel ncurses-devel BuildRequires: libtraceevent-devel libtracefs-devel libbpf-devel >= 0.6.0 # === Meta package === Requires: %{name}-core = %{version}-%{release} Requires: %{name}-modules = %{version}-%{release} %description Ro-ASD Experimental Linux Kernel. This package is a small metapackage that installs the matching core and modules packages. The kernel is based on vanilla Linux 7.0, uses a Fedora-derived x86_64 config as the compatibility baseline, and applies selected experimental patches. Experimental policy: - The prepared Source1 config is the single source of truth for kernel options. - This spec applies selected experimental patches and then runs olddefconfig only. - xpadneo should normally be shipped as a separate DKMS/RPM package, not merged into the kernel tree. Kernel-side xpadneo patches are gated off by default. # === CORE PACKAGE === %package core Summary: Experimental kernel core package Provides: installonlypkg(kernel) Provides: kernel-experimental = %{version}-%{release} Provides: kernel-experimental-core = %{version}-%{release} Provides: kernel-experimental-uname-r = %{kverrel} Provides: kernel-experimental-core-uname-r = %{kverrel} Provides: kernel-ro-experimental = %{version}-%{release} Requires: bash coreutils linux-firmware Requires: /usr/bin/kernel-install Requires: %{name}-modules = %{version}-%{release} %description core The Ro-ASD Experimental kernel core package containing the vmlinuz binary, System.map and boot config. # === MODULES PACKAGE === %package modules Summary: Kernel modules for the Ro-ASD experimental kernel Provides: installonlypkg(kernel-module) Provides: kernel-experimental-modules = %{version}-%{release} Provides: kernel-experimental-modules-uname-r = %{kverrel} Provides: kernel-ro-experimental-modules = %{version}-%{release} Requires: kmod %description modules Loadable kernel modules for the Ro-ASD experimental kernel. # === DEVEL PACKAGE === %package devel Summary: Development headers for building external modules Provides: kernel-experimental-devel = %{version}-%{release} Provides: kernel-experimental-devel-uname-r = %{kverrel} Provides: kernel-ro-experimental-devel = %{version}-%{release} AutoReqProv: no Requires: findutils perl-interpreter openssl-devel Requires: elfutils-libelf-devel bison flex make gcc Requires: %{name}-core = %{version}-%{release} Enhances: akmods dkms %description devel Development headers and makefiles required for building external kernel modules, including akmods/DKMS modules such as NVIDIA and xpadneo. # === PREP === %prep %setup -q -n linux-%{version} cp %{SOURCE1} .config %if 0%{?nopatches} == 0 patch -p1 -i %{PATCH0} # BORE patch -p1 -i %{PATCH1} # USB pollrate patch -p1 -i %{PATCH2} # gamescope patch -p1 -i %{PATCH3} # NV12 patch -p1 -i %{PATCH4} # ROG hwmon %if 0%{?with_xpadneo_kernel} patch -p1 -i %{PATCH5} # xpadneo kernel integration patch -p1 -i %{PATCH6} # xpadneo fix %endif patch -p1 -i %{PATCH7} # MA350 %if 0%{?with_xe_nonx86} patch -p1 -i %{PATCH8} # xe non-x86 %endif %if 0%{?with_linux_surface} patch -p1 -i %{PATCH9} # linux-surface %endif %endif # Use the pre-generated Source1 config as the single source of truth. # Do not modify kernel config in the spec; only resolve symbols introduced by patches. make %{?_smp_mflags} olddefconfig cp .config config-linux-%{branch} # === BUILD === %build make %{?_smp_mflags} KERNELRELEASE=%{kverrel} bzImage modules KCFLAGS="-g0" make %{?_smp_mflags} KERNELRELEASE=%{kverrel} scripts # Build module signing helpers for akmods/kmods if [ -f scripts/sign-file.c ]; then gcc %{optflags} -Iscripts -o scripts/sign-file scripts/sign-file.c -lcrypto fi if [ -f certs/extract-cert.c ]; then gcc %{optflags} -Iscripts -o scripts/extract-cert certs/extract-cert.c -lcrypto elif [ -f scripts/extract-cert.c ]; then gcc %{optflags} -Iscripts -o scripts/extract-cert scripts/extract-cert.c -lcrypto fi chmod 0755 scripts/sign-file scripts/extract-cert 2>/dev/null || : # === INSTALL === %install mkdir -p %{buildroot}/boot mkdir -p %{buildroot}/lib/modules/%{kverrel} mkdir -p %{buildroot}/usr/src/kernels/%{kverrel} ImageName=$(make KERNELRELEASE=%{kverrel} image_name | tail -n 1) cp -v $ImageName %{buildroot}/boot/vmlinuz-%{kverrel} chmod 755 %{buildroot}/boot/vmlinuz-%{kverrel} cp -v $ImageName %{buildroot}/lib/modules/%{kverrel}/vmlinuz chmod 755 %{buildroot}/lib/modules/%{kverrel}/vmlinuz make %{?_smp_mflags} INSTALL_MOD_PATH=%{buildroot} KERNELRELEASE=%{kverrel} modules_install cp -v .config %{buildroot}/boot/config-%{kverrel} cp -v System.map %{buildroot}/boot/System.map-%{kverrel} cp -v .config %{buildroot}/lib/modules/%{kverrel}/config cp -v System.map %{buildroot}/lib/modules/%{kverrel}/System.map chmod 0644 %{buildroot}/boot/config-%{kverrel} %{buildroot}/boot/System.map-%{kverrel} chmod 0644 %{buildroot}/lib/modules/%{kverrel}/config %{buildroot}/lib/modules/%{kverrel}/System.map # Development headers preparation rm -f %{buildroot}/lib/modules/%{kverrel}/build rm -f %{buildroot}/lib/modules/%{kverrel}/source rm -rf %{buildroot}/usr/src/kernels/%{kverrel} mkdir -p %{buildroot}/usr/src/kernels/%{kverrel} mkdir -p %{buildroot}/lib/modules/%{kverrel} cp -v Makefile Kconfig %{buildroot}/usr/src/kernels/%{kverrel}/ cp -v .config %{buildroot}/usr/src/kernels/%{kverrel}/ cp -v System.map %{buildroot}/usr/src/kernels/%{kverrel}/ if [ -e Module.symvers ]; then cp -v Module.symvers %{buildroot}/usr/src/kernels/%{kverrel}/ cp -v Module.symvers %{buildroot}/lib/modules/%{kverrel}/symvers xz -f %{buildroot}/lib/modules/%{kverrel}/symvers || : fi cp -a scripts %{buildroot}/usr/src/kernels/%{kverrel}/ rm -rf %{buildroot}/usr/src/kernels/%{kverrel}/scripts/tracing cp -a include %{buildroot}/usr/src/kernels/%{kverrel}/include cp -a arch %{buildroot}/usr/src/kernels/%{kverrel}/arch # Useful for external modules that inspect generated files [ -d certs ] && cp -a certs %{buildroot}/usr/src/kernels/%{kverrel}/certs || : # Ensure signing helpers exist for akmods/DKMS. test -x scripts/sign-file || { echo "ERROR: scripts/sign-file missing"; exit 1; } test -x scripts/extract-cert || { echo "ERROR: scripts/extract-cert missing"; exit 1; } install -p -m 0755 scripts/sign-file %{buildroot}/usr/src/kernels/%{kverrel}/scripts/sign-file install -p -m 0755 scripts/extract-cert %{buildroot}/usr/src/kernels/%{kverrel}/scripts/extract-cert # This is large but helps compatibility with DKMS/akmods and tools builds. cp -a tools %{buildroot}/usr/src/kernels/%{kverrel}/tools find %{buildroot}/usr/src/kernels/%{kverrel} \ \( -name "*.o" -o -name "*.cmd" -o -name "*.ko" \) -type f -delete ln -sfn /usr/src/kernels/%{kverrel} %{buildroot}/lib/modules/%{kverrel}/build ln -sfn /usr/src/kernels/%{kverrel} %{buildroot}/lib/modules/%{kverrel}/source /sbin/depmod -b %{buildroot} -F %{buildroot}/lib/modules/%{kverrel}/System.map %{kverrel} || : # === POST SCRIPTS === %post core : %posttrans core /usr/bin/kernel-install add %{kverrel} /lib/modules/%{kverrel}/vmlinuz || exit $? if command -v grubby &>/dev/null; then echo "Ro-ASD experimental kernel installed. It was not set as default automatically." echo "Use: sudo grubby --set-default=/boot/vmlinuz-%{kverrel}" fi %preun core /usr/bin/kernel-install remove %{kverrel} /lib/modules/%{kverrel}/vmlinuz || exit $? %post modules /sbin/depmod -a %{kverrel} || : %postun modules if [ -d /lib/modules/%{kverrel} ]; then /sbin/depmod -a %{kverrel} || : fi %post devel if [ "$HARDLINK" != "no" ] && [ -x /usr/bin/hardlink ]; then (cd /usr/src/kernels/%{kverrel} && /usr/bin/find . -type f | while read f; do hardlink -c /usr/src/kernels/*/$f $f 2>/dev/null || : ; done) || : fi # === FILES === %files %files core %license COPYING %attr(0755,root,root) /boot/vmlinuz-%{kverrel} %attr(0644,root,root) /boot/config-%{kverrel} %attr(0644,root,root) /boot/System.map-%{kverrel} %ghost %attr(0600,root,root) /boot/initramfs-%{kverrel}.img %ghost %attr(0644,root,root) /boot/symvers-%{kverrel}.%{compext} %dir /lib/modules/%{kverrel} /lib/modules/%{kverrel}/vmlinuz /lib/modules/%{kverrel}/config /lib/modules/%{kverrel}/System.map %ghost /lib/modules/%{kverrel}/symvers.xz %files modules %dir /lib/modules/%{kverrel} /lib/modules/%{kverrel}/kernel/ /lib/modules/%{kverrel}/modules.* %exclude /lib/modules/%{kverrel}/build %exclude /lib/modules/%{kverrel}/source %files devel %dir /usr/src/kernels /usr/src/kernels/%{kverrel}/ /lib/modules/%{kverrel}/build /lib/modules/%{kverrel}/source %changelog * Tue May 05 2026 Ro-ASD Kernel Team - 7.0-104 - Reworked experimental spec as metapackage plus core/modules/devel split - Use pre-generated Fedora-derived 7.0 experimental config as Source1 - Apply selected experimental patches after config import, then run olddefconfig - Gate xpadneo kernel integration by default; prefer separate DKMS/RPM package - Gate linux-surface and xe-nonx86 patchsets by default - Avoid setting experimental kernel as default automatically - Keep akmods/DKMS-compatible devel tree and module signing helpers * Fri Mar 27 2026 Ro-ASD Kernel Team - 7.0-100 - Initial experimental kernel release - Based on vanilla Linux 7.0 - BORE scheduler and gaming optimizations - Compatible with NVIDIA/AMD akmods