Matthew Garrett wrote:
This is something of a guess, but:
Building drivers into the kernel doesn't guarantee the order that they'll be initialised in, and the kernel won't block on enumerating the USB bus. If you have the camera module built-in, then it may end up altering timing in such a way that the USB device doesn't get bound until after the kernel has done IP config. The standard way around this is to have a ramdisk that loops until the expected devices are found.
OK, I've gone back to using and ramdisk for rootfs and it works! - thanks for the advice. It makes using nfsroot a bit more difficult as I'll have to create a ramdisk image first and then pivot_root to nfs I guess. In the long term, I don't see this as a problem as I'll put the rootfs into flash.
That means that I've just got to tidy the camera driver up a bit and (finally!) I'll post a patch.
Matt