XenomaiKernelPackageFromTarball - rmu75/linuxcnc-wiki GitHub Wiki
This method is good for one-off kernel packages. It takes only a few minutes to setup the compile, including downloads.
This recipe was developed on Ubuntu Precise, but may work for other versions of Debian-like distros. It is known to work for x86 architecture. Other architectures will require small changes to work. Please fix these instructions if you succeed in building for other architectures!
The most difficult part of building kernel packages is finding a working kernel config. This recipe uses stock kernel configs from the Ubuntu kernel package, and adds a minimal and well-documented set of changes to configure the Xenomai system. The intent is to leverage the expertise of the Ubuntu and Debian folks, whose kernels run on an enormous variety of hardware, while keeping the Xenomai-specific changes separate and documented to simplify updates. The kernel configs can be found in the author's github repo: https://github.com/zultron/kernel-tools
You should have already built and installed the xenomai tools package as described here: XenomaiUserlandPackage <KARnote: should this be a link to XenomaiRuntimePackage? 20130727>
The following may not be enough; if something is missing, git-buildpackage will print a list.
# Package build prereqs:
sudo apt-get install devscripts debhelper dh-kpatches findutils build-essential
# Kernel build prereqs:
sudo apt-get install kernel-package libncurses-dev fakeroot zlib1g-dev
sudo apt-get install crash kexec-tools makedumpfile kernel-wedge
Adjust the following values according to your needs.
These defaults specify this kernel tarball as a starting point: http://www.kernel.org/pub/linux/kernel/v3.x/linux-3.5.7.tar.bz2
The ipipe patch will be taken from here, installed from the xenomai package: /usr/src/kernel-patches/diffs/xenomai/ipipe-core-3.5.7-x86-3.patch.gz
# Ubuntu kernel package version to use; must match the ipipe-core
# patch's kernel version; see /usr/src/kernel-patches/diffs/xenomai
KVERSION=3.5.7
IPIPE_VERSION=3.5.7-x86-3
# Kernel package release; this should be bumped with each new package release,
# and reset with each new upstream kernel version
KERNEL_PKG_RELEASE=0
# The Ubuntu release for the kernel package
UBUNTU_RELEASE=precise
# The CPU arch; either amd64 or i386
DEB_ARCH=i386
# Version of installed xenomai package; try
# dpkg -l linux-patch-xenomai
XENO_VERSION=2.6.2.1
The rest should be cut and paste, at least until bit rot sets in.
# The arch that Debian calls amd64, everyone else calls x86_64
test $DEB_ARCH = amd64 && CPU_ARCH=x86_64 || CPU_ARCH=i686
# Download and unpack kernel tarball
wget <http://www.kernel.org/pub/linux/kernel/v3.x/linux-$KVERSION.tar.bz2>
tar -jxf linux-$KVERSION.tar.bz2 && cd linux-$KVERSION
# Apply the xenomai ipipe patch
gzip -cd \
/usr/src/kernel-patches/diffs/xenomai/ipipe-core-$IPIPE_VERSION.patch.gz | \
patch -p1
# Copy the kernel config
wget <https://raw.github.com/zultron/kernel-tools/master/configs/$UBUNTU_RELEASE-$KVERSION/config.$DEB_ARCH>
wget <https://raw.github.com/zultron/kernel-tools/master/configs/config-$KVERSION-xenomai-$CPU_ARCH>
cat config.$DEB_ARCH config-$KVERSION-xenomai-$CPU_ARCH > .config
# Clean up .config. This may issue some warnings, but if it prompts for any unset variables,
# bit rot has begun to set in.
make ARCH=$CPU_ARCH oldconfig
# Build the kernel packages with the kernel_image and
# kernel_headers build targets
make-kpkg clean
CONCURRENCY_LEVEL=`getconf _NPROCESSORS_ONLN` fakeroot \
make-kpkg --initrd --append-to-version=-xenomai-$XENO_VERSION \
--revision $KERNEL_PKG_RELEASE kernel_image kernel_headers
Other targets that may be used with make-kpkg:
- buildpackage --uc --us: build all packages (don't sign with gpg)
- kernel_source: build source package
Other arguments for make-kpkg:
- --arch foo --cross_compile -: set arch when cross-compiling; replace foo with one of i386 or amd64 (untested)
If the build was successful, the packages will be in the parent directory.
cd ..
sudo dpkg -i *.deb