b43 firmware problem solved
September 02, 2009 —
BarryK
I think so anyway. I would like to thank trio for patiently answering a series of questions. I would have loved to have had the actual hardware to test, but I reckon that I have got to a solution.
I will need to study the evolution of the uevent/udev mechanism to fully understand this. I have been relying upon the existence of 'modalias' files in /sys for replaying kernel uevents. In /etc/rc.d/rc.sysinit there is code that locates the modalias files, then looks for a 'uevent' file at the same location then sends a "replay" message to it.
The problem is that it doesn't always work. I don't know if the problem is due to an evolution in the mechanism in recent kernels, or not. I'm currently running 2.6.29.6, I would need to check this on older kernels.
For USB interfaces, see this:
# cat /sys/bus/usb/devices/*/uevent | grep 'MODALIAS'
MODALIAS=usb:v1D6Bp0002d0206dc09dsc00dp00ic09isc00ip00
MODALIAS=usb:v1058p1010d0105dc00dsc00dp00ic08isc06ip50
MODALIAS=usb:v1D6Bp0001d0206dc09dsc00dp00ic09isc00ip00
MODALIAS=usb:v1D6Bp0001d0206dc09dsc00dp00ic09isc00ip00
MODALIAS=usb:v046DpC03Dd2000dc00dsc00dp00ic03isc01ip02
MODALIAS=usb:v1D6Bp0001d0206dc09dsc00dp00ic09isc00ip00
MODALIAS=usb:v1D6Bp0001d0206dc09dsc00dp00ic09isc00ip00
#
# cat /sys/bus/usb/devices/*/modalias
usb:v1D6Bp0002d0206dc09dsc00dp00ic09isc00ip00
usb:v1058p1010d0105dc00dsc00dp00ic08isc06ip50
usb:v1D6Bp0001d0206dc09dsc00dp00ic09isc00ip00
usb:v1D6Bp0001d0206dc09dsc00dp00ic09isc00ip00
usb:v046DpC03Dd2000dc00dsc00dp00ic03isc01ip02
usb:v1D6Bp0001d0206dc09dsc00dp00ic09isc00ip00
usb:v1D6Bp0001d0206dc09dsc00dp00ic09isc00ip00
That is,the MODALIAS information is to be found in both the 'modalias' file and the 'uevent' file.
The problem arises with some newer interfaces, there is no 'modalias' file, only a 'uevent' file, and the MODALIAS variable is only to be found in the 'uevent' file.
This is the situation that trio has reported:
There is no modalias anywhere. But found two uevent(s)
/sys/bus/ssb/devices/ssb0:1/uevent and /sys/bus/ssb/devices/ssb0:0/uevent
Inside the uevent file:
MODALIAS=ssb:v4243id0812rev0A
I have modified /etc/rc.d/rc.sysinit accordingly. It should now successfully replay the uevent for the network hardware that requires the b43 module, and the firmware should get installed.
Tags: woof