Using ndiswrapper with the WMP54Gv4 (cont.)

Puppy Linux 1.0.2

Puppy version 1.0.2 comes packed with a bunch of features for a small distro. One of the difficulties has been getting wireless cards working in Puppy. The new 1.0.2 version of Puppy uses the 2.6 series kernel, which is upgraded from previous releases, that used the 2.4 kernel. My wifi card is a Linksys WMP54gv4, using the ralink chipset.

This how-to does not take into consideration using wifi cards on a laptop (PCMCIA).

Before proceeding with this process, make sure that your card (exact brand, model and version) is supported by ndiswrapper. The ndiswrapper wiki page has a section where you can see if your card is supported, located here

Remember, different models of a card may have different chipsets driving them, so check this out carefully first.

With the changes made in the new Puppy release, apparently ndiswrapper was somehow missed. I had previously been able to get ndiswrapper going on the 1.0.1 version. After investigating, I found that ndiswrapper and loadndisdriver were missing, I went about getting ndiswrapper installed. Fortunately, John Murga assembled the needed perl package for this release, needed to actually compile the Windows drivers right from Puppy. In previous versions of Puppy, one had to compile the drivers in another distro and move the /etc/ndiswrapper files to Puppy.

NOTE: Puppy does have a utility called xwconfig to assist in setting up your wireless cards. However, I found that this utility only works when the card is actually detected and wlan0 is recognized.  To use this utility, ndiswrapper needs to be loaded first.

After installing John's perl and ndiswrapper packages, I still found that loadndisdriver executable was still missing. I borrowed this file from my Mandriva installation, which worked fine. In a nutshell, I did the following;

1. installed the perl package, which can be found here
2. installed the  ndiswrapper package, which can be found here
3. made sure that the ndsiwrapper executable was in the /usr/bin directory
4. made sure that the loadndisdriver executable was in the /sbin directory.
5. made sure my Rt2500.INF and Rt2500.sys Windows drivers were in a convenient place on my Puppy partition. In my case, the root directory. In general, using the Win XP or 2000 inf and sys files from your your wireless card's installation cd should work..

Once you have your inf and sys files in a known location run;

ndsiwrapper -i Rt2500.INF

Of course, substitute the name for your inf file. The file name syntax is case sensitive, so watch this, or the driver won't be found.

This should install the driver files into the /etc/ndiswrapper directory In my case, the driver seemed to be installed. Just to make sure, I ran ndiswrapper -l and it gave the the comforting message that the driver was present and installed. You should see a message like;

Installed ndis drivers
rt2500 driver present, hardware present


Now, run iwconfig and you should see wlan0 as a wireless option.

In Puppy, for some unknown reason, the command sequence for loading WEP is a little different.Once I invoked modprobe ndiswrapper in rxvt, I used dmesg to check the status. Yep, the driver was loaded and showed the messages that the card was seen and had an AP identifier. Invoking iwconfig, I found that wlan0 was identified as the interface designation for the wireless card.

Using iwconfig in rxvt, I then configured the necessary settings, which were;

iwconfig wlan0 key open xxxxxxxxxx channel 6 essid default

So to recap;

iwconfig = is the command line utility that sets up the wireless card settings

wlan0 = is the designation that ndsiwrapper gives to the wireless interface

key = sets the WEP value

open = ndiswrapper will not work unless this value is used. I don't know why. The system should use the  managed value, but this worked.

xxxxxxxxxx is my WEP key assigned to the router. My system uses 64 bit encription. Yours may be different.

channel 6 = I knew my card used channel 6 to get a signal. This can also be found in your router settings.

essid = is the name assigned to your router's essid value.

Next, you need to tell Puppy to start the network using the wireless card. Puppy uses dhcpcd, so the command line usage is;

dhcpcd wlan0

This should bring up the card, with an IP address. If you do not see an IP address,something is amiss. You can check this by running the command  ipconfig in rxvt. You should see wlan0 , with an IP address. You should see something like;

192.168.0.102 (on the second line)

Next, you want to auto load the settings on boot. Puppy has a file /etc/rc.d/rc.local that can be used to automate the process. Just add the following values, corresponding to your system.Using Rox, I added the following to rc.local;

modprobe ndsiwrapper (loads the ndiswrapper module)
iwconfig wlan0 key open xxxxxxxxxx channel 6 essid default
dhcpcd wlan0

Again, make sure that your WEP key is correct for your system.

Save the file and your done. Reboot Puppy and see what happens.


Making the process automatic at boot


Puppy has a file, /etc/rc.d/rc.local that can be used to automatically load ndiswrapper and bring up your wlan0 interface. Using Rox, migrate to the /etc/rc.d/rc.local file, right click and choose open as text.You can now add your commands to be started at boot time. Mine were as follows;

modprobe ndiswrapper
iwconfig wlan0 key open xxxxxxxxxx channel 6 essid default
dhcpcd wlan0

Of course, substitute xxxxxxxxxx with your WEP values. Save the file and your done!

NOTE: If you make a mistake with the added values in /etc/rc.d/rc.local, Puppy may hang on boot. So, make sure your syntax and values are correct before editing this file.


Page 5: The WMP54g on Debian Sarge