I got myself one of the fancy shmancy netbooks. Due to a habit and some hardware issues I needed to compile a kernel. The problem here though is that it takes for ever to build a kernel on one of these things. No sweat I'll just build it on my desktop, it'll only take 5-10 minutes. But of course there is a catch. My desktop is 64bit and this new machine is an Atom CPU which only does 32bit.
The process for compiling a 32bit kernel on a 64bit machine is probably a lot easier if you don't compile it the Debian way. But this is not something I want to do, I like installing the kernels through the package manager and doing this type of cross compile using make-kpkg is not trivial. There are plenty of forum and email threads about people recommending to use chroot or virtual machines for this task, but that is such a chore to set up. So here is my recipe for cross compiling 32bit kernel on 64bit host without chroot / vm, the-debian-way.
- Install 32bit tools (ia32-libs, lib32gcc1, lib32ncurses5, libc6-i386, util-linux, maybe some other ones)
- Download & unpack your kernel sources
- run "
linux32 make menuconfig" and configure your kernel for your new machine
- clean your build dirs "
make-kpkg clean --cross-compile - --arch=i386" (only needed on consecutive compiles)
- compile your kernel "
nice -n 100 fakeroot linux32 make-kpkg --cross-compile - --arch=i386 --revision=05test kernel_image" for faster compilation on multi-CPU machines run "
export CONCURRENCY_LEVEL=$((cat /proc/cpuinfo |grep "^processor"|wc -l
- At this point you have a 32bit kernel inside a package labeled for 64bit arch. We need to fix this, run "
fakeroot deb-reversion -k bash ../linux-image-18.104.22.168_05test_amd64.deb". Open the file
vim/emacsand change "
Architecture: amd64" to "
Architecture: i386" exit the bash process with ctrl+d
- That's it, now just transfer the re-generated deb to destination machine and install it.