Wireless Networking with ndiswrapper

How to use ndiswrapper to set up network cards normally unsupported by Linux. [This article initially appeared in TUX, issue 8.]

by Jes Hall

Wireless cards can be quite a bit of trouble for Linux users. Very few manufacturers have any interest in writing Linux drivers or releasing information about their cards so other people can use this information to write Linux drivers. There is a small selection of Linux-compatible Wi-Fi (wireless networking) cards, but they tend to be rather expensive. Worse, you don't get very much choice about which wireless networking chipset is built-in when you buy a laptop.

ndiswrapper is a project that provides a kernel module to load Windows NDIS wireless card drivers under Linux. NDIS stands for Network Driver Interface Specification and is the Windows/DOS driver interface. The ndiswrapper module wraps around this driver, acting as a translator between it and the Linux kernel.

You can use ndiswrapper to get a great deal of cards working that don't have a native Linux driver. There is a lot of information on the ndiswrapper wiki (discussion site) about various card and driver combinations that work well, but it often works with other cards too. There is no guarantee it will work perfectly with your card, however. Although ndiswrapper has become many orders of magnitude more stable over time, it still can very rarely crash or lock up your Linux system. You can visit the ndiswrapper wiki here.

Installing ndiswrapper is not for point-and-click users. It requires using the command line and being able to locate drivers and specialised instructions for your card. If this sounds like something you'd have difficulty doing, ask a geek to help. Your local Linux Users Group is a great place to find a friendly Linux guru who can help you with this.

Installing ndiswrapper

Many Linux distributions have binary packages for ndiswrapper. Use the package updating tool for your distribution to make sure you have the latest version available installed. Some distributions separate out the driver and the command-line tools into two packages, so check to make sure that you have ndiswrapper-utils or any similarly named package installed if typing ndiswrapper at the command line as root results in command not found.

Figure 1. Installing ndiswrapper

Identifying Your Card

To install and set up ndiswrapper, you need to know the chipset of your wireless card and find a suitable Windows driver to use. Then, you need to install ndiswrapper either from a package or by compiling the sources.

The chipset of your card differs from the brand or model. It refers to the actual chips inside the card that control its function. So a planet-, belkin- or genius-branded card could all have the same chipset and be able to use the same driver. Some manufacturers even have been known to use different chipsets in cards with the same model number.

Figure 2. The KDE Info Center

As shown in Figure 2, I'm using the KDE Info Center (kinfocenter) to get information about my devices. Your wireless card should show up under the PCI section, regardless of whether the card is built-in to your computer or is a PCMCIA card. The last item in the list in Figure 2 is my wireless card. According to this, it has a Realtek chipset, model 8180l, revision 20. This is a little cryptic, but all we need to do with this information is match it up to a driver that works with ndiswrapper.

If you don't have a graphical tool like the KDE Info Center at your disposal, you can get the same information from the command line using the command lspci. If your shell tells you the command is not found, try specifying the full path--often /sbin/lspci.

Armed with the knowledge of what chipset your card is, the next port of call is the ndiswrapper wiki's card list.

Find the Driver

In some cases, you may have the original Windows driver disk. You can use this disk instead of downloading a driver, although you're likely to get a more recent driver if you download one. The ndiswrapper wiki page says that most people have had success using the Windows XP driver from the chipset manufacturer's Web site. Once you've located a driver for your card, copy it from your driver CD/floppy or download it to disk and extract it.

If your driver is in the form of a Windows self-extracting zip file with a .EXE extension, it's possible that Linux unzip can still extract it. Try using unzip file.exe from the command line. Locate the driver installation instructions file. It will have the extension INF. If there is more than one of these files, the ndiswrapper wiki will often point you to which one you should use.

This step requires some command-line use. Open up a terminal and change to the directory containing your drivers. If you use Konqueror as your file manager, you can bring up a terminal in the directory you're already in by using Window→Open Terminal Emulator. This lets you see a graphical representation of the current directory in the top pane, and use the command line in the bottom pane. You need root privileges for this step. Either use the su - command to change to the root user, or if you have your system set up for it, use sudo.

# ndiswrapper -i filename.INF

This causes ndiswrapper to create a configuration directory in /etc to hold the driver file and configuration pertaining to the driver and install the driver to it. Now if you issue the command:

# ndiswrapper -l

you should see something like the following:

dessa@holly:~> /usr/sbin/ndiswrapper -l
net8180         driver present, hardware present

To load the module, type modprobe ndiswrapper as the root user. To set up the ndiswrapper module to be loaded on boot, type:

# ndiswrapper -m

This writes out a line in a system configuration file--usually /etc/modprobe.conf--to tell the system that your wireless card uses the ndiswrapper driver.

Set Up Networking

Now that you have ndiswrapper installed and a driver for your card, you should be able to set it up using the networking tools that come with your distribution. Here, I'm using SUSE 9.3, but these settings would apply no matter what distribution I'm using.

The ndiswrapper device is called wlan0, which means the first wireless networking device on the system. If the ndiswrapper -m step completed correctly, your system knows that the wlan0 device and the ndiswrapper driver are supposed to go together.

Generally, if you have a wireless access point set up, you'd enable getting an IP address assigned via DHCP. If you were going to use a static IP (one you specify, rather than one assigned to you by your wireless router), you'd specify it here. I'm also adding in the ESSID, which is the name of the access point to which I want to connect. If your access point is using encryption, and you have to specify a WEP key, this is the place to do so. It might require trying a few different options until you find the settings that work best with your particular card. If you have any difficulties here, referring back to the ndiswrapper wiki can give you hints about specific options required for your card.

Figure 3. One Step in Setting Up Networking

Figure 4. Another Step in Setting Up Networking

Potential Problems

It's very difficult to describe a method that will work on every possible Linux distribution. What if these instructions don't work for you? A few minutes spent in troubleshooting and gathering information makes it much more likely that you'll find some help. Your first port of call should always be Google. Try to search for "ndiswrapper SUSE", replacing SUSE with the name of your distribution.

1) Check that the module is loaded: open up a terminal and type in lsmod. This shows you a list of the currently loaded driver modules. Does ndiswrapper appear in this list? If it doesn't, try typing modprobe ndiswrapper and make a note of any errors. No output at all means the module loaded fine.

2) Check that the card is associating with an access point: open up a terminal and type iwconfig as root. You should see some output something like this:

wlan0     IEEE 802.11b  ESSID:"internet@home"  Nickname:"holly"
          Mode:Managed  Frequency:2.437 GHz  Access Point: 00:12:17:3A:51:E5
          Bit Rate=11 Mb/s   Tx-Power:20 dBm   Sensitivity=0/3
          RTS thr=2432 B   Fragment thr=2432 B
          Encryption key:off
          Power Management:off
          Link Quality:100/100  Signal level:-72 dBm  Noise level:-256 dBm
          Rx invalid nwid:0  Rx invalid crypt:0  Rx invalid frag:0
          Tx excessive retries:0  Invalid misc:0   Missed beacon:0

If the part after ESSID reads off/any and the part after Access Point is full of 0s, try manually associating. Type iwconfig wlan0 essid Name of your access point here, and see if the lights on your card light up.

3) Check that the card has a valid IP address: open up a terminal and type ifconfig as the root user. Look for the section that says inet addr under the wlan0 section. Do you have a valid IP address there, on the right subnet for your network? If so, try to ping some things on your home network. Try to ping your wireless access point or any other computers to figure out if you have any connectivity at all.

4) Check your default route: open up a terminal and type route -n as the root user. Do you have a line that starts with 0.0.0.0? Under the Gateway column, does it show you the address of your router?

5) Check your DNS: if you can ping local machines by their IP addresses, but you cannot see sites on the Web, it's possible you don't have correct settings for DNS.

If you need to ask for help on forums or mailing lists, listing the results of these steps will make it much easier for people to help you.

Adventurous Users Only!

So, what do you do if your Linux distribution doesn't ship ndiswrapper binaries?

Installing ndiswrapper from sources is always an option if you know your way around a terminal. To do this, you need to have the kernel sources installed and the development packages for your distribution that include the GNU C Compiler and other tools required to compile software. Remember, think twice before you press Enter if you're using the terminal with root permissions.

Download the ndiswrapper sources from the downloads page. Either extract the sources with ark or file-roller or from the command line with:

# tar xjf ndiswrapper-$version.tar.bz2

Replace $version with the version of ndiswrapper you've downloaded. Hint: the terminal can complete commands and filenames for you. Try typing in ndis and then press the Tab key.

Change into the directory you've just extracted:

# cd ndiswrapper-$version

Inside this directory are two files you should at least skim through: INSTALL and README. To compile and install ndiswrapper, issue the command as root:

# make install
About the Author

Jes Hall is a UNIX systems consultant and KDE developer from New Zealand. She's passionate about helping open-source software bring life-changing information and tools to those who would otherwise not have them.

Web Editor - Mon, 2005-11-14 04:20.
Categories:

Comment viewing options

Select your preferred way to display the comments and click "Save settings" to activate your changes.

Big thx for tutor :) all

Big thx for tutor :) all tips is easy to understand and to follow.

Greets Eugen

3dsl Eugen (not verified) - Fri, 2007-01-05 21:21.

You can use ndiswrapper to

You can use ndiswrapper to get a great deal of cards working that don't have a native Linux driver.

Jack (not verified) - Thu, 2006-11-30 17:59.

Belkin Wireless G USB adapter n Ubuntu

Thankyou - followed you comments - copied from CDrom
with Belkin adapter - rebooted and it all came straight up.
How it should. Impressed. rgds Ted Osburn

Ted Osburn (not verified) - Sat, 2006-10-07 06:32.

How to disable USB wireless device?

I really managed to get my SIS 163u usb wireless device work with ndiswrapper. Please could someone tell me how to disable it?

ifdown wlan0 close the connection, but my device is still on (flashing light) and searches for networks. I 'd like to turn it off before I remove it.

Could you provide some help on this one?

ndisvia (not verified) - Sun, 2006-04-16 20:54.

Wifi Card

thankyou, this worked great, would you have any advice on a USB wifi card?

Vursitis (not verified) - Sat, 2006-03-25 19:26.

wifi

After many attempts over several weeks and still not able to establish a wireless connection, ran across your article. Followed all the applicable steps and had a connection within a few hours running SimplyMEPIS_3.4-1.rc1. Many Thanks Jes Hall

An - ymous (not verified) - Thu, 2005-12-22 20:30.

A big big thank you from me

A big big thank you from me too!

wifiseeker (not verified) - M - , 2006-02-27 13:36.

After the Driver - Debian, Ubuntu and Kubuntu

I set up a page for how to configure wireless networking under Debian, Ubuntu and Kubuntu that some may find useful. I don't cover actual driver installation, but I pick up where most of the driver instruction pages leave off... It requires hand-editing some files, but the resulting setup can be made to "just work".

Deb_Wifi

My site has no ads, seriously.

Gary Vollink (not verified) - Wed, 2005-12-14 16:31.

I configer

I configered , thanks , very useful feature.

HerMak (not verified) - Fri, 2006-02-24 10:17.

ubuntu 5.10

Thank you for your site. It was the solution I was looking for. I will probably spend weeks researching.
right now i will look another feature.
I have a HP Compaq nx6125, with broadcom's BCM4318 Wi-fi.
it also have bluetooth, but hcitool dev says there are no devices.
All I found on google were success stories with usb bluetooth.
I'm trying to use my laptop's embeded bluetooth support.

Any sugestions?

thanks in advance
Mauro
Mendoza - Argentina

Mauro (not verified) - Tue, 2006-01-17 13:18.

That's because

That's because, google sandboxes new sites, where you can possibly find what you need. If you go to the last pages, you'll find what you want. I found this site there, no problems.

Aaymob (not verified) - Fri, 2006-02-24 10:20.

Re: ubuntu 5.10

Sorry -- I don't use Bluetooth (although I do mention Bluetooth on my site, under the Opinion section).

GAVollink (not verified) - Thu, 2006-01-19 09:38.

Deb_Wifi

Awesome site, Gary!

That's exactly what I needed to "finish" my wireless networking setup on my HP zv5120us laptop. I'd gotten ndiswrapper working quite a while ago on Debian Unstable, but recently switched to Ubuntu 5.10 and had to get it set up again. I don't have anything like ifplugd or waproamd running, so I'd have to CTRL-C twice during the boot process to get it to stop trying to get an address via DHCP when no network connectivity exists. Then, once it finished booting, I'd manually load ndiswrapper and do 'ifup wlan0' to get networking going. Hopefully, when I get home this evening, I'll go through your instructions and have it "automagically" starting the appropriate networking based on whether or not a cable is plugged in, a wireless AP is available, etc.

Thanks! I'll report any problems I encounter.

BamaRob

BamaRob (not verified) - M - , 2006-01-16 14:00.

Deb_Wifi

Thought I'd post a quick follow up...

When I got home this evening, I decided to try Gary's instructions on my Ubuntu 5.10 laptop. Everything seems to be configured properly, but when I tried 'sudo /etc/init.d/wpasupplicant start' I got:

Starting wpa_supplicant: wpa_supplicant v0.4.5
Copyright (c) 2003-2005, Jouni Malinen and contributors

This program is free software. You can distribute it and/or modify it
under the terms of the GNU General Public License version 2.

Alternatively, this software may be distributed under the terms of the
BSD license. See README and COPYING for more details.

This product includes software developed by the OpenSSL Project
for use in the OpenSSL Toolkit (http://www.openssl.org/)

usage:
wpa_supplicant [-BddehLqqvwW] -i -c [-D] \
[-P] [-N -i -c [-D] ...]

drivers:
hostap = Host AP driver (Intersil Prism2/2.5/3)
prism54 = Prism54.org driver (Intersil Prism GT/Duette/Indigo)
madwifi = MADWIFI 802.11 support (Atheros, etc.)
atmel = ATMEL AT76C5XXx (USB, PCMCIA)
wext = Linux wireless extensions (generic)
ndiswrapper = Linux ndiswrapper
ipw = Intel ipw2100/2200 driver
wired = wpa_supplicant wired Ethernet driver
options:
-B = run daemon in the background
-d = increase debugging verbosity (-dd even more)
-K = include keys (passwords, etc.) in debug output
-t = include timestamp in debug messages
-h = show this help text
-L = show license (GPL and BSD)
-q = decrease debugging verbosity (-qq even less)
-v = show version
-w = wait for interface to be added, if needed
-W = wait for a control interface monitor before starting
-N = start describing new interface

No configuration found.

I double checked to make sure I had '/etc/default/wpasupplicant' and '/etc/wpa_supplicant.conf' configured properly.

So, for now, I'll keep doing it that way I've been doing it... When I have to reboot, CTRL-C during the boot process where it's trying to enable the network interfaces and get an address from DHCP, then once it boots, run 'sudo ifup wlan0' to bring up the interface.

Thanks anyway,

BamaRob

BamaRob (not verified) - M - , 2006-01-16 18:59.

Not enough info...

BamaRob,

To be sure, I would need to see the "/etc/init.d/wpasupplicant" script file.

It appears that the script, "/etc/init.d/wpasupplicant" is not picking up the options specified in "/etc/default/wpasupplicant". Don't be afraid to look in the /etc/init.d/wpasupplicant file to see what it's trying to do. The ones I tested, do this...

[ -f /etc/default/wpasupplicant ] && . /etc/default/wpasupplicant

Will "source" the file, if it exists, which, in turn, sets "OPTIONS", and OPTIONS is used to start the wpa_supplicant executable (and the message you see is complaining about ... missing options. Thus completes the logic of my guess.

Thanks and Good Luck,
Gary Allen

GAVollink (not verified) - Thu, 2006-01-19 09:59.

WIFI with Linux Laptops

I have a HP ZV5000v laptop and got ndiswrapper working with Fedora Core3. I also do not have a problem with the touch pad. I had read that this was a problem and is fixed with a firmware update for the laptop from HP. I am also aware that you can add to your Linux system the Synaptics touchpad driver and get all the bells and whistles working and I had done this, but it was not integrated well enough into the system to leave it there and have it be troublefree. Hence, I just run the basic touch pad and I'm relatively happy. In re of WIFI, I do have it working, but it is not integrated in the Fedora system-config-network command GUI, so I cannot really manage it well. I end up doing the same as a prior poster - that is, having to recall the commands from shell history to get it back in service. I'm happy at home that I have a rj45 cable coming to my desk. All in all, I use my zv5000 for all sorts of stuff. I run VMware on it (oh - I run in 32 bit Fedora avoiding some hassles with dual 32/64 bit libraries and apt getting confused) and do my few Windows things, test out other Linux distros and also run Cedega to run games like Half-Life-2 and more. Oh - Americas Army for Linux plays pretty decently on it too. I am anxious to upgrade to Fedora 5 (when released) or maybe Ubuntu Linux and see if it all works better and is integrated. When it comes to buying a pc card for Linux, going to either Best-Buy or CompUSA, I just do not know what ones would work with stock Fedora - A clear list would REALLY be awesome IMHO. Oh - I've not come to clear understanding if my built-in Bluetooth will work or not and or is tied to the WIFI in some way. I want to get that going one of these days too now that I have a bluetooth enabled mobile phone and a bluetooth iPAQ.

Kas

Keith Schneider (not verified) - Sun, 2005-12-04 20:53.

Need An Online List Of Notebooks With Linux-Friendly WiFi

Xandros recognizes the Netgear 802.11g PC Card I plugged into my HP ze5185 notebook computer, but my wife's newer HP zv5000 notebook uses a Broadcom chipset that Linux doesn't know. The only recourse was ndiswrapper. I used the console setup. It's a little hassle, but it works very reliably with the Netgear wireless router and WEP128 encryption. If the next version of Xandros doesn't recognize the WiFi chipset, I'm going to need to automate the ndiswrapper commands so they run at startup instead of scrolling through the console history and manually running them in the proper order.

The zv5000 also has some keyboard and mouse controller that Linux doesn't like. The keyboard eventually started working on its own after a few initial boots (TuxMagic), but the built-in touch pad pointing device is dead, requiring an external USB mouse.

We really need a site where popular hardware is ranked for Linux compatibility. This would reduce the frustration factor when buying a new computer, only to find that big chunks of hardware don't work with Linux, or require a lot of effort to get them running. It would also encourage manufacturers to make Linux friendly hardware.

This is a much bigger deal for notebook PCs, because they tend to use weirder hardware than most desktop PCs. We need something similar to www.linuxprinting.org, but for notebooks. There's always http://www.linux-laptop.net but it needs more entries. It provides case studies, which are good, but it'd be more helpful if there was a synopsis of the data. It needs a database that can be queried online, so it's possible to input the hardware features you want and the distro you'd like to use, and see which notebooks are the most compatible, what works and what doesn't. Then, the individual user reports could be available as links once you've narrowed the search.

Bruce Layne (not verified) - Thu, 2005-12-01 15:34.

HP zv5000

I have an HP zv5120us and have had very good luck with the latest Ubuntu (5.10 Breezy Badger) recognizing all of the keys and the touchpad pointing device. I still had to muck around a bit with ndiswireless, but I got it working without too much trouble. If you're not dead set on Xandros, give Ubuntu a try. Or, boot an Ubuntu Live CD session, and if the hardware works, save the X configuration file(s) out to compare to what Xandros has.

Good luck,

BR

BamaRob (not verified) - M - , 2006-01-16 13:48.

linux on laptops

I would suggest googling the laptop model, such as "ze4000 linux", or checking Linux on Laptops (www.linux-laptop.net). Although historically (such as six months ago) the centrino laptops were a total headaches, they are now working very well with Mandriva 2006 and most other major distros.

Your best bet may be to buy a slightly older model, which will have more information about it and how to get things working. You may save a bit, too, unless you are absolutely keen on the latest Yonah processor, etc.

Bryan (not verified) - Sun, 2005-12-04 17:00.

Module

When I did all the steps and tried modprobe ndiswrapper I received: Failure. Module not found :( help!!!

Threesa (not verified) - Sun, 2005-12-04 06:57.

With one of the versions of

With one of the versions of ndis i installed it set the module alias as wlan0,
so "modprobe wlan0" used to do the trick.

Not sure if this will help

An - ymous (not verified) - Thu, 2005-12-15 18:35.

Sorry also after using

Sorry also after using ndiswrapper -m to add the module alias to /etc/modprobe.conf
Check the contents of /etc/modprobe.conf or use:

$ grep wlan0 /etc/modprobe.conf to see if an alias has been set for ndiswrapper

This will show you what the module alias has been called.

Good luck

An - ymous (not verified) - Thu, 2005-12-15 18:48.

Great article! Perfect for

Great article!

Thanks!!!

An - ymous (not verified) - Thu, 2005-12-01 15:33.

Great article!

I have been trying off-and-on to get wireless working on my Mepis 3.3.1 box for several weeks, but to no avail. This article was the reason for my success. Oh, I still had a few hurdles to jump that were not covered (my usb dongle drivers were secreted away in an install shield cab file), but it provided a clear and concise roadmap to getting wireless working for me. Thank you Jes and thank you TUX.

Joe (not verified) - Sat, 2005-11-26 08:36.

iwconfig shows my wireless

iwconfig shows my wireless info under eth1 but when I do an ifconfig eth1 isn't listed. No wireless access, what could be the problem?

Brian (not verified) - Wed, 2006-08-09 14:34.

Sans - Yast?

what if we dont have Yast? I've tried that annoying text based program and it doesnt change anything and is quite annoying to understand. is there a universal program to install (possibly witha gui) that can help set it up?

Lunarcloud_88 (not verified) - Fri, 2005-11-25 13:38.

Disable usb wireless device

I really managed to get my SIS 163u usb wireless device work with ndiswrapper. Please could someone tell me how to disable it?

ifdown wlan0 close the connection, but my device is still on (flashing light) and searches for networks. I 'd like to turn it off before I remove it.

Could you provide some help on this one?

An - ymous (not verified) - Sun, 2006-04-16 20:52.

Stop wifi device.

Have you tried "modprobe -r ndiswrapper" as root? I think this should poweroff the wifi adapter. Please correct me if I am wrong.

An - ymous (not verified) - M - , 2006-08-07 15:19.