please try the attached patch, should load ide-generic even if udev didn't yet bring it up: patch -p1 /usr/share/initramfs-tools/scripts/init-premount/udev < ide-generic.udev.patch
for this trial please remove any ide-generic or ide-disk out of /etc/mkinitramfs/modules, then update-initramfs -u and reboot, if it doesn't work out you still need to modprobe manually ide-generic and disc.. thanks for your feedback. -- maks
--- udev-0.076/extra/initramfs.premount 2005-12-23 12:36:04.000000000 +0100 +++ udev-0.076-ma/extra/initramfs.premount 2005-12-23 12:35:52.000000000 +0100 @@ -21,6 +21,38 @@ mkdir /dev/.udev/ /dev/.udev/db/ /dev/.u udevd --daemon udevsynthesize + +# Our job now is to make the block device for the root filesystem available. +# This is actually a bit trickier than it first appears because we first need +# to figure out which driver needs it, and to do that, we need to know what +# type of bus it's on. Fortunately we have all that information, this still +# feels like an ungodly hack though. +. /conf/initramfs.conf +. /scripts/functions +case "${BOOT}" in + local) + case "${ROOT}" in + /dev/root) + # An interesting case, this root device was specified as a + # major/minor pair. Fortunately we have that information + case "${major}" in + 3|22|33|34|56|57|88|89|90|91) + # traditional ide + root_type=ide + ;; + 80|81|82|83|84|85|86|87) + # ide on i2o + root_type=ide + ;; + esac + ;; + /dev/hd*) + # Ahh, plain-old traditional ide + root_type=ide + ;; + esac +esac + while [ -d /dev/.udev/queue/ ]; do sleep 1 udevd_timeout=$(($udevd_timeout - 1)) @@ -29,5 +61,13 @@ while [ -d /dev/.udev/queue/ ]; do fi done +# If we're booting from IDE, we may need to load ide-generic. +case "${root_type}" in + ide) + if [ ! -e "${ROOT}" -o "${ROOT}" = "/dev/root" ]; then + modprobe -q ide-generic + fi +esac + # Leave udev running to process events that come in out-of-band (like USB # connections)