Heres everything that any user wants to or needs to know about making a custom kernel in Debian using the dpkg/apt-get tools
Also check out the other docs on the website. It's a combination of newbie centric and Debian centric. Answered a lot of questions about debian I had myself.
edit:
I am almost never quite satisfied with the kernel that comes with any distro, plus I usually need the newest sources to get the best drivers for my hardware.
Also check out dselect.
Initrd is a root filing system that is temperarally used at boot time.
What it does is that the boot loader starts up, loads the kernel and initrd into memory. The initrd is completely ram-based filing system that is used to load modules and do some hardware detection (depends on how it's set up) in order to prepare the kernel to begin using the real root.
For instance you have scsi device that needs a module, or you have a remote NFS root and need to load a networking module in order to access. So then it loads it into memory to be used by the kernel.
After the initrd is finished with loading the nessicary drivers, it mounts the real root file system read only, then they kernel switches to the new "real" root, and then unmounts the initrd file system, then continues on just like any normal non-initrd boot up.
Very usefull for creating a custom kernel that will work on the widest range of hardware possible, but not be gigantic and unstable. Most distros use them nowadays. I've created a couple myself for different weird things....
(lilo doesn't realy care were the initrd or vmlinuz realy is.. just as long as it can find them to load up into the MBR, grub is a bit more picky.)