The main trick is to only make ONE target on the command line. i.e. don't try and do this make -j6 CC=distcc all modules_install or else the build will get screwed up and the whole thing will get remade each time.
make -j6 CC=distcc all make modules_install INSTALL_MOD_PATH=~/tmp
To update the .config file with questions for new options do a make oldconfig
To output build files to another directory (so you don't mix source and object code) do make O=outputdir all
To make files in just one source code directory do make dir. To make the modules in a directory and link them do make M=dir. Remember to put a trailing slash after the directory name.
NB The above two may require you to have built your config etc first.
To enable extra error checks when compiling do make EXTRA_CFLAGS=-W.
A script to copy a new LinuxKernel to remote machines:
#! /bin/bash # syntax m machine_num directory version H=/home/ian SRC=$H/linuxsrc/$2 VER=$3 rm $H/tmp/lib/modules/$VER/build rm $H/tmp/lib/modules/$VER/source rsync $SRC/System.map root@jandi$1:/boot/System.map-$VER rsync $SRC/arch/i386/boot/bzImage root@jandi$1:/boot/vmlinuz-$VER rsync $SRC/vmlinux root@jandi$1:/boot/vmlinux-$VER rsync -av $H/tmp/lib/modules/$VER root@jandi$1:/lib/modules
It has also been suggested to use kgdb with qemu and/or kgdboe to help with debugging.