====== Debian Kernel compilation and installation for Sun/Cobalt RaQ ====== ===== Prerequisites ===== Start off by installing the prerequisites for kernel-compilation: <code> apt-get install build-essential bzip2 \ kernel-package gcc libncurses5 libncurses5-dev \ bin86 gawk ncurses-dev initramfs-tools \ zlib1g zlib1g-dev binutils </code> ===== Download patch ===== Now we select, and download the cobalt patch for the Linux kernel. I like to do this _before_ downloading the kernel itself, as it allows me to see what patches exist, and select the kernel-version accordingly. I have found the -jeffw-patches to be the ones that wotk, while the -tw patches from Tim&Tina usually fail with a hang while booting. So, look over http://files.parvi.org/gentoo-stuff/patches/cobalt-kernel-2.6.x/ and find a patch for the kernel-version you wish to use((Keep in mind that Lenny uses 2.6.26 as its “native” kernel)). <code> wget http://files.parvi.org/gentoo-stuff/patches/cobalt-kernel-2.6.x/linux-cobalt-2.6.26.5-20081001.jeffw.patch </code> ===== Download kernel ===== With the patch selected, and downloaded, it is time to download an appropriate kernel-source. ((While this may be done using apt-get, I prefer downloading it from the kernel.org source-tree)). Pick the newest subpatch-release of the patchlevel kernel you selected. E.g. if you chose the 2.6.26 kernel patch, the latest subpatch is as I write this 2.6.36.8 <code> wget http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.26.8.tar.bz2 </code> ===== Unpack and apply patch ===== Unpack the kernel under /usr/src/ and move it to an appropriate name to identify that you are patching this kernel. After unpacking, apply the patch. <code> cd /usr/src/ tar jxvf ~/linux-2.6.26.8.tar.bz2 mv linux-2.6.26.8 linux-2.6.26.8-cobalt cd linux-2.6.26.8-cobalt sed -e '/^EXTRAVERSION/s/$/-cobalt/' -i Makefile patch -p1 < ~/linux-cobalt-2.6.26.5-20081001.jeffw.patch </code> ===== Download and apply base config ===== Next, fetch the “base-config” for the jeffw-patch. I silently ignore that Debian kernel compile recommends that you do a base in the Debian kernel config, simple because it a) includes support for a lot of hardware that the RaQ does not have, and b) the RaQ has a limitation on how large the kernel can be2). If I recall correctly, the bzip2-compressed kernel cannot exceed 1800KBytes in size. Here, you __**really**__ should select the appropriate config for your hardware. * The RaQ3 and RaQ4, as well as most Intel Cubes are Generation III machines. * The RaQ550 is a Generation V machine. <code> # Generation III wget http://files.parvi.org/gentoo-stuff/patches/cobalt-kernel-2.6.x/configs/gen_iii-minimal.config -O .config # Generation V wget http://files.parvi.org/gentoo-stuff/patches/cobalt-kernel-2.6.x/configs/gen_v-minimal.config -O .config </code> ===== Configure the kernel ===== Now, we do a standard Debian kernel compilation based on the “oldconfig” that we just downloaded. We include “menuconfig” so that we can look over the config and check that we havent forgotten anything we should have included. Adjust the revision to suit your needs: <code> make oldconfig make menuconfig </code> ===== Debian-compile the kernel ===== Followin the standard procedure of kernel-compilation is an option, but not a recommended one. You really should run the Debian tools for kernel compilation, as this prepares an initrd for you, does housekeeping, in addition to creating .deb packages that you can use on later installs.. <code> make-kpkg clean make-kpkg --initrd --revision='1' kernel_image kernel_headers modules_image </code> ===== Install the new kernel ===== First, install the kernel at you normally would a Debian kernel package: <code> cd /usr/src/linux dpkg -i linux-image-2.6.26.8-cobalt_1_i386.deb dpkg -i linux-headers-2.6.26.8-cobalt_1_i386.deb </code> Next, copy the compiled kernel from the kernel source tree to /boot, strip it, and bzip2 it. This is because the RaQ does not use Grub, Lilo or such, but loads the kernel off a predetermined location, namely /boot/vmlinux.bz2. You also need to link up the initrd and the System.map <code> cd /boot cp /usr/src/linux-2.6.26.8-cobalt/vmlinux . strip vmlinux bzip2 -c vmlinux > vmlinux.bz2 ln -s System.map-2.6.26.8-cobalt System.map ln -s initrd.img-2.6.26.8-cobalt initrd.img </code>