[ Please CC replies to me - thanks! ]I tried this with 2.6.6 and modified it a bit, but to no avail.
Hi,
We're toying around with the idea of booting an embedded system off of USB flash (pros, cons, and advice about this would be appreciated, by the way), and I had a look at several of the existing patches to do this without going through the process of creating an initrd image. That adds complexity and time to the boot process that we would prefer to avoid, although it appears that the kernel folks in the first thread cited are in favor of initrd....
http://www.uwsg.iu.edu/hypermail/linux/kernel/0301.3/1182.html
This mentions a couple of patches, both the "keep looping until it works" one, which I couldn't get working with 2.6.6, and Willy Tarreu's "wait a given period of time before continuing" patch:
http://www.uwsg.iu.edu/hypermail/linux/kernel/0405.0/0224.html
I don't think either of those approaches are particularly elegant... although I'm sure my own efforts are good for a snort as well.
In genhd.c I wake up a waitqueue when the disk comes on line. The init process waits on this before going on with prepare_namespace(). Ideally, this would look and make sure it's the right disk, that selected for the root fs:-) Not being very familiar with the 'lay of the land' in the kernel, I declared the wait queue as a global in genhd.c. The thing I don't like about this approach is that it builds a connection between two bits of the kernel that seem separate... maybe (ok, quite probably) there is a better/cleaner way of doing this?
Patch is at: http://dedasys.com/freesoftware/files/usb-wakeup.patch