On Thu, Jun 25, 2009 at 07:06:15PM +0100, Will Newton wrote: > On Thu, Jun 25, 2009 at 6:13 PM, Greg KH<greg@xxxxxxxxx> wrote: > > On Thu, Jun 25, 2009 at 05:57:51PM +0100, Will Newton wrote: > >> On Thu, Jun 25, 2009 at 5:28 PM, Greg KH<greg@xxxxxxxxx> wrote: > >> > On Thu, Jun 25, 2009 at 04:53:07PM +0100, Will Newton wrote: > >> >> On Thu, Jun 25, 2009 at 4:18 PM, Greg KH<greg@xxxxxxxxx> wrote: > >> >> > On Thu, Jun 25, 2009 at 11:36:29AM +0100, Will Newton wrote: > >> >> >> Hi all, > >> >> >> > >> >> >> I'm trying to get the libertas driver working on an embedded > >> >> >> development board and I've run into what looks like a sysfs problem. > >> >> >> Although I'm actually using the BusyBox mdev hotplug helper rather > >> >> >> than udev, I hope this is the right list to be asking this question. > >> >> > > >> >> > For busybox questions, not really, but we reserve the right to poke fun > >> >> > at you for using mdev :) > >> >> > > >> >> >> What appears to be happening is I get my initramfs extracted, so I > >> >> >> have access to the various necessary files including the hotplug > >> >> >> helper and my firmware files. This step is taken care of by the rootfs > >> >> >> initcall level. Then the driver initcalls are run, including the > >> >> >> libertas setup routines, which call request_firmware. request_firmware > >> >> >> fires off a uevent and calls the hotplug helper. The hotplug helper > >> >> >> looks for the /sys/class/firmware entry for the libertas device, but > >> >> >> it doesn't find one because I don't appear to have a mounted sysfs on > >> >> >> the /sys mountpoint. > >> >> >> > >> >> >> So my question is: who should be mounting sysfs here? init will mount > >> >> >> sysfs, but is run much later than the device initcalls. > >> >> > > >> >> > You need to mount sysfs as one of the first things to have happen. Look > >> >> > at your distro's startup scripts as an example of this. > >> >> > >> >> Yes, I want my sysfs mounted as early as possible, but userspace (via > >> >> /sbin/init) does not get a chance to do this until after the device > >> >> initcalls have been run. I'm interested to know if there's a standard > >> >> way to get sysfs mounted before /sbin/init is run. > >> > > >> > There isn't. > >> > >> Ok, so we cannot expect sysfs to be mounted on /sys before /sbin/init > >> has been run? > > > > How would that possibly happen? > > > >> What do we do with callers of request_firmware prior to /sbin/init > >> running? > > > > They would fail, as no userspace filesystems would be mounted yet to > > provide the firmware in the firstplace. > > My initramfs has the firmware in it. I thought this was one of the > reasons one might use an initramfs, to load drivers and firmware for > your root device e.g. network devices for nfs root. Great, then mount /sys in your initramfs, and it should be all fine. Have you tried that? > > Or just replay the uevents when init starts up, after you have mounted > > sysfs, and other filesystems, so that the firmware can be properly > > loaded. That is what almost all distros do. > > Can udev help with this? Have the distros got a standard way of doing > this? It sounds slightly complex... Yes, udev provides a standard way to do this, using 'udevadm trigger'. Again, look at your desktop's distro's startup scripts for an example of this. thanks, greg k-h -- To unsubscribe from this list: send the line "unsubscribe linux-hotplug" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html