See here (chapter 7):
http://www.kroah.com/lkn/
To save time, I start with the generic kernel and leave things as modules that I probably won't need, or turn them off if I know I won't need them. Modules that are needed for accessing the HDD (ahci or sata and filesystem) should be built-in or you will need to use an initrd.
Some tips from me:
1) search the output of 'dmesg' for the following:
not
found
no
error
take action accordingly (disabling modules that might slow things down because they probe for things that don't exist and may actually cause instability)
2) Check 'lsmod' on a working system to see what modules you will likely need. You can also use the script found in the above reference.
3) Check 'lspci -vv' for PCI hardware that you have, and what modules they are using.