Preferred module

Dougal raised the problem of rt2500usb and rt73usb, and the lack of any Udev rule capability to adequately deal with choosing the correct one.

The problem occurs on the Classmate laptop, where rt2500usb.ko an rt73usb.ko are both detected as eligible for the wireless network interface. If 'modinfo' is executed on each of these, and the 'alias' lines examined, it can be seen that at least two are the same.

Of course, Puppy does have a blacklist capability (see the BootManager) but that does require some knowledge on the part of the user, to know that rt2500usb needs to be blacklisted to allow only rt73usb to load.

Instead, I have implemented a 'PREFLIST', which is in /etc/rc.d/MODULESCONFIG. Here is what is currently in there:

#PREFLIST: sometimes there are two hits, that is, two modules match the same
#'modalias'. In such a case, here we can specify a preference. Each entry
#here is of the form 'module1:module2' where module2 is the preferred choice.
PREFLIST=' rt2500usb:rt73usb '

There is a script, /sbin/pup_event_backend_modprobe, that udevd calls when it has a modalias. This script does various pre-processing, mostly processing entries in /etc/rc.d/MODULESCONFIG, then loads the module.
I have now added code that reads the PREFLIST variable and if there is a matching entry, then finds out whether the candidate-replacement also matches the modalias, if so then uses it.

I don't think this is perfect, as there may be cases where on one particular hardware it is required to use rt73usb rather than rt2500usb, but in some other hardware it is not so.

Posted on 14 Jul 2008, 21:03


Posted on 15 Jul 2008, 9:20 by JustGreg
Good Fix
I discovered the same problem with the 2goPC and Puppy 4.0. I ended up adding commands to rc.local to remove rt2500usb and install rt73. This should be a easier way to correct similar problems.