How to build and install custom linux kernel for QNAP Server based on ARM Kirkwood platform?

Recently I had to install a custom kernel for my Home server based on ARM kirkwood platform powered by Debian GNU/Linux. Here I have documented this for my future reference and also for your reference.

Hardware System

QNAP Home Server TS-110

Marvell Kirkwood platform based on ARM

Debian GNU/Linux 6.0 (Squeeze) based on 2.6.32 kernel

Step-1: Download the kernel source and dependencies for building

# apt-get install linux-source-2.6.32 build-essential lzma libncurses-dev

Step-2: Building the kernel

# cd /usr/src

# tar jxvf linux-source-2.6.32.tar.bz2

# cd linux-source-2.6.32/

Here you are free to apply your patches to kernel before proceeding with building.

# make oldconfig

The above command derives configuration running kernel to the new kernel build system.

# make menuconfig

In the above step, follow the General Setup -> () Local version – append to kernel release, and enter a version (alphanumeric) to differentiate your custom kernel from stock kernel. Ensure that this ends with your platform. In my case I have entered -blackgod-kirkwood. The platform name suffix is essential to ensure flashing of kernel.

# make

Step-3: Installing the kernel

The next step installs the modules built in /lib/modules.

# make modules_install

In the next step, we are copying the kernel image to /boot directory.

# cat /usr/src/linux-source-2.6.32/arch/arm/boot/zImage > /boot/vmlinuz-2.6.32-blackgod-kirkwood

The step creates initial ram disk for this new kernel.

# update-initramfs -c -k 2.6.32-blackgod-kirkwood

Now you need to create symbolic links to your new kernel and initramfs in /boot. Here is mine.

# cd /boot

# ln -s initrd.img-2.6.32-blackgod-kirkwood initrd.img

# ln -s vmlinuz-2.6.32-blackgod-kirkwood vmlinuz

Now it is time to flash both kernel and initial ram disk in flash memory, so that your machine can boot with new kernel.

# flash-kernel

If your kernel version does not end with your platform (in my case it is kirkwood), you may end up with the following message.

Kernel /boot/vmlinuz-2.6.32-blackgod does not match your subarchitecture 
kirkwood, therefore not writing it to flash. 

# reboot

Once booted you should have landed in new kernel.

Here is mine.

# uname -a
Linux debian 2.6.32-blackgod-kirkwood #1 Mon Apr 16 06:20:40 IST 2012 armv5tel GNU/Linux


Share this post


  1. Hi, thanks for writing this. How long did it take to compile the kernel and modules on your machine?

Leave a Reply

Your email address will not be published. Required fields are marked *