# openmamba kernel specfile # Copyright (C) 2004-2017 by Silvan Calarco # Copyright (C) 2004-2006 by Davide Madrisan # released under the GPL version 3 license # # To build a specific target: # # rpmbuild -ba --define="KERNEL_TARGET " kernel.spec # # To cross-compile: # rpmbuild -ba --target x86_64 --define="KERNEL_TARGET " kernel.spec # # currently available targets (default is mamba): # mamba,rt,custom # # NOTE: to allow multiple kernel major releases (3.x) cohexistence all patches releases # have to be explicitly obsoletes, by adding such lines: # Obsoletes: kernel-%{KERNEL_TARGET}-source = %{kernel_ver}.1 # ... # Obsoletes: kernel-%{KERNEL_TARGET}-source = %{kernel_ver}.10 # Don't parametrize this, it's a check to avoid build a kernel without having # edited the obsoletes needed for multiple kernel support %define KERNEL_OBSOLETES_ARE_FOR_VERSION 4.9.17 #% define kernel_longterm 1 %define kernel_MAJver %(echo %version | cut -d. -f1) %define kernel_majver %(echo %version | cut -d. -f1-2) %define kernel_ver %(echo %version | cut -d. -f1-3) %if "%{?kernel_longterm}" != "1" %define kernel_pl %(echo %version | cut -d. -f3) %endif %define USE_DISTCC 0 %define reiser4_ver 2.6.38 %define xen_patchver 1 %define rt_ver 3.10.6-rt3 %define maj_rt_ver %(echo %rt_ver | cut -d. -f1-2) %if "%{USE_DISTCC}" == "1" %define DISTCC CC="ccache distcc" -j 12 %endif # Build a mamba kernel if no target was specified %if "%{?KERNEL_TARGET}" == "" %ifarch x86_64 %define KERNEL_TARGET baytrail %else %define KERNEL_TARGET mamba %endif %endif # define short kernel target name for Lilo %define KERNEL_TARGET_SHORT %{KERNEL_TARGET} %define target_cpu %{_target_cpu} %define DEPMOD /sbin/depmod %define KIMAGE_DEST vmlinuz %if "%{_target_cpu}" == "i586" %define KIMAGE arch/i386/boot/bzImage %define target_cpu i386 %endif %if "%{_target_cpu}" == "arm" %if "%{KERNEL_TARGET}" == "mamba-arm-dove" %define KIMAGE arch/arm/boot/uImage %define KIMAGE_DEST uImage %else %define KIMAGE arch/arm/boot/zImage %endif %endif %if "%{_target_cpu}" == "x86_64" %if "%{KERNEL_TARGET}" == "mamba-xen" %define KIMAGE arch/x86_64/boot/vmlinuz %else %define KIMAGE arch/x86_64/boot/bzImage %endif %endif %if "%{_target_cpu}" == "ppc" %define KIMAGE vmlinux %define target_cpu powerpc %endif # disable internal dependency generator for scriptlets %define _use_internal_dependency_generator 1 Name: kernel-baytrail Version: 4.9.17 Release: 2mamba Summary: The Linux Kernel, the operating system core itself Group: System/Kernel and Hardware Vendor: openmamba Distribution: openmamba Packager: Silvan Calarco #%if "%{?kernel_longterm}" == "" Source0: https://cdn.kernel.org/pub/linux/kernel/v%{kernel_MAJver}.x/linux-%{kernel_ver}.tar.xz #%if "%{?kernel_pl}" != "" #Source1: http://www.kernel.org/pub/linux/kernel/v3.x/patch-%{version}.xz #%endif #%else #Source0: http://www.kernel.org/pub/linux/kernel/v2.6/longterm/v%{kernel_ver}/linux-%{version}.tar.bz2 #%endif Source7: kernel-rt-i586-config #Source8: %{name}-%{kernel_majver}-mamba-ppc-config Source9: kernel-custom-i586-config Source12: kernel-%{kernel_majver}-baytrail-config Source13: kernel-baytrail-4.9.9-dsdt.dsl Patch0: kernel-2.6.35-430-scsi_header_fix.patch # Ingo Molnar's RT patch Patch1: http://www.kernel.org/pub/linux/kernel/projects/rt/%{maj_rt_ver}/patch-%{rt_ver}.patch.xz Patch3: kernel-2.6.28.10-MSG_PEEK_race_msg.patch Patch4: http://www.kernel.org/pub/linux/kernel/people/edward/reiser4/reiser4-for-2.6/reiser4-for-%{reiser4_ver}.patch.bz2 Patch11: kernel-3.2.1-8139cp.patch Patch18: kernel26-2.6.18-bt8xx.patch Patch22: kernel-2.6.20-freezer.patch Patch23: kernel-2.6.19-hda_snd_intel-null_pointer.patch Patch24: kernel-2.6.35-usbstorage-disable_delay_use.patch Patch25: kernel-2.6.21-VT3351_disable_msi.patch Patch27: kernel-2.6.21-kvm_wbinvd.patch Patch29: kernel-2.6.22-ppc_PM_NEEDS_RTC_LIB.patch Patch30: kernel-2.6.22-ppc_export_vgacon_remap_base.patch Patch31: kernel-2.6.26-snd_hda_intel_zepto.patch Patch32: kernel-2.6.26-fglrx_disable_gpl_check.patch Patch33: kernel-2.6.26-atl1_disable_TSO.patch Patch36: kernel-2.6.30-fglrx_flush_tlb_page.patch Patch37: kernel-2.6.30-wmi_fix.patch #Patch38: http://gentoo-xen-kernel.googlecode.com/files/xen-patches-%{kernel_ver}-%{xen_patchver}.tar.bz2 Patch39: kernel-3.2.1-rtl8139too.patch Patch40: kernel-2.6.33-lzo_decompressor_fix.patch #Patch50: %{name}-2.6.33-arm-copypage-gcc4.patch #Patch51: %{name}-2.6.33-mcp52xx_gpt_fix_build.patch Patch52: kernel-2.6.33.7-make-3.82.patch Patch53: kernel-2.6.33-dns_resolve_include.patch Patch54: kernel-2.6.33-fix_dependence_for_intel_agp_module.patch Patch55: kernel-2.6.35-CTI_USB-485-Mini_USB-Nano-485.patch Patch56: kernel-2.6.33-tpm_calc_ordinal_duration.patch Patch57: kernel-2.6.35.10-drm-radeon-r600-cs-checker-fixes.patch Patch58: kernel-2.6.37.1-radeon_flickering_fix.patch Patch59: kernel-2.6.35-vga_dont_ask.patch Patch61: kernel-3.1-arm_missing_includes.patch Patch62: kernel-2.6.38.6-arm-rtlwifi-eliminate_udelay.patch Patch63: kernel-3.2-elantech.patch Patch64: kernel-3.0.8-suspend_fix_firmware_task_freezing_feature.patch Patch65: kernel-3.0.17-mm_limit_direct_reclaim_for_higher_order_allocations.patch Patch66: kernel-3.0.17_mm_abort_reclaim_compation_if_compation_can_proceed.patch Patch67: kernel-3.2-arm_remove_BUILD_BUG_ON_from_bug_h.patch Patch68: kernel-3.2.9-asix_sitecom_ln_031.patch Patch69: kernel-3.2.16-ipw2200_fix.patch Patch70: kernel-3.2-option_add_Huawey-E352.patch Patch71: kernel-3.7.1-libata_restore_acpi_disable_functionality.patch Patch72: kernel-3.4.24-ACPI_do_not_use_Lid_and_Sleep_button_for_S5_wakeup.patch Patch73: kernel-3.8.3-arm-exynosdrm-buildfix.patch Patch74: kernel-3.8.3-arm-imx-drm-buildfix.patch Patch75: kernel-3.10.2-arm-mtd_omap2_allow_building_as_a_module.patch Patch76: kernel-4.6.5-revert-rtlifi-usleep.patch Patch77: kernel-baytrail-4.8.17-flexx10-full.patch Patch78: 0001-drivers-staging-rtl8723bs.patch Patch79: 0008-volume-buttons.patch Patch80: 0009-poweroff.patch Patch81: 0001-PM-QoS-Add-pm_qos_cancel_request_lazy-that-doesn-t-s.patch Patch82: 0002-mmc-sdhci-get-runtime-pm-when-sdio-irq-is-enabled.patch Patch83: 0003-mmc-sdhci-Support-maximum-DMA-latency-request-via-PM.patch Patch84: 0004-mmc-sdhci-acpi-Fix-device-hang-on-Intel-BayTrail.patch Patch85: 0005-mmc-sdhci-pci-Fix-device-hang-on-Intel-BayTrail.patch Patch86: kernel-baytrail-4.8.17-i2c-designware-chuwi-hi10.patch Patch87: kernel-baytrail-4.8.17-chuwi-shdci-fixes.patch Patch88: kernel-baytrail-4.9.9-es8316.patch Patch89: kernel-baytrail-4.9.9-dsdt.patch Patch90: kernel-baytrail-4.9.9-pwm-lpss.patch # https://dev.openwrt.org/browser/trunk/target/linux/generic/patches-3.12/100-overlayfs.patch?order=name Patch100: kernel-3.14.2-overlayfs.patch ## overlayfs: get the 12 patches above Linux 3.6 tag from: ## http://git.kernel.org/?p=linux/kernel/git/mszeredi/vfs.git;a=shortlog;h=refs/heads/overlayfs.v14 #Patch100: 0001-vfs-add-i_op-dentry_open.patch #Patch101: 0002-vfs-export-do_splice_direct-to-modules.patch #Patch102: 0003-vfs-export-__inode_permission-to-modules.patch #Patch103: 0004-vfs-introduce-clone_private_mount.patch #Patch104: 0005-overlay-filesystem.patch #Patch105: 0006-overlayfs-add-statfs-support.patch #Patch106: 0007-overlayfs-implement-show_options.patch #Patch107: 0008-overlay-overlay-filesystem-documentation.patch #Patch108: 0009-fs-limit-filesystem-stacking-depth.patch URL: http://www.kernel.org License: GPL ## AUTOBUILDREQ-BEGIN ## AUTOBUILDREQ-END #BuildRequires: /bin/bash /bin/sh #BuildRequires: module-init-tools >= 3.1 %if "%{USE_DISTCC}" == "1" BuildRequires: distcc ccache %endif ## KERNELOBSOLETES-BEGIN 3.18 Obsoletes: %{name} = %{kernel_majver}.6 Obsoletes: %{name} = %{kernel_majver}.7 ## KERNELOBSOLETES-END BuildRoot: %{_tmppath}/%{name}-%{version}-build %define buildroot %{_tmppath}/%{name}-%{KERNEL_TARGET}-build %description The Linux Kernel, the operating system core itself. The kernel package contains the Linux kernel (%{KIMAGE_DEST}), the operating system core itself. The kernel handles the basic functions of the operating system: memory allocation, process allocation, device input and output, etc. This is the source package used to build kernel for different architectures and targets. #%if "%{?KERNEL_TARGET}" != "" #%package #Group: System/Kernel and Hardware #Summary: The Linux kernel, the operating system core itself #%endif Requires(post):dracut Requires(post):module-init-tools >= 3.1 %if "%{_target_cpu}" != "arm" Requires(pre): bootloader %endif # Wireless #Requires: kernelwireless-%{KERNEL_TARGET}-%{kernel_ver} Provides: kernelwireless = %{version} Provides: kernelwireless-%{KERNEL_TARGET}-%{kernel_ver} Provides: kernel-%{KERNEL_TARGET}-wireless = %{version}-%{release} Requires: iwlwifi-firmware Requires: crda # Sound #Requires: kernelsound-%{KERNEL_TARGET}-%{kernel_ver} Provides: kernelsound = %{version} Provides: kernelsound-%{KERNEL_TARGET}-%{kernel_ver} Provides: kernel-%{KERNEL_TARGET}-sound = %{version}-%{release} Requires: linux-firmware Provides: kernel = %{version} ## KERNELOBSOLETES-BEGIN 3.18 #Obsoletes: kernel-%{KERNEL_TARGET} = %{kernel_majver}.1 ## KERNELOBSOLETES-END %description The Linux Kernel, the operating system core itself. The kernel package contains the Linux kernel (%{KIMAGE_DEST}), the operating system core itself. The kernel handles the basic functions of the operating system: memory allocation, process allocation, device input and output, etc. This kernel was build for %{_target_cpu} architecture and the following target: %{?KERNEL_TARGET}. %package source Group: Development/Kernel Summary: The source code for the Linux kernel Requires: kernel-%{KERNEL_TARGET}-headers == %{version}-%{release} Provides: kernelsource = %{version} Obsoletes: kernel-alsa-devel ## KERNELOBSOLETES-BEGIN 3.18 Obsoletes: kernel-%{KERNEL_TARGET}-source = %{kernel_majver}.6 Obsoletes: kernel-%{KERNEL_TARGET}-source = %{kernel_majver}.7 Obsoletes: kernel-%{KERNEL_TARGET}-source = %{kernel_majver}.9 ## KERNELOBSOLETES-END %description source The kernel-source package contains the source code files for the Linux kernel. The source files can be used to build a custom kernel that is better tuned to your particular hardware, if you are so inclined (and you know what you're doing). This kernel sources are configured for %{TARGET_CPU} architecture and the following target: %{?KERNEL_TARGET}. %package headers Group: Development/Kernel Summary: Headers, scripts, configuration and Makefile for the linux kernel Requires: kernel-%{KERNEL_TARGET} == %{version}-%{release} Provides: kernelheaders = %{version} ## KERNELOBSOLETES-BEGIN 3.18 Obsoletes: kernel-%{KERNEL_TARGET}-headers = %{kernel_majver}.6 Obsoletes: kernel-%{KERNEL_TARGET}-headers = %{kernel_majver}.7 Obsoletes: kernel-%{KERNEL_TARGET}-headers = %{kernel_majver}.9 ## KERNELOBSOLETES-END %description headers The kernel-headers package contains the headers, scripts, configuration and Makefile to develop with the linux kernel The kernel-headers can be used to build modules for the kernel. This kernel headers are configured for %{TARGET_CPU} architecture and the following target: %{?KERNEL_TARGET}. %package headers-sanitised Group: Development/Kernel Summary: Sanitised kernel headers used for glibc build Provides: kernelsanitisedheaders = %{version} ## KERNELOBSOLETES-BEGIN 3.18 Obsoletes: kernel-%{KERNEL_TARGET}-headers-sanitised = %{kernel_majver}.6 Obsoletes: kernel-%{KERNEL_TARGET}-headers-sanitised = %{kernel_majver}.7 Obsoletes: kernel-%{KERNEL_TARGET}-headers-sanitised = %{kernel_majver}.9 ## KERNELOBSOLETES-END %description headers-sanitised Sanitised kernel headers used for glibc build. This kernel sanitised headers are configured for %{TARGET_CPU} architecture and the following target: %{?KERNEL_TARGET}. %package sound Group: System/Kernel and Hardware Summary: The kernel sound subsystem Provides: kernelsound = %{version} Provides: kernelsound-%{KERNEL_TARGET}-%{kernel_ver} Requires: kernel-%{KERNEL_TARGET} == %{version}-%{release} ## KERNELOBSOLETES-BEGIN 3.18 Obsoletes: kernel-%{KERNEL_TARGET}-sound = %{kernel_majver}.6 Obsoletes: kernel-%{KERNEL_TARGET}-sound = %{kernel_majver}.7 Obsoletes: kernel-%{KERNEL_TARGET}-sound = %{kernel_majver}.9 ## KERNELOBSOLETES-END %description sound The kernel-sound package contains the native kernel sound subsystem with ALSA drivers. This is packaged apart because more up-to-date drivers are provided by kernel-%{KERNEL_TARGET}-extramodules-source package which uses more up-to-date drivers from the ALSA project. %package wireless Group: System/Kernel and Hardware Summary: The kernel wireless subsystem Provides: kernelwireless = %{version} Provides: kernelwireless-%{KERNEL_TARGET}-%{kernel_ver} Requires: kernel-%{KERNEL_TARGET} == %{version}-%{release} Requires: iwlwifi-firmware ## KERNELOBSOLETES-BEGIN 3.18 Obsoletes: kernel-%{KERNEL_TARGET}-wireless = %{kernel_majver}.6 Obsoletes: kernel-%{KERNEL_TARGET}-wireless = %{kernel_majver}.7 Obsoletes: kernel-%{KERNEL_TARGET}-wireless = %{kernel_majver}.9 ## KERNELOBSOLETES-END Requires: crda %description wireless The kernel-wireless package contains the native kernel wireless subsystem with drivers. This is packaged apart because more up-to-date drivers are provides by kernel-%{KERNEL_TARGET}-extramodules package which uses drivers from the wireless-compat project. %package firmware Group: System/Kernel and Hardware Summary: Firmware files used by the Linux Kernel Provides: kernelfirmware = %{version} Requires: kernel-%{KERNEL_TARGET} == %{version}-%{release} ## KERNELOBSOLETES-BEGIN 3.18 Obsoletes: kernel-%{KERNEL_TARGET}-firmware = %{kernel_majver}.6 Obsoletes: kernel-%{KERNEL_TARGET}-firmware = %{kernel_majver}.7 Obsoletes: kernel-%{KERNEL_TARGET}-firmware = %{kernel_majver}.9 ## KERNELOBSOLETES-END Provides: linux_firmware %description firmware Firmware files used by the Linux Kernel. %prep [ "%{buildroot}" != / ] && rm -rf "%{buildroot}" %if "%{version}" != "%{KERNEL_OBSOLETES_ARE_FOR_VERSION}" echo "ERROR: please edit obsoletes for multiple kernel support before proceeding." exit 1 %endif ld -v | grep "gold" && { echo "Error: ld GOLD detected, which is incompatible with this package. Aborting." exit 1 } %if "%{?KERNEL_TARGET}" == "" echo "No target specified, aborting." exit 1 %else echo "I'm going to build a %{KERNEL_TARGET} kernel..." %endif %setup -q -c -n %{name}-%{kernel_ver}mamba-x86_64 #-D -T #:<< ___EOF %if "%{?kernel_longterm}" == "" mv linux-%{kernel_ver}/* . rm -r linux-%{kernel_ver} %else mv linux-%{version}/* . rm -r linux-%{version} %endif # add here subrelease patch #%if "%{?kernel_longterm}" != "1" #%if "%{?kernel_pl}" != "" #echo "%{?kernel_pl}" #xzcat -c %{SOURCE1} >/dev/null || exit 1 #xzcat -c %{SOURCE1} | patch -p1 #%endif #%endif #sed -i "s/\(SUBLEVEL =\).*/\1/" Makefile # # patch and configure STANDARD kernel # make mrproper # create build dirs for each kernel # and copy proper configuration %if %{_target_cpu} == i586 case %{?KERNEL_TARGET} in mamba) kernel_cfg=%{SOURCE11} ;; mamba-64GB) kernel_cfg=%{SOURCE13} ;; custom) kernel_cfg=%{SOURCE9} ;; mamba-rt) kernel_cfg=%{SOURCE17} # add RT patches xz -cd %{PATCH1} | patch -p1 rm -f localversion-rt ;; mamba-64GB-rt) kernel_cfg=%{SOURCE16} # add RT patches xz -cd %{PATCH1} | patch -p1 rm -f localversion-rt ;; esac %endif %if %{_target_cpu} == x86_64 case %{?KERNEL_TARGET} in baytrail) kernel_cfg=%{SOURCE12} ;; mamba-x86_64-rt) kernel_cfg=%{SOURCE19} # add RT patches xz -cd %{PATCH1} | patch -p1 rm -f localversion-rt ;; mamba-xen) kernel_cfg=%{SOURCE14} # mkdir patches # cd patches # tar xjf %{PATCH38} # cd .. # for f in patches/*.patch1; do # echo "Applying patch $f" # patch -p1 < $f # done # rm -rf patches ;; esac %endif %if %{_target_cpu} == arm case %{?KERNEL_TARGET} in mamba-arm) kernel_cfg=%{SOURCE15} ;; mamba-arm-kirkwood) kernel_cfg=%{SOURCE18} ;; mamba-arm-dove) kernel_cfg=%{SOURCE20} ;; esac ## apply arm copypage gcc4 patch # patch -p1 < %{PATCH50} %endif %if %{_target_cpu} == ppc case %{?KERNEL_TARGET} in mamba-ppc) kernel_cfg=%{SOURCE8} # patch -p1 < %{PATCH29} # patch -p1 < %{PATCH30} ;; *) echo "Kernel Target %{?KERNEL_TARGET} not supported on ppc; aborting." exit 1 ;; esac %endif cp $kernel_cfg ./.config # 8139cp patch #%patch11 -p1 # usbstorage disable delay_use patch (disabled since kernel 2.6.35 because patched from 5 to 1 sec instead of 5 to 0) %patch24 -p1 # FIXME: this patch disable GPL check on __rcu_read_lock and __rcu_read_unlock # for use with proprietary ATI fglrx drivers #%patch32 -p1 # reiser4 support patch #%patch4 -p1 # export flushtlb_page symbol (for fglrx driver) %patch36 -p0 ## fixes a kernel panic with wmi when stack protector is enabled #%patch37 -p1 # rtl_8139too patch %patch39 -p1 # fix mpc52xx_gpt.c build (powerpc) #% patch51 -p1 %patch53 -p1 %patch59 -p1 ## Elantech touchpad patch generated from http://people.debian.org/~julien/lp681904/psmouse-elantech-lp681904-1.tar.bz2 #%patch63 -p1 #%patch73 -p1 #%patch74 -p1 #%patch75 -p1 #%patch76 -p1 # Baytrail patches #patch -p1 -N < %{PATCH77} || true #patch -p1 -N < %{PATCH78} || true #%patch79 -p1 #%patch80 -p1 %patch86 -p1 %patch87 -p1 %patch88 -p1 %patch89 -p1 %patch90 -p1 # overlayfs patches #%patch100 -p1 #% patch101 -p1 #% patch102 -p1 #% patch103 -p1 #% patch104 -p1 #% patch105 -p1 #% patch106 -p1 #% patch107 -p1 #% patch108 -p1 %build #:<< ___EOF # # build kernel for given target # sed -i 's@/usr/bin/env@/bin/env@' ./arch/ia64/scripts/unwcheck.py ARCH=%{target_cpu} make oldconfig cp Makefile Makefile.orig sed -i "s/\(EXTRAVERSION =\).*/\1 -%{KERNEL_TARGET}/" Makefile PATH=%{_bindir}:$PATH \ ARCH=%{target_cpu} \ make CROSS_COMPILE=%{_target_platform}- \ %{?_smp_mflags} \ %{?DISTCC} \ all %{?KIMAGE_TARGET} if [ "%{?KERNEL_TARGET}" = "mamba-arm-dove" ]; then # See www.solid-run.com/mw/index.php?title=Device_Tree ARCH=%{target_cpu} make CROSS_COMPILE=%{_target_platform}- %{?_smp_mflags} %{?DISTCC} uImage cp arch/arm/boot/zImage arch/arm/boot/zImage.orig ARCH=%{target_cpu} make CROSS_COMPILE=%{_target_platform}- %{?_smp_mflags} %{?DISTCC} dove-cubox.dtb cat arch/arm/boot/zImage.orig arch/arm/boot/dts/dove-cubox.dtb > arch/arm/boot/zImage ARCH=%{target_cpu} make CROSS_COMPILE=%{_target_platform}- %{?_smp_mflags} %{?DISTCC} uImage fi #%if %{_target_cpu} == arm #ARCH=%{target_cpu} make CROSS_COMPILE=%{_target_platform}- %{?_smp_mflags} %{?DISTCC} uImage #%endif %install [ "%{buildroot}" != / ] && rm -rf "%{buildroot}" # create system dirs in install environment install -d %{buildroot}{/usr/src/,/boot,%{_initrddir},/lib/modules} ARCH=%{target_cpu} make \ modules_install INSTALL_MOD_PATH=%{buildroot} DEPMOD=%{DEPMOD} install -m0644 modules.builtin %{buildroot}/lib/modules/%{kernel_ver}-%{?KERNEL_TARGET}/ install -m0644 modules.order %{buildroot}/lib/modules/%{kernel_ver}-%{?KERNEL_TARGET}/ (cd %{buildroot}/lib/modules/%{kernel_ver}-%{?KERNEL_TARGET} rm -f build && ln -sf /usr/src/linux-%{kernel_ver}-%{?KERNEL_TARGET} build ) # copy modules to major directory location (e.g. 2.6.11) and create # a symlink for the current 4 numbers release (e.g. 2.6.11.11) pointing to # that dir #if [ "%{kernel_pl}" ]; then # mv %{buildroot}/lib/modules/%{version}%{?KERNEL_TARGET} %{buildroot}/lib/modules/%{kernel_ver}%{?KERNEL_TARGET} # ln -s %{kernel_ver}%{?KERNEL_TARGET} %{buildroot}/lib/modules/%{version}%{?KERNEL_TARGET} #fi cp %{KIMAGE} %{buildroot}/boot/%{KIMAGE_DEST}-%{kernel_ver}-%{?KERNEL_TARGET} #%if %{_target_cpu} == arm #cp arch/arm/boot/uImage %{buildroot}/boot/uImage-%{kernel_ver}%{?KERNEL_TARGET} #%endif cp System.map %{buildroot}/boot/System.map-%{kernel_ver}-%{?KERNEL_TARGET} # recreate kernel sources [ -e kernel-headers.files ] && rm -f kernel-headers.files [ -e kernel-source.files ] && rm -f kernel-source.files cp -R %{_builddir}/%{name}-%{?kernel_ver}mamba-x86_64 %{buildroot}/usr/src/linux-%{kernel_ver}-%{?KERNEL_TARGET} cd %{buildroot}/usr/src/linux-%{kernel_ver}-%{?KERNEL_TARGET} ARCH=%{target_cpu} make mrproper %if %{_target_cpu} == i586 case %{?KERNEL_TARGET} in mamba) kernel_cfg=%{SOURCE11} ;; mamba-64GB) kernel_cfg=%{SOURCE13} ;; mamba-64GB-rt) kernel_cfg=%{SOURCE16} ;; mamba-rt) kernel_cfg=%{SOURCE17} ;; custom) kernel_cfg=%{SOURCE9} ;; rt) kernel_cfg=%{SOURCE7} ;; esac %endif %if %{_target_cpu} == x86_64 case %{?KERNEL_TARGET} in baytrail) kernel_cfg=%{SOURCE12} ;; mamba-x86_64-rt) kernel_cfg=%{SOURCE19} ;; mamba-xen) kernel_cfg=%{SOURCE14} ;; esac %endif %if %{_target_cpu} == arm case %{?KERNEL_TARGET} in mamba-arm) kernel_cfg=%{SOURCE15} ;; mamba-arm-kirkwood) kernel_cfg=%{SOURCE18} ;; mamba-arm-dove) kernel_cfg=%{SOURCE20} ;; esac %endif %if %{_target_cpu} == ppc case %{?KERNEL_TARGET} in mamba-ppc) kernel_cfg=%{SOURCE8} ;; esac %endif cp $kernel_cfg %{buildroot}/usr/src/linux-%{kernel_ver}-%{?KERNEL_TARGET}/.config cp %{_builddir}/%{name}-%{kernel_ver}mamba-x86_64/Module.symvers %{buildroot}/usr/src/linux-%{kernel_ver}-%{?KERNEL_TARGET} #cp Makefile Makefile.orig #sed -i "s/\(EXTRAVERSION =.*\)/\1%{?KERNEL_TARGET}/" Makefile #%if "%{_target_platform}" == "%{_build}" %ifnarch arm # FIXME: problems cross-compiling and running x86_64 tools on x86; building as x86 code for now ARCH=%{target_cpu} make \ HOSTCC=%{_build}-gcc \ CROSS_COMPILE=%{_target_platform}- \ prepare scripts oldconfig %else ARCH=%{target_cpu} make \ CROSS_COMPILE=%{_target_platform}- \ prepare scripts oldconfig %endif # HOSTCC=%{_target_platform}-gcc \ cp -a include/generated/* include/linux/ #%endif rm .config.old # clean modules files created by depmod rm -f %{buildroot}/lib/modules/%{kernel_ver}-%{?KERNEL_TARGET}/modules.{alias,alias.bin,ccwmap,dep,dep.bin,devname,ieee1394map} rm -f %{buildroot}/lib/modules/%{kernel_ver}-%{?KERNEL_TARGET}/modules.{inputmap,isapnpmap,ofmap,pcimap,seriomap,softdep} rm -f %{buildroot}/lib/modules/%{kernel_ver}-%{?KERNEL_TARGET}/modules.{symbols,symbols.bin,usbmap} # remove .tmp files if any rm -f %{buildroot}%{_prefix}/src/linux-%{kernel_ver}-%{?KERNEL_TARGET}/.tmp* || true # clean a wrong symlink [ -L %{buildroot}%{_prefix}/src/linux-%{kernel_ver}-%{?KERNEL_TARGET}/arch/ppc/include/asm ] && \ { rm -f %{buildroot}%{_prefix}/src/linux-%{kernel_ver}-%{?KERNEL_TARGET}/arch/ppc/include/asm ln -sf ../../../include/asm %{buildroot}%{_prefix}/src/linux-%{kernel_ver}-%{?KERNEL_TARGET}/arch/ppc/include/asm } # fix symlink pointing to sources rm -f %{buildroot}/lib/modules/%{kernel_ver}-%{?KERNEL_TARGET}/source ln -s %{_prefix}/src/linux-%{kernel_ver}-%{?KERNEL_TARGET} %{buildroot}/lib/modules/%{kernel_ver}-%{?KERNEL_TARGET}/source # # create kernel-source.files and kernel-headers.files # cd %{buildroot}%{_prefix}/src/linux-%{kernel_ver}-%{?KERNEL_TARGET} splitdirs="block crypto drivers fs ipc kernel lib mm net security sound" case %{_target_cpu} in i586|x86_64) headers_arch="x86" ;; arm) headers_arch="arm" ;; ppc) headers_arch="powerpc" ;; esac # discovered while building nvidia 304.88 for 3.10 [ -e %{buildroot}%{_prefix}/src/linux-%{kernel_ver}-%{?KERNEL_TARGET}/include/uapi/asm ] || \ ln -s ../../arch/$headers_arch/include/uapi/asm \ %{buildroot}%{_prefix}/src/linux-%{kernel_ver}-%{?KERNEL_TARGET}/include/uapi/asm [ -e %{buildroot}%{_prefix}/src/linux-%{kernel_ver}-%{?KERNEL_TARGET}/include/asm ] || \ ln -s ../arch/$headers_arch/include/asm include/asm find $splitdirs -type f -name *.h -exec \ echo "%{_prefix}/src/linux-%{kernel_ver}-%{?KERNEL_TARGET}/"{} >> \ %{_builddir}/%{name}-%{kernel_ver}mamba-x86_64/kernel-headers.files \; %if "%{with_full_source}" == "1" find $splitdirs -type f -not -name *.h -exec \ echo "%{_prefix}/src/linux-%{kernel_ver}-%{?KERNEL_TARGET}/"{} >> \ %{_builddir}/%{name}-%{kernel_ver}mamba-x86_64/kernel-source.files \; %else touch %{_builddir}/%{name}-%{kernel_ver}mamba-x86_64/kernel-source.files find $splitdirs -type f -not -name *.h -exec rm -f {} \; rm -rf firmware samples virt %endif archs=" `ls %{buildroot}%{_prefix}/src/linux-%{kernel_ver}-%{?KERNEL_TARGET}/arch` " for i in $archs; do [ "$i" == "$headers_arch" ] || \ %if "%{with_full_source}" == "1" echo "%{_prefix}/src/linux-%{kernel_ver}-%{?KERNEL_TARGET}/arch/$i" >> \ %{_builddir}/%{name}-%{kernel_ver}mamba-x86_64/kernel-source.files %else rm -rf arch/$i %endif done echo "%{_prefix}/src/linux-%{kernel_ver}-%{?KERNEL_TARGET}/arch/$headers_arch" >> \ %{_builddir}/%{name}-%{kernel_ver}mamba-x86_64/kernel-headers.files # install sanitised headers used by glibc ARCH=%{target_cpu} make headers_install \ HOSTCC=%{_build}-gcc \ CROSS_COMPILE=%{_target_platform}- \ INSTALL_HDR_PATH=%{buildroot}%{_prefix}/src/linux-%{kernel_ver}-%{KERNEL_TARGET}/usr # Do not package cross-platform host tools if [ "%{_build}" != "%{_target_platform}" ]; then for f in asn1_compiler conmakehash extract-cert kallsyms sortextable; do rm -f %{buildroot}/usr/src/linux-%{kernel_ver}-%{?KERNEL_TARGET}/scripts/$f done fi # HOSTCC=%{_build}-gcc \ # from kernel 3.0.4 patch rm -f %{buildroot}/usr/src/linux-%{kernel_ver}-%{?KERNEL_TARGET}/MAINTAINERS.orig ln -s %{KIMAGE_DEST}-%{kernel_ver}-%{?KERNEL_TARGET} %{buildroot}/boot/%{KIMAGE_DEST}-%{?KERNEL_TARGET} ln -s initramfs-%{kernel_ver}-%{?KERNEL_TARGET}.img %{buildroot}/boot/initramfs-%{?KERNEL_TARGET}.img install -d %{buildroot}%{_sysconfdir}/dracut.conf.d cat > %{buildroot}%{_sysconfdir}/dracut.conf.d/kernel-baytrail.conf << _EOF acpi_override=yes acpi_table_dir="/boot" _EOF %clean [ "%{buildroot}" != / ] && rm -rf "%{buildroot}" %pre if [ $1 -gt 1 ]; then # update or downgrade %if "%{_target_cpu}" == "i586" [ -x /sbin/lilo-config ] && /sbin/lilo-config -q --keep-default --del "openmamba-%{?KERNEL_TARGET_SHORT}" %endif %if "%{_target_cpu}" == "x86_64" [ -x /sbin/lilo-config ] && /sbin/lilo-config -q --keep-default --del "openmamba-%{?KERNEL_TARGET_SHORT}" %endif %if "%{_target_cpu}" == "ppc" /usr/sbin/ybin %endif : fi exit 0 %post # %if "%{_target_cpu}" == "i586" # if [ -x /sbin/lilo-config ]; then # /sbin/lilo-config --killdevfs # /sbin/lilo-config --add \ # %{_sysconfdir}/lilo.d/openmamba-%{kernel_ver}%{?KERNEL_TARGET}-%{release} # /sbin/lilo # fi # %endif # %if "%{_target_cpu}" == "x86_64" # if [ -x /sbin/lilo-config ]; then # /sbin/lilo-config --killdevfs # /sbin/lilo-config --add \ # %{_sysconfdir}/lilo.d/openmamba-%{kernel_ver}%{?KERNEL_TARGET}-%{release} # /sbin/lilo # fi # %endif #if [ $1 -eq 0 ]; then ## uninstalling the rpm package # %if "%{_target_cpu}" == "i586" # if [ -x /sbin/lilo-config ]; then # /sbin/lilo-config -q --del "openmamba-%{?KERNEL_TARGET_SHORT}" # /sbin/lilo # fi # %endif # %if "%{_target_cpu}" == "x86_64" # if [ -x /sbin/lilo-config ]; then # /sbin/lilo-config -q --del "openmamba-%{?KERNEL_TARGET_SHORT}" # /sbin/lilo # fi # %endif # : #fi exit 0 %postun # erase this package if [ $1 -eq 0 ]; then [ -f /boot/%{KIMAGE_DEST}-%{kernel_ver}-%{?KERNEL_TARGET} ] || rm -f /boot/initramfs-%{kernel_ver}-%{?KERNEL_TARGET}.img fi exit 0 %post wireless # new install or upgrade if [ $1 -ge 1 ]; then /sbin/depmod -a -F /boot/System.map-%{kernel_ver}-%{?KERNEL_TARGET} \ %{kernel_ver}-%{?KERNEL_TARGET} &>/dev/null fi exit 0 %post sound # new install or upgrade if [ $1 -ge 1 ]; then /sbin/depmod -a -F /boot/System.map-%{kernel_ver}-%{?KERNEL_TARGET} \ %{kernel_ver}-%{?KERNEL_TARGET} &>/dev/null fi exit 0 %posttrans # clean our orphan old initramfs ls /boot/initramfs-*-failsafe.img | \ while read line; do k=${line/\/boot\/initramfs-} k=${k/-failsafe.img} [ -e /boot/vmlinuz-$k ] || \ rm -f /boot/initramfs-$k.img /boot/initramfs-$k-failsafe.img done # clean old and empty /usr/src/linux-* directories for f in /usr/src/linux-*; do if [ ! -L $f ]; then a=`find $f -type f -a -not -name MARKER -print -quit | wc -l` if [ $a -eq 0 -a "$f" != "/" ]; then rm -rf $f fi fi done # new install or upgrade /sbin/depmod -a -F /boot/System.map-%{kernel_ver}-%{?KERNEL_TARGET} \ %{kernel_ver}-%{?KERNEL_TARGET} &>/dev/null # create local system initramfs /usr/sbin/mkinitrd -f /boot/initramfs-%{kernel_ver}-%{?KERNEL_TARGET}.img %{kernel_ver}-%{?KERNEL_TARGET} # create system-wide "failsafe" initramfs /usr/sbin/dracut -f --filesystems "ext3 squashfs isofs reiserfs ext4" \ --nomdadmconf --nolvmconf -k /lib/modules/%{kernel_ver}-%{?KERNEL_TARGET} \ /boot/initramfs-%{kernel_ver}-%{?KERNEL_TARGET}-failsafe.img %{kernel_ver}-%{?KERNEL_TARGET} # all done, now ring grub-update %if "%{_target_cpu}" == "i586" if [ -x /usr/sbin/grub-update ]; then /usr/sbin/grub-update fi if [ -x /usr/sbin/update-grub ]; then /usr/sbin/update-grub 2>/dev/null grub-set-default 0 fi %endif %if "%{_target_cpu}" == "x86_64" if [ -x /usr/sbin/grub-update ]; then /usr/sbin/grub-update fi if [ -x /usr/sbin/update-grub ]; then /usr/sbin/update-grub 2>/dev/null grub-set-default 0 fi %endif %if "%{_target_cpu}" == "ppc" /usr/sbin/ybin %endif exit 0 %post headers # touch file so it results up-to-date on make if [ $1 -ge 1 ]; then touch %{_prefix}/src/linux-%{kernel_ver}-%{?KERNEL_TARGET}/include/config/MARKER [ -x /usr/sbin/dkms ] && dkms autoinstall -q --kernelver %{kernel_ver}-%{?KERNEL_TARGET} || true ln -snf %{_prefix}/src/linux-%{kernel_ver}-%{?KERNEL_TARGET} %{_prefix}/src/linux-%{?KERNEL_TARGET} fi exit 0 %post headers-sanitised if [ $1 -ge 1 ]; then ln -snf %{_prefix}/src/linux-%{kernel_ver}-%{?KERNEL_TARGET} %{_prefix}/src/linux-%{?KERNEL_TARGET} fi exit 0 %files %defattr (-, root, root) %{_sysconfdir}/dracut.conf.d/kernel-baytrail.conf /boot/System.map-%{kernel_ver}-%{?KERNEL_TARGET} /boot/%{KIMAGE_DEST}-%{kernel_ver}-%{?KERNEL_TARGET} /boot/%{KIMAGE_DEST}-%{?KERNEL_TARGET} /boot/initramfs-%{?KERNEL_TARGET}.img #%if %{_target_cpu} == arm #/boot/uImage-%{kernel_ver}%{?KERNEL_TARGET} #%endif %dir /lib/modules/%{kernel_ver}-%{?KERNEL_TARGET} /lib/modules/%{kernel_ver}-%{?KERNEL_TARGET}/modules.builtin /lib/modules/%{kernel_ver}-%{?KERNEL_TARGET}/modules.builtin.bin /lib/modules/%{kernel_ver}-%{?KERNEL_TARGET}/modules.order %dir /lib/modules/%{kernel_ver}-%{?KERNEL_TARGET}/kernel /lib/modules/%{kernel_ver}-%{?KERNEL_TARGET}/kernel/arch #%dir /lib/modules/%{kernel_ver}-%{?KERNEL_TARGET}/kernel/block #/lib/modules/%{kernel_ver}-%{?KERNEL_TARGET}/kernel/block/* %dir /lib/modules/%{kernel_ver}-%{?KERNEL_TARGET}/kernel/crypto /lib/modules/%{kernel_ver}-%{?KERNEL_TARGET}/kernel/crypto/* %dir /lib/modules/%{kernel_ver}-%{?KERNEL_TARGET}/kernel/drivers /lib/modules/%{kernel_ver}-%{?KERNEL_TARGET}/kernel/drivers/* %dir /lib/modules/%{kernel_ver}-%{?KERNEL_TARGET}/kernel/fs /lib/modules/%{kernel_ver}-%{?KERNEL_TARGET}/kernel/fs/* #%dir /lib/modules/%{kernel_ver}-%{?KERNEL_TARGET}/kernel/kernel #/lib/modules/%{kernel_ver}-%{?KERNEL_TARGET}/kernel/kernel/*.ko #%dir /lib/modules/%{kernel_ver}-%{?KERNEL_TARGET}/kernel/kernel/locking #/lib/modules/%{kernel_ver}-%{?KERNEL_TARGET}/kernel/kernel/locking/*.ko #%dir /lib/modules/%{kernel_ver}-%{?KERNEL_TARGET}/kernel/kernel/rcu #/lib/modules/%{kernel_ver}-%{?KERNEL_TARGET}/kernel/kernel/rcu/* #%dir /lib/modules/%{kernel_ver}-%{?KERNEL_TARGET}/kernel/kernel/sched #/lib/modules/%{kernel_ver}-%{?KERNEL_TARGET}/kernel/kernel/sched/* #%dir /lib/modules/%{kernel_ver}-%{?KERNEL_TARGET}/kernel/kernel/time #/lib/modules/%{kernel_ver}-%{?KERNEL_TARGET}/kernel/kernel/time/*.ko %dir /lib/modules/%{kernel_ver}-%{?KERNEL_TARGET}/kernel/lib /lib/modules/%{kernel_ver}-%{?KERNEL_TARGET}/kernel/lib/* %dir /lib/modules/%{kernel_ver}-%{?KERNEL_TARGET}/kernel/mm /lib/modules/%{kernel_ver}-%{?KERNEL_TARGET}/kernel/mm/* %dir /lib/modules/%{kernel_ver}-%{?KERNEL_TARGET}/kernel/net /lib/modules/%{kernel_ver}-%{?KERNEL_TARGET}/kernel/net/* %dir /lib/modules/%{kernel_ver}-%{?KERNEL_TARGET}/kernel/security /lib/modules/%{kernel_ver}-%{?KERNEL_TARGET}/kernel/security/* /lib/modules/%{kernel_ver}-%{?KERNEL_TARGET}/kernel/sound/soundcore.ko %dir /lib/modules/%{kernel_ver}-%{?KERNEL_TARGET}/kernel/virt /lib/modules/%{kernel_ver}-%{?KERNEL_TARGET}/kernel/virt/* /lib/modules/%{kernel_ver}-%{?KERNEL_TARGET}/kernel/block/deadline-iosched.ko /lib/modules/%{kernel_ver}-%{?KERNEL_TARGET}/kernel/kernel/locking/locktorture.ko /lib/modules/%{kernel_ver}-%{?KERNEL_TARGET}/kernel/kernel/rcu/rcuperf.ko /lib/modules/%{kernel_ver}-%{?KERNEL_TARGET}/kernel/kernel/time/test_udelay.ko /lib/modules/%{kernel_ver}-%{?KERNEL_TARGET}/kernel/kernel/torture.ko # Sound /lib/modules/%{kernel_ver}-%{?KERNEL_TARGET}/kernel/sound #%exclude /lib/modules/%{kernel_ver}%{?KERNEL_TARGET}/kernel/sound/soundcore.ko # Wireless /lib/modules/%{kernel_ver}-%{?KERNEL_TARGET}/kernel/drivers/net/usb/cdc_ether.ko /lib/modules/%{kernel_ver}-%{?KERNEL_TARGET}/kernel/drivers/net/usb/rndis_host.ko /lib/modules/%{kernel_ver}-%{?KERNEL_TARGET}/kernel/drivers/net/usb/usbnet.ko /lib/modules/%{kernel_ver}-%{?KERNEL_TARGET}/kernel/drivers/ssb/ssb.ko /lib/modules/%{kernel_ver}-%{?KERNEL_TARGET}/kernel/net/mac80211/mac80211.ko /lib/modules/%{kernel_ver}-%{?KERNEL_TARGET}/kernel/net/wireless/cfg80211.ko %files source -f kernel-source.files %defattr(-,root,root) /usr/src/linux-%{kernel_ver}-%{?KERNEL_TARGET}/arch/.gitignore /usr/src/linux-%{kernel_ver}-%{?KERNEL_TARGET}/Documentation /usr/src/linux-%{kernel_ver}-%{?KERNEL_TARGET}/REPORTING-BUGS /usr/src/linux-%{kernel_ver}-%{?KERNEL_TARGET}/usr/gen_init_cpio.c /usr/src/linux-%{kernel_ver}-%{?KERNEL_TARGET}/usr/initramfs_data.S #/usr/src/linux-%{kernel_ver}%{?KERNEL_TARGET}/usr/initramfs_data.bz2.S #/usr/src/linux-%{kernel_ver}%{?KERNEL_TARGET}/usr/initramfs_data.gz.S #/usr/src/linux-%{kernel_ver}%{?KERNEL_TARGET}/usr/initramfs_data.lzma.S #/usr/src/linux-%{kernel_ver}%{?KERNEL_TARGET}/usr/initramfs_data.lzo.S /usr/src/linux-%{kernel_ver}-%{?KERNEL_TARGET}/usr/Kconfig /usr/src/linux-%{kernel_ver}-%{?KERNEL_TARGET}/usr/Makefile /usr/src/linux-%{kernel_ver}-%{?KERNEL_TARGET}/usr/.gitignore /usr/src/linux-%{kernel_ver}-%{?KERNEL_TARGET}/tools /usr/src/linux-%{kernel_ver}-%{?KERNEL_TARGET}/.missing-syscalls.d %if "%{with_full_source}" == "1" /usr/src/linux-%{kernel_ver}-%{?KERNEL_TARGET}/block /usr/src/linux-%{kernel_ver}-%{?KERNEL_TARGET}/firmware /usr/src/linux-%{kernel_ver}-%{?KERNEL_TARGET}/samples /usr/src/linux-%{kernel_ver}-%{?KERNEL_TARGET}/virt %endif %files headers-sanitised %defattr(-,root,root) /usr/src/linux-%{kernel_ver}-%{?KERNEL_TARGET}/usr/include %files headers -f kernel-headers.files %defattr(-,root,root) /usr/src/linux-%{kernel_ver}-%{?KERNEL_TARGET}/COPYING /usr/src/linux-%{kernel_ver}-%{?KERNEL_TARGET}/CREDITS /usr/src/linux-%{kernel_ver}-%{?KERNEL_TARGET}/Kbuild /usr/src/linux-%{kernel_ver}-%{?KERNEL_TARGET}/Kconfig /usr/src/linux-%{kernel_ver}-%{?KERNEL_TARGET}/certs /usr/src/linux-%{kernel_ver}-%{?KERNEL_TARGET}/certs/.gitignore /usr/src/linux-%{kernel_ver}-%{?KERNEL_TARGET}/drivers /usr/src/linux-%{kernel_ver}-%{?KERNEL_TARGET}/include /usr/src/linux-%{kernel_ver}-%{?KERNEL_TARGET}/init /usr/src/linux-%{kernel_ver}-%{?KERNEL_TARGET}/Makefile /usr/src/linux-%{kernel_ver}-%{?KERNEL_TARGET}/Makefile.orig /usr/src/linux-%{kernel_ver}-%{?KERNEL_TARGET}/Module.symvers /usr/src/linux-%{kernel_ver}-%{?KERNEL_TARGET}/MAINTAINERS /usr/src/linux-%{kernel_ver}-%{?KERNEL_TARGET}/README /usr/src/linux-%{kernel_ver}-%{?KERNEL_TARGET}/scripts /usr/src/linux-%{kernel_ver}-%{?KERNEL_TARGET}/.config /lib/modules/%{kernel_ver}-%{?KERNEL_TARGET}/build /lib/modules/%{kernel_ver}-%{?KERNEL_TARGET}/source %files firmware %defattr (-, root, root) /lib/firmware/* %changelog * Mon Apr 10 2017 Silvan Calarco 4.9.17-2mamba - config: disable internal DSDT, use via initrd * Wed Mar 22 2017 Silvan Calarco 4.9.17-1mamba - update to 4.9.17 - added pwm-lpss and dsdt patches to fix backlight support on Hi10 * Mon Feb 13 2017 Silvan Calarco 4.9.9-1mamba - update to 4.9.9 * Fri Feb 03 2017 Silvan Calarco 4.9.7-1mamba - update to 4.9.7 * Tue Jan 31 2017 Silvan Calarco 4.9.6-1mamba - update to 4.9.6 * Fri Jan 27 2017 Silvan Calarco 4.8.17-2mamba - added kernel-baytrail-4.8.17-chuwi-shdci-fixes.patch patch * Tue Jan 24 2017 Silvan Calarco 4.8.17-1mamba - update to 4.8.17 * Fri Jan 20 2017 Silvan Calarco 4.6.7-1mamba - update to 4.6.7 * Tue Jan 17 2017 Silvan Calarco 4.8.17-1mamba - update to 4.8.17 - baytrail custom target based on mainstream 4.8