# openmamba kernel specfile for embedded kernels # Copyright (C) 2011-2013 by Silvan Calarco # # To build a specific target: # # rpmbuild -ba --define="KERNEL_TARGET " kernel.spec # # To cross-compile: # rpmbuild -ba kernel-cubox.spec --target arm --define="cross_target_cpu arm" # # To cross-compile using an alternative compiler: # rpmbuild -ba kernel-cubox.spec --target arm --define="cross_target_cpu arm" \ # --define="_target_platform arm-none-linux-gnueabi" # # Source package created with: # https://github.com/rabeeh # git archive --format=tar --prefix=kernel-cubox-3.6.9.git20131108/ HEAD | xz > /usr/src/RPM/SOURCES/kernel-cubox-3.6.9.git20131108.tar.xz # %define kernel_ver %(echo %version | cut -d. -f1-3) %define KERNEL_TARGET cubox %if "%{_target_cpu}" == "i586" %define KIMAGE arch/i386/boot/bzImage %define KIMAGE_DEST vmlinuz %define DEPMOD /sbin/depmod %endif %if "%{_target_cpu}" == "arm" %define KIMAGE arch/arm/boot/uImage %define KIMAGE_DEST uImage %define DEPMOD /sbin/depmod %endif %if "%{_target_cpu}" == "x86_64" %if "%{KERNEL_TARGET}" == "mamba-xen" %define KIMAGE arch/x86_64/boot/vmlinuz %define KIMAGE_DEST vmlinuz %define DEPMOD /sbin/depmod %else %define KIMAGE arch/x86_64/boot/bzImage %define KIMAGE_DEST vmlinuz %define DEPMOD /sbin/depmod %endif %endif %if "%{_target_cpu}" == "ppc" %define KIMAGE vmlinux %define KIMAGE_DEST vmlinux %define DEPMOD /bin/true %endif %if "%{_target_cpu}" == "i586" %define target_cpu i386 %else %define target_cpu %{_target_cpu} %endif # disable internal dependency generator for scriptlets %define _use_internal_dependency_generator 1 Name: kernel-cubox Version: 3.6.9.git20131108 Release: 5mamba Summary: The Linux Kernel, the operating system core itself for the Cubox board Group: System/Kernel and Hardware Vendor: openmamba Distribution: openmamba Packager: Silvan Calarco URL: http://www.solid-run.com/mw/index.php?title=Building_Linux Source0: kernel-%{KERNEL_TARGET}-%{version}.tar.xz Source20: %{name}-logo.png Source100: %{name}-%{kernel_ver}-arm-config License: GPL ## AUTOBUILDREQ-BEGIN ## AUTOBUILDREQ-END BuildRequires: /bin/bash /bin/sh /usr/bin/perl BuildRequires: kmod BuildRequires: u-boot-tools Provides: kernel BuildRoot: %{_tmppath}/%{name}-build %description The Linux Kernel, the operating system core itself for the Cubox board. 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. 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 %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 Provides: kernelheaders %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 %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 modules Group: System/Kernel and Hardware Summary: The kernel base modules normally used by the device Requires: kernel-%{KERNEL_TARGET} == %{version}-%{release} Provides: kernelmodules %description modules The kernel-modules package contains the base modules normally used by the device %package firmware Group: System/Kernel and Hardware Summary: Firmware files used by the Linux Kernel Requires: kernel-%{KERNEL_TARGET} == %{version}-%{release} Provides: kernelfirmware = %{version} Provides: linux_firmware %description firmware Firmware files used by the Linux Kernel. %prep %setup -q #-D -T #:<< ___EOF %if "%{?KERNEL_TARGET}" == "" echo "No target specified, aborting." exit 1 %else echo "I'm going to build a %{KERNEL_TARGET} kernel..." %endif # # patch and configure STANDARD kernel # make mrproper # create build dirs for each kernel # and copy proper configuration %if %{_target_cpu} == arm case %{?KERNEL_TARGET} in cubox) kernel_cfg=%{SOURCE100} ;; esac %endif cp $kernel_cfg ./.config cp Makefile Makefile.orig sed -i "s/\(EXTRAVERSION =.*\)/\1-%{?KERNEL_TARGET}/" Makefile # add custom logo pngtopnm %{SOURCE20} | ppmquant -plain 224 > drivers/video/logo/logo_linux_clut224.ppm %build #:<< ___EOF # # build kernel for given target # ARCH=%{target_cpu} make oldconfig ARCH=%{target_cpu} make \ CROSS_COMPILE=%{_target_platform}- \ %{?_smp_mflags} \ all ARCH=%{target_cpu} make \ CROSS_COMPILE=%{_target_platform}- \ %{?_smp_mflags} \ uImage %install [ "%{buildroot}" != / ] && rm -rf "%{buildroot}" # create system dirs in install environment install -d %{buildroot}{/usr/src/,/boot,%{_initrddir},/lib/modules,/lib/firmware} 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 ) cp %{KIMAGE} %{buildroot}/boot/%{KIMAGE_DEST}-%{kernel_ver}-%{?KERNEL_TARGET} 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}-%{version} %{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} == arm case %{?KERNEL_TARGET} in cubox) kernel_cfg=%{SOURCE100} ;; esac %endif cp $kernel_cfg %{buildroot}/usr/src/linux-%{kernel_ver}-%{?KERNEL_TARGET}/.config cp %{_builddir}/%{name}-%{version}/Module.symvers %{buildroot}/usr/src/linux-%{kernel_ver}-%{?KERNEL_TARGET} ARCH=%{target_cpu} make oldconfig #cp Makefile Makefile.orig #sed -i "s/\(EXTRAVERSION =.*\)/\1-%{?KERNEL_TARGET}/" Makefile #%if "%{_target_platform}" == "%{_build}" ARCH=%{target_cpu} make \ HOSTCC=%{_target_platform}-gcc \ CROSS_COMPILE=%{_target_platform}- \ prepare scripts oldconfig #%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 # 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="ppc" ;; esac find $splitdirs -type f -name *.h -exec \ echo "%{_prefix}/src/linux-%{kernel_ver}-%{?KERNEL_TARGET}/"{} >> \ %{_builddir}/%{name}-%{version}/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}-%{version}/kernel-source.files \; %else touch %{_builddir}/%{name}-%{version}/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}-%{version}/kernel-source.files %else rm -rf arch/$i %endif done echo "%{_prefix}/src/linux-%{kernel_ver}-%{?KERNEL_TARGET}/arch/$headers_arch" >> \ %{_builddir}/%{name}-%{version}/kernel-headers.files # install sanitised headers used by glibc ARCH=%{target_cpu} make headers_install \ HOSTCC=%{_target_platform}-gcc \ CROSS_COMPILE=%{_target_platform}- \ INSTALL_HDR_PATH=%{buildroot}%{_prefix}/src/linux-%{kernel_ver}-%{KERNEL_TARGET}/usr rm -f %{buildroot}/usr/src/linux-%{kernel_ver}-%{?KERNEL_TARGET}/.gitignore rm -f %{buildroot}/usr/src/linux-%{kernel_ver}-%{?KERNEL_TARGET}/.mailmap rm -f %{buildroot}/usr/src/linux-%{kernel_ver}-%{?KERNEL_TARGET}/arch/.gitignore rm -f %{buildroot}/usr/src/linux-%{kernel_ver}-%{?KERNEL_TARGET}/usr/.gitignore #install %{SOURCE1} %{buildroot}/lib/firmware/brcm/bcm4329-fullmac-4.txt cat > %{buildroot}/boot/%{KIMAGE_DEST}-%{kernel_ver}-%{?KERNEL_TARGET}-boot.txt << _EOF setenv bootargs 'console=ttyS0,115200n8 console=tty0 vmalloc=384M root=/dev/mmcblk0p2 video=dovefb:lcd0:1024x768-32@60-edid clcd.lcd0_enable=1 clcd.lcd1_enable=0 rw rootwait' echo ======== Loading kernel ======== ext2load mmc 0:1 0x00200000 /%{KIMAGE_DEST}-%{kernel_ver}-%{?KERNEL_TARGET} echo ======== Booting kernel ======== bootm _EOF mkimage -A arm -O linux -T script -C none -n "u-boot commands" \ -d %{buildroot}/boot/%{KIMAGE_DEST}-%{kernel_ver}-%{?KERNEL_TARGET}-boot.txt \ %{buildroot}/boot/%{KIMAGE_DEST}-%{kernel_ver}-%{?KERNEL_TARGET}-boot.scr %clean [ "%{buildroot}" != / ] && rm -rf "%{buildroot}" %post # 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 # /sbin/mkinitramfs -f /boot/initramfs-%{kernel_ver}-%{?KERNEL_TARGET}.img %{kernel_ver}-%{?KERNEL_TARGET} 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 headers # touch file so it results up-to-date on make touch %{_prefix}/src/linux-%{kernel_ver}-%{?KERNEL_TARGET}/include/config/MARKER exit 0 %post modules # 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 %files %defattr (-, root, root) /boot/System.map-%{kernel_ver}-%{?KERNEL_TARGET} /boot/%{KIMAGE_DEST}-%{kernel_ver}-%{?KERNEL_TARGET} /boot/%{KIMAGE_DEST}-%{kernel_ver}-%{?KERNEL_TARGET}-boot.txt /boot/%{KIMAGE_DEST}-%{kernel_ver}-%{?KERNEL_TARGET}-boot.scr %files source -f kernel-source.files %defattr(-,root,root) /usr/src/linux-%{kernel_ver}-%{?KERNEL_TARGET}/Documentation /usr/src/linux-%{kernel_ver}-%{?KERNEL_TARGET}/init /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/Kconfig /usr/src/linux-%{kernel_ver}-%{?KERNEL_TARGET}/usr/Makefile /usr/src/linux-%{kernel_ver}-%{?KERNEL_TARGET}/tools /usr/src/linux-%{kernel_ver}-%{?KERNEL_TARGET}/.missing-syscalls.d /usr/src/linux-%{kernel_ver}-%{?KERNEL_TARGET}/Kconfig %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}/include /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 modules %defattr (-, root, root) %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/* %files firmware %defattr (-, root, root) /lib/firmware/* %changelog * Thu Dec 25 2014 Silvan Calarco 3.6.9.git20131108-5mamba - provide default -boot.txt configuration for uboot * Thu Nov 21 2013 Silvan Calarco 3.6.9.git20131108-4mamba - ipv6 firewall support (required by ufw) and more complete networking support * Mon Nov 11 2013 Silvan Calarco 3.6.9.git20131108-3mamba - added firewall modules * Sun Nov 10 2013 Silvan Calarco 3.6.9.git20131108-2mamba - fix uImage (was a zimage) * Fri Nov 08 2013 Silvan Calarco 3.6.9.git20131108-1mamba - embedded kernel for cubox platform