[mdlug] Attempts at manually restarting wireless kernal module

Drew drew4096 at gmail.com
Sun Dec 13 00:19:08 EST 2009


     Per my discussion with a couple of members at today's mdlug, I'm 
recapping my efforts at
solving an issue with the wireless card in my desktop computer.

What I need to do:

     Remove the module which runs the acx100 wireless card, then put 
it back in, without
rebooting the entire system.

Why:

     It's the only reliable means I've found so far to restore a 
wireless connection after something
(interference from aircraft radar probably) screws up the connection.

Telling when the connection gets screwed up:

     I've found that the loss of connection correlates strongly with 
the Signal Strength number in
/proc/net/wireless for wlan0. A working connection will have this 
number (a) almost always
ending in a decimal point or period ("."), and (b) varying in value 
almost every second. When a
connection goes bad, this number becomes *constant* - and is never 
zero!. Also, the ending
decimal point/period disappears. A script that I had running in 
Fedora 4 watched for this condition
as a signal to restart the module.

Previous handling:

     As indicated, I had the problem solved "in software" under 
Fedora 4 with a script that watches
for the connection to go bad, then runs other scripts that came with 
the driver that I had previously
downloaded, compiled, and installed separately (Fedora 4 itself did 
not come with an acx100 driver),
which rmmod'ed then insmod'ed the module. This not only restored the 
connection (at least until
it would get jammed again) but allowed downloading already in 
progress to continue and eventually
finish.

Current situation:

     I'm now running Suse 11 which comes with an acx driver. 
Unfortunately, even though it starts up
properly during boot, removing and reinserting the module fails when 
attempted from the command line.
dmesg indicates that it is failing to find the card firmware files 
(in /lib/firmware). The previous driver
accepted a firmware_dir= parameter, but this version does not. Nor 
have I been able to figure out just
how it's managing to find these files during boot.

I've tried the following:

     insmod and rmmod, and modprobe. Fails to find firmware.

     insmod/rmmod/modprobe with firmware_dir=/lib/firmware. Does not 
recognize parameter; "invalid symbol"

     Recompiling the previous driver for Suse 11. Fails due to a 
missing config.h somewhere; apparently Suse 11
has bad kernel sources.

     Creating a new Fedora 4 partition. *Works!* However, there are 
other problems with this too numerous
to deal with, including Flash Player refusing to install due to 
missing glibc. (Fedora 4 glibc is probably too
out of date for current Flash Player.)


     Per suggestion at mdlug:

     rcnetwork start, restart, and try-restart. Runs without error, 
but does not restore the signal strength
number to a "good" condition (Remains flatlined).

     hald, udevd, and udevadm trigger. Does not restore wlan0, nor do 
any of them correct the flatline
condition if I leave the module in.


What I am seeking: Any of the following:

     What exactly to enter as a parameter, or otherwise how to get 
the kernel to know where to find
those firmware files.

     How exactly this is being done during boot (when the files *do* 
successfully get found).

     Generally, how to find out, from the .o or .ko file, what 
parameters a kernel module takes.

     Where or how to get a log of the commands, with their 
parameters, that get executed during
boot - especially those that start kernel modules - as opposed to 
just the output which dmesg
gives. To wit, an input equivalent of dmesg.

     A way to "restart" a kernel module without removing it. 
Something like a modprobe --restart.

     Any other way to actually shut down and restart the card itself 
(not just the "network"). That
is, restart it at the hardware level.


     Thanks;

     Drew.




More information about the mdlug mailing list