L2200: 2.6 kernel configuration

The IBM N2200 is rather kinky when it comes to newer Linux kernels. The one I’ve had most success with is 2.6.24, so that’s the one I’ll describe in this post.

First of all, kernel configuration. (I’ll fill this in later)

And now it’s time for patching the kernel. (I’ll fix .diff patches later) Graphics are powered by the AMD Geode GX1 chip but from my experience it won’t (always) work out of the box without setting another default resolution probe. This might depend on BIOS versions, but I’ll investigate that further on. So edit the GX1 framebuffer driver like so the 640×480 is 1024×768 at the static definitions in drivers/video/geode/gx1fb_core.c

static char mode_option[32] = “1024×768-16@60″;
static int crt_option = 1;
static char panel_option[32] = “”;

Next up, root device detection. Apparently with SCSI emulation (at least), the CF card won’t be identified correctly. Or so it seems. Anyhow, I’ve personally implemented the following fallback in init/do_mounts.c on line 469 (just above mount_root();):

if (ROOT_DEV == 0)


Now just make and get a cup of coffee.

After compiling this, you will have the kernel arch/x86/boot/compressed/vmlinux (no, not bzImage or anything like that). Of course the troubles aren’t over yet! The IBM N2200 won’t be able to read this due to the ELF header count specified as 2, something I think started showing up with Linux 2.6.

Even though I prefer not editing binaries with a hex editor blindly, it seems to be the only working solution for IBM’s buggy BIOS to my (limited) knowledge. So fire up your preferred hexeditor (like hexedit) and set position 0×2C to the hexadecimal value 01 instead of 02.

Now put your patched, hexedited kernel in the root of your previously debootstrapped system. Make sure to name it kernel.2×00. Pray that it will work.