There are a number of common causes for this problem. All of them boil down to the fact that the kernel does not have all necessary the drivers in place to mount your root filesystem. 9 out of 10 times, one of the following pieces is missing:
If your root filesystem is ext3, make sure ext3 is loaded into the kernel by the time your root filesystem is mounted. You can do this by making sure that ext3 is compiled into the kernel CONFIG_EXT3_FS=y. Alternatively, compile ext3 as a module and make sure it gets loaded in your initrd.
In some rare cases, your kernel is missing the correct partition table scanning code, or there was a problem reading the partition table from disk (medium error, ...). Look in the console output for a line like sda: sda1 sda2 < sda5 sda6 sda7 sda8 sda9 >. That comes from the partition table scanning code. If that line does not have any partitions (sda[0-9]+) after the disk (sda:), then there was a problem reading the table.
A number of distributions install the root filesystem into a Logical Volume by default, and not on a normal disk partition. In order to boot to a root filesystem on LVM, you need to have an initrd that loads the necessary drivers and configures the LVM subsystem. The script /sbin/mkinitrd from your distribution will do this for you.