###############################################################################
name = kernel
-version = 3.0.4
-release = 5
+version = 3.13.2
+release = 2
thisapp = linux-%{version}
-maintainer = Michael Tremer <michael.tremer@ipfire.org>
+maintainer = Arne Fitzenreiter <arne.fitzenreiter@ipfire.org>
groups = System/Kernels
url = http://www.kernel.org/
license = GPLv2
summary = The Linux kernel.
description
- The kernel package contains the Linux kernel (vmlinuz), the core of any \
- Linux operating system. The kernel handles the basic functions \
- of the operating system: memory allocation, process allocation, device \
+ The kernel package contains the Linux kernel (vmlinuz), the core of any
+ Linux operating system. The kernel handles the basic functions
+ of the operating system: memory allocation, process allocation, device
input and output, etc.
end
localversion = %{release}.%{DISTRO_DISTTAG}.%{DISTRO_ARCH}
fullver = %{version}-%{localversion}
-sources = %{thisapp}.tar.gz
+source_dl = http://www.kernel.org/pub/linux/kernel/v3.x/
+sources = %{thisapp}.tar.xz
build
+ # icecream cannot be used to compile the kernel.
+ # Because the PaX patch does use GCC plugins to harden the kernel which
+ # are not available on the remote compilers, we need to disable it here.
+ export ICECC=no
+
+ kernel_logo = /usr/share/pixmaps/kernel-logo.ppm
+
requires
+ asciidoc
+ audit-devel
+ bc
+ binutils >= 2.23.51.0.3-3
binutils-devel
+ bison
elfutils-devel
- module-init-tools
+ flex
+ gcc-plugin-devel
+ gettext
+ libunwind-devel
ncurses-devel
+ net-tools
newt-devel
- iputils
+ pciutils-devel
perl
python-devel
- xz-lzma-compat
+ slang-devel
+ xmlto
+
+ /sbin/depmod
+ %{kernel_logo}
+ end
+
+ # i686 needs librmi for cpupower.
+ if "%{DISTRO_ARCH}" == "i686"
+ requires += liblrmi-devel
end
# A list of kernels to build.
- kernels = default
+ kernels =
+
+ # Arguments that are passed to the kernel build command.
+ kernel_build_flags =
+
+ kernel_target = bzImage
+ kernel_image = arch/%{kernel_arch}/boot/%{kernel_target}
if "%{DISTRO_ARCH}" == "i686"
- # Build a PAE-enabled kernel for the i686 architecture.
- kernels += PAE
+ # Build a default and legacy kernel for the
+ # i686 architecture.
+ build_kernel_default = 1
+ build_kernel_legacy = 1
+
+ kernel_arch = x86
+ end
+
+ if "%{DISTRO_ARCH}" == "x86_64"
+ build_kernel_default = 1
+
+ kernel_arch = x86
+ end
+
+ if "%{DISTRO_ARCH}" == "armv5tel"
+ # Build a kernel for Marvell Kirkwood-based devices.
+ build_kernel_default = 1
+
+ kernel_arch = arm
+ kernel_target = zImage
+
+ # http://lists.infradead.org/pipermail/linux-arm-kernel/2012-March/091404.html
+ kernel_build_flags = KALLSYMS_EXTRA_PASS=1
+ end
+
+ if "%{DISTRO_ARCH}" == "armv7hl"
+ # Build the default unified kernel.
+ build_kernel_default = 1
+ build_kernel_lpae = 1
+
+ kernel_arch = arm
+ kernel_target = zImage
+ end
+
+ # mkimage is a requirement to build uImage images.
+ if "%{kernel_target}" == "uImage"
+ requires += u-boot-tools
+ end
+
+ # Build default kernel.
+ if "%{build_kernel_default}" == "1"
+ kernels += default
+ end
+
+ # Build legacy kernel.
+ if "%{build_kernel_legacy}" == "1"
+ kernels += legacy
+ end
- kernel_arch = x86
- kernel_image = arch/%{kernel_arch}/boot/bzImage
- kernel_target = bzImage
+ # Build lpae kernel
+ if "%{build_kernel_lpae}" == "1"
+ kernels += lpae
end
+ perf_make = make %{MAKETUNING} -C tools/perf V=1 WERROR=0 \
+ NO_LIBUNWIND=1 HAVE_CPLUS_DEMANGLE=1 NO_GTK2=1 NO_LIBNUMA=1 \
+ NO_STRLCPY=1 NO_BIONIC=1 prefix=%{prefix} perfexecdir=lib/perf-core
+
prepare_cmds
rm -f %{DIR_APP}/localversion-grsec
+ # Remove -Werror flag to fix ARMv5 build.
+ sed -e "s/-Werror//g" -i grsecurity/Makefile || :
+
+ # Disable the colorize plugin.
+ # It's generally very nice but it clutters our
+ # logfiles.
+ sed -e "/^COLORIZE_PLUGIN_CFLAGS/d" \
+ -i Makefile
+
sed -e "s/^HOSTCFLAGS.*=.*/& -fPIC/g" -i Makefile
- cp -vf %{DIR_SOURCE}/%{DISTRO_SNAME}_logo.ppm \
+ cp -vf %{kernel_logo} \
drivers/video/logo/logo_linux_clut224.ppm
# Get rid of unwanted files resulting from patch fuzz.
# Remove unnecessary SCM files.
find . -name .gitignore -exec rm -f {} \; >/dev/null
+ # This prevents scripts/setlocalversion from mucking with our version numbers.
+ touch .scmversion
+
mkdir -pv configs
+
+ cd %{DIR_SOURCE}
configure_kernel() {
local flavour=${1}
local suffix
suffix="-${flavour}"
fi
- # This is the place, where the configuration files
- # should be dynamically generated.
- # For now, we just copy pregenerated ones.
- cp %{DIR_SOURCE}/config.%{arch}${suffix} .config
-
- make ARCH=%{kernel_arch} oldnoconfig
- mv .config configs/config.${flavour}
+ scripts/configure --kernel-dir=%{DIR_APP} \
+ merge %{DISTRO_ARCH} ${flavour} %{DIR_APP}/configs/config.${flavour}
}
# Generate configuration files for all kernels we are going to
for kernel in %{kernels}; do
configure_kernel ${kernel}
done
+
+ # Tools
+ # Prevent perf from installing any files in /usr/libexec
+ sed -i %{DIR_APP}/tools/perf/config/Makefile -e "s/libexec/lib/g"
end
build
fullversion="${fullversion}.${flavour}"
fi
+ # Label the build.
+ sed -i Makefile \
+ -e "s/^EXTRAVERSION.*/EXTRAVERSION = -${localversion}/"
+
# Clean up the source tree.
make mrproper
# Install configuration file.
cp configs/config.${flavour} .config
-
- # Label the build.
- sed -i Makefile \
- -e "s/^EXTRAVERSION = .*/EXTRAVERSION = -${localversion}/g"
+ cat .config
# Run the build.
- make ARCH=%{kernel_arch} CC="gcc -fno-PIE" %{kernel_target} modules %{PARALLELISMFLAGS}
+ make ARCH=%{kernel_arch} oldnoconfig >/dev/null
+ make ARCH=%{kernel_arch} CC="gcc -fno-PIE" %{kernel_target} modules \
+ %{kernel_build_flags} %{PARALLELISMFLAGS}
+
+ # Compile Flattened Device Tree database
+ case "${DISTRO_ARCH}" in
+ arm*)
+ make ARCH=%{kernel_arch} dtbs
+
+ mkdir -pv %{BUILDROOT}/boot/dtb-${fullversion}
+ for file in arch/arm/boot/dts/*.dtb; do
+ [ -e "${file}" ] || continue
+
+ install -m 644 ${file} %{BUILDROOT}/boot/dtb-${fullversion} || exit 1
+ rm -f ${file}
+ done
+ ;;
+ esac
# Install the results.
- mkdir -pv %{BUILDROOT}/boot %{BUILDROOT}/lib/modules/${fullversion}
+ mkdir -pv %{BUILDROOT}/boot %{BUILDROOT}/usr/lib/modules/${fullversion}
install -m 755 %{kernel_image} %{BUILDROOT}/boot/vmlinuz-${fullversion}
install -m 644 .config %{BUILDROOT}/boot/config-${fullversion}
install -m 644 System.map %{BUILDROOT}/boot/System.map-${fullversion}
dd if=/dev/zero of=%{BUILDROOT}/boot/initramfs-${fullversion}.img bs=1M count=20
# Install modules.
- make ARCH=%{kernel_arch} INSTALL_MOD_PATH=%{BUILDROOT} mod-fw= \
+ make ARCH=%{kernel_arch} INSTALL_MOD_PATH=%{BUILDROOT}/usr mod-fw= V=1 \
KERNELRELEASE=${fullversion} modules_install
- #make ARCH=%{kernel_arch} INSTALL_MOD_PATH=%{BUILDROOT} \
- # KERNELRELEASE=${fullversion} vdso_install
+
+ # Install vdso.
+ case "%{DISTRO_ARCH}" in
+ i686)
+ make ARCH=%{kernel_arch} INSTALL_MOD_PATH=%{BUILDROOT} \
+ KERNELRELEASE=${fullversion} vdso_install
+ ;;
+ esac
# Create an empty settings file for dracut
- mkdir -pv %{BUILDROOT}/etc/ld.so.conf.d
+ mkdir -p %{BUILDROOT}/etc/ld.so.conf.d
echo "# Placeholder file, no vDSO hwcap entries used in this kernel." \
> %{BUILDROOT}/etc/ld.so.conf.d/kernel-${fullversion}.conf
# And now the scary looking part.
#
# Recreate source and build links.
- rm -vf %{BUILDROOT}/lib/modules/${fullversion}/{build,source}
- mkdir -pv %{BUILDROOT}/lib/modules/${fullversion}/build
- ln -svf build %{BUILDROOT}/lib/modules/${fullversion}/source
+ rm -f %{BUILDROOT}/usr/lib/modules/${fullversion}/{build,source}
+ mkdir -p %{BUILDROOT}/usr/lib/modules/${fullversion}/build
+ ln -sf build %{BUILDROOT}/usr/lib/modules/${fullversion}/source
# Create dirs for extra modules.
- mkdir -pv %{BUILDROOT}/lib/modules/${fullversion}/extra
+ mkdir -p %{BUILDROOT}/usr/lib/modules/${fullversion}/extra
- cp -v --parents $(find -type f -name "Makefile*" -o -name "Kconfig*") \
- %{BUILDROOT}/lib/modules/${fullversion}/build
- cp -v Module.symvers System.map \
- %{BUILDROOT}/lib/modules/${fullversion}/build
- rm -vrf %{BUILDROOT}/lib/modules/${fullversion}/build/{Documentation,scripts,include}
+ cp --parents $(find -type f -name "Makefile*" -o -name "Kconfig*") \
+ %{BUILDROOT}/usr/lib/modules/${fullversion}/build
+ cp Module.symvers System.map \
+ %{BUILDROOT}/usr/lib/modules/${fullversion}/build
+ rm -rf %{BUILDROOT}/usr/lib/modules/${fullversion}/build/{Documentation,scripts,include}
- cp -v .config %{BUILDROOT}/lib/modules/${fullversion}/build
- cp -va scripts %{BUILDROOT}/lib/modules/${fullversion}/build
- find %{BUILDROOT}/lib/modules/${fullversion}/build/scripts -name "*.o" \
+ cp .config %{BUILDROOT}/usr/lib/modules/${fullversion}/build
+ cp -a scripts %{BUILDROOT}/usr/lib/modules/${fullversion}/build
+ find %{BUILDROOT}/usr/lib/modules/${fullversion}/build/scripts -name "*.o" \
-exec rm -vf {} \;
- cp -va --parents arch/%{kernel_arch}/include \
- %{BUILDROOT}/lib/modules/${fullversion}/build
- cp -va include %{BUILDROOT}/lib/modules/${fullversion}/build/include
+ cp -a --parents arch/%{kernel_arch}/include \
+ %{BUILDROOT}/usr/lib/modules/${fullversion}/build
+ cp -a include %{BUILDROOT}/usr/lib/modules/${fullversion}/build/include
# Make sure we can build external modules.
- touch -r %{BUILDROOT}/lib/modules/${fullversion}/build/Makefile \
- %{BUILDROOT}/lib/modules/${fullversion}/build/include/linux/version.h
- touch -r %{BUILDROOT}/lib/modules/${fullversion}/build/.config \
- %{BUILDROOT}/lib/modules/${fullversion}/build/autoconf.h
- cp -v %{BUILDROOT}/lib/modules/${fullversion}/build/.config \
- %{BUILDROOT}/lib/modules/${fullversion}/build/include/config/auto.conf
-
- find %{BUILDROOT}/lib/modules/${fullversion} -name "*.ko" -type f | \
+ touch -r %{BUILDROOT}/usr/lib/modules/${fullversion}/build/Makefile \
+ %{BUILDROOT}/usr/lib/modules/${fullversion}/build/include/linux/version.h
+ touch -r %{BUILDROOT}/usr/lib/modules/${fullversion}/build/.config \
+ %{BUILDROOT}/usr/lib/modules/${fullversion}/build/autoconf.h
+ cp %{BUILDROOT}/usr/lib/modules/${fullversion}/build/.config \
+ %{BUILDROOT}/usr/lib/modules/${fullversion}/build/include/config/auto.conf
+
+ find %{BUILDROOT}/usr/lib/modules/${fullversion} -name "*.ko" -type f | \
xargs chmod u+x
- for i in alias alias.bin builtin.bin ccwmap dep dep.bin ieee1394map inputmap isapnpmap ofmap pcimap seriomap symbols symbols.bin usbmap; do
- rm -vf %{BUILDROOT}/lib/modules/${fullversion}/modules.${i}
- done
-
# Move all development files to /usr/src.
- mkdir -pv %{BUILDROOT}/usr/src/kernels
- mv -v %{BUILDROOT}/lib/modules/${fullversion}/build \
+ mkdir -p %{BUILDROOT}/usr/src/kernels
+ mv %{BUILDROOT}/usr/lib/modules/${fullversion}/build \
%{BUILDROOT}/usr/src/kernels/${fullversion}
- ln -svf ../../../usr/src/kernels/${fullversion} \
- %{BUILDROOT}/lib/modules/${fullversion}/build
+ ln -sf ../../../src/kernels/${fullversion} \
+ %{BUILDROOT}/usr/lib/modules/${fullversion}/build
+
+ # Fix permissions.
+ find %{BUILDROOT}/usr/src/kernels -name "modules.order" \
+ -exec chmod 644 {} \;
find %{BUILDROOT}/usr/src/kernels -name ".*.cmd" -exec rm -f {} \;
}
for kernel in %{kernels}; do
build_kernel ${kernel}
done
+
+ # Build tools.
+ # perf
+ %{perf_make} DESTDIR=%{BUILDROOT} all
+
+ # cpupower
+ chmod +x tools/power/cpupower/utils/version-gen.sh
+ make -C tools/power/cpupower CPUFREQ_BENCH=false %{PARALLELISMFLAGS}
+
+ if [ "%{DISTRO_ARCH}" = "x86_64" ]; then
+ pushd tools/power/cpupower/debug/x86_64
+ make %{MAKETUNING} centrino-decode powernow-k8-decode
+ popd
+ elif [ "%{DISTRO_ARCH}" = "i686" ]; then
+ pushd tools/power/cpupower/debug/i386
+ make %{MAKETUNING} centrino-decode powernow-k8-decode
+ popd
+ fi
+
+ # Should be built for all x86 architectures
+ if [ "%{DISTRO_ARCH}" = "x86_64" ]; then
+ # Won't compile on i686
+ # x86_energy_perf_policy.c: In function ‘validate_cpuid’:
+ # x86_energy_perf_policy.c:154:2: error: PIC register clobbered by ‘ebx’ in ‘asm’
+ # asm("cpuid" : "=a" (fms), "=c" (ecx), "=d" (edx) : "a" (1) : "ebx");
+ # ^
+ pushd tools/power/x86/x86_energy_perf_policy
+ make
+ popd
+
+ # Same as above
+ pushd tools/power/x86/turbostat
+ make
+ popd
+ fi
+
+ pushd tools/thermal/tmon
+ make
+ popd
end
install
+ # When no kernels are configured, we create a default config
+ # which enables us to install at least the header files.
+ [ -n "%{kernels}" ] || make ARCH=%{kernel_arch} defconfig
+
# Install the header files
- make ARCH=x86 INSTALL_HDR_PATH=dest headers_install
+ make ARCH=%{kernel_arch} INSTALL_HDR_PATH=dest headers_install
mkdir -pv %{BUILDROOT}/usr/include
find dest/include \( -name .install -o -name ..install.cmd \) -delete
cp -rv dest/include/* %{BUILDROOT}/usr/include
rm -rfv %{BUILDROOT}/lib/firmware
# Install tools.
- # XXX cannot install this because of #263.
- #make -C tools/perf DESTDIR=%{BUILDROOT} \
- # HAVE_CPLUS_DEMANGLE=1 prefix=/usr install install-man
+ %{perf_make} DESTDIR=%{BUILDROOT} install-bin install-python_ext
+
+ # cpupower
+ make -C tools/power/cpupower DESTDIR=%{BUILDROOT} libdir=%{libdir} \
+ mandir=%{mandir} CPUFREQ_BENCH=false install
+
+ if [ "%{DISTRO_ARCH}" = "x86_64" ]; then
+ pushd tools/power/cpupower/debug/x86_64
+ install -m 755 centrino-decode \
+ %{BUILDROOT}/usr/bin/centrino-decode
+ install -m 755 powernow-k8-decode \
+ %{BUILDROOT}/usr/bin/powernow-k8-decode
+ popd
+ elif [ "%{DISTRO_ARCH}" = "i686" ]; then
+ pushd tools/power/cpupower/debug/i386
+ install -m 755 centrino-decode \
+ %{BUILDROOT}/usr/bin/centrino-decode
+ install -m 755 powernow-k8-decode \
+ %{BUILDROOT}/usr/bin/powernow-k8-decode
+ popd
+ fi
+
+ chmod 0755 %{BUILDROOT}%{libdir}/libcpupower.so*
+
+ # This should be built for all x86 architectures
+ if [ "%{DISTRO_ARCH}" = "x86_64" ]; then
+ mkdir -pv %{BUILDROOT}%{mandir}/man8
+
+ pushd tools/power/x86/x86_energy_perf_policy
+ make DESTDIR=%{BUILDROOT} install
+ popd
+
+ pushd tools/power/x86/turbostat
+ make DESTDIR=%{BUILDROOT} install
+ popd
+ fi
+
+ # tmon
+ pushd tools/thermal/tmon
+ make INSTALL_ROOT=%{BUILDROOT} install
+ popd
end
end
packages
template KERNEL
+ kernel_name = kernel
kernel_release = %{fullver}
summary = The Linux kernel %{kernel_release}.
- prerequires = module-init-tools
- provides = kernel
+ prerequires
+ /sbin/depmod
+ end
+
+ provides
+ kernel=%{kernel_release}
+ end
+
requires
dracut
+ grubby
linux-firmware
end
files
/boot/System.map-%{kernel_release}
+ /boot/dtb-%{kernel_release}
/boot/vmlinuz-%{kernel_release}
/boot/initramfs-%{kernel_release}.img
/etc/ld.so.conf.d/kernel-%{kernel_release}.conf
- /lib/modules/%{kernel_release}
+ /usr/lib/modules/%{kernel_release}
end
- script postin
- depmod -a %{kernel_release} || :
+ _posttrans
+ /sbin/new-kernel-pkg --package %{kernel_name} --mkinitrd --dracut --depmod --update %{kernel_release}
+ /sbin/new-kernel-pkg --package %{kernel_name} --rpmposttrans %{kernel_release}
end
script posttransin
- dracut --force /boot/initramfs-%{kernel_release}.img %{kernel_release}
+ %{_posttrans}
+ end
+
+ script posttransup
+ %{_posttrans}
+ end
+
+ script postin
+ /sbin/new-kernel-pkg --package %{kernel_name} --install %{kernel_release}
+ end
+
+ script postup
+ /sbin/new-kernel-pkg --package %{kernel_name} --install %{kernel_release}
+ end
+
+ script preun
+ /sbin/new-kernel-pkg --rminitrd --rmmoddep --remove %{kernel_release}
end
end
kernel release %{kernel_release}.
end
+ provides
+ kernel-devel = %{thisver}
+ end
+
filter_requires
perl>=[0-9]\:.*
end
files
- /lib/modules/%{kernel_release}/build
- /lib/modules/%{kernel_release}/source
+ /usr/lib/modules/%{kernel_release}/build
+ /usr/lib/modules/%{kernel_release}/source
/usr/src/kernels/%{kernel_release}
end
end
- package kernel
- template KERNEL
- end
+ if "%{build_kernel_default}" == "1"
+ if "%{DISTRO_ARCH}" == "armv7hl"
+ package kernel
+ template KERNEL
+
+ kernel_name = kernel
+ kernel_release = %{fullver}
+
+ # Replace the Exynos kernel.
+ obsoletes += kernel-exynos < %{kernel_release}
+ conflicts += kernel-exynos < %{kernel_release}
+
+ # Replace the OMAP kernel.
+ obsoletes += kernel-omap < %{kernel_release}
+ conflicts += kernel-omap < %{kernel_release}
+ end
+
+ package kernel-devel
+ template KERNELDEVEL
+
+ kernel_name = kernel
+ kernel_release = %{fullver}
- package kernel-devel
- template KERNELDEVEL
+ # Replace the Exynos kernel.
+ obsoletes += kernel-exynos-devel < %{kernel_release}
+ conflicts += kernel-exynos-devel < %{kernel_release}
+
+ # Replace the OMAP kernel.
+ obsoletes += kernel-omap-devel < %{kernel_release}
+ conflicts += kernel-omap-devel < %{kernel_release}
+ end
+
+ else
+ package kernel
+ template KERNEL
+
+ kernel_name = kernel
+ kernel_release = %{fullver}
+ end
+
+ package kernel-devel
+ template KERNELDEVEL
+
+ kernel_name = kernel
+ kernel_release = %{fullver}
+ end
+ end
end
- package kernel-PAE
- template KERNEL
+ if "%{build_kernel_legacy}" == "1"
+ package kernel-legacy
+ template KERNEL
- kernel_release = %{fullver}.PAE
+ kernel_name = kernel-legacy
+ kernel_release = %{fullver}.legacy
+ end
+
+ package kernel-legacy-devel
+ template KERNELDEVEL
+
+ kernel_name = kernel-legacy
+ kernel_release = %{fullver}.legacy
+ end
end
- package kernel-PAE-devel
- template KERNELDEVEL
+ if "%{build_kernel_lpae}" == "1"
+ package kernel-lpae
+ template KERNEL
+
+ kernel_name = kernel-lpae
+ kernel_release = %{fullver}.lpae
+ end
- kernel_release = %{fullver}.PAE
+ package kernel-lpae-devel
+ template KERNELDEVEL
+
+ kernel_name = kernel-lpae
+ kernel_release = %{fullver}.lpae
+ end
end
-
+
package kernel-headers
summary = Header files of the kernel release %{fullver}.
desciption = %{summary}
end
end
- #package kernel-tools
- # summary = Assortment of tools for the Linux kernel.
- # description = %{summary}
- #
- # files
- # /usr/bin
- # /usr/lib
- # end
- #end
+ package kernel-tools
+ summary = Assortment of tools for the Linux kernel.
+ description = %{summary}
+
+ filter_requires
+ perl>=[0-9]\:.*
+ end
+
+ files
+ /
+ !/boot
+ !/usr/include
+ !/usr/lib/modules
+ !/usr/src
+ !/usr/src/debug
+ !/usr/lib/debug
+ end
+ end
end