If you are trying to get a device working with ndiswrapper, please help ndiswrapper project wiki by contributing your findings. See HowToContribute
Kernel crashes / freezes
- Try latest stable version from http://sourceforge.net/projects/ndiswrapper/. Sometimes the development code in svn may have fixed issues.
- When installing ndiswrapper, if you get the warning that kernel is using 4K stacks (CONFIG_4KSTACKS), reconfigure kernel (under ‘Kernel hacking’ section enable ‘Kernel debugging’ option and make sure the option ‘Use 4Kb for kernel stacks instead of 8Kb’ is disabled). After disabling 4 KB stacks, recompile kernel, reboot and reinstall ndiswrapper (and make sure ndiswrapper doesn’t give the warning). Some distributions (e.g., RedHat/Fedora) ship kernels with CONFIG_4KSTACKS option removed (so you can’t choose to disbale it). In that case, either use vanilla kernel, or apply 16KB stack patch available at http://www.linuxant.com/driverloader.
It doesn't work
There are many explanations for it. Most common ones are listed below.
- Follow instructions in Installation and see if you missed any step in the installation
- Make sure you have the latest version of ndiswrapper installed; check output of ndiswrapper -v against latest stable version at http://sourceforge.net/project/showfiles.php?group_id=93482. If ndiswrapper -v reports errors or doesn’t show utils version and driver version, then either you have old version of ndiswrapper or installation is not complete.
- Some distributions may have old version of ndiswrapper installed. If you want to install latest version from source, first remove ndiswrapper by following Uninstall and then Installation.
- Check output of ‘ndiswrapper -l’ to see that appropriate Windows driver is installed for your card. If an alternate driver is listed for your card, that is Linux native driver, which should be uninstalled before loading ndiswrapper.
- First, try with the windows drivers for your chipset listed at List. The drivers distributed for your card may or may not work. If the drivers for your chipset on List don’t work, but a different driver works, update the List.
- Check output of dmesg | grep ndiswrapper to see if there are any errors. See Troubleshooting to identify common errors.
- If you get the compilation error Unknown symbol: wireless_send_event, you will need to enable the CONFIG_NET_RADIO option and recompile your kernel or find a kernel with this option already enabled.
- If scan doesn’t see any APs, it is likely the radio in the card is switched off. If there is an LED to indicate the status of radio power, then it is easy to see this. Some computers have a special key for powering up the radio, some have a setting in BIOS and some others will have to be powered up by a program; see Tips for more information.
- If the chipset for your card is not listed in List page, then send mail to the mailing list requesting support for it. If your chipset is not on the list, but it works with ndiswrapper, add it to List.
- Make sure the module is compiled for the kernel with same configuration: check that cat /proc/version and modinfo ndiswrapper report the same versions.
- Try using a vanilla kernel, preferably, latest 2.4 or 2.6 kernel.
Windows drivers don’t support link quality and noise level. Some drivers may use undocumented features to display them in Windows, but these are specific to those cards and unless the vendor discloses them, it is not possible to support these features in ndiswrapper. All the information available through NDIS calls can be seen in /proc/net/ndiswrapper/wlan0/stats. NDIS version 6 supports these features. Support for ndis6 is being added at this time. When that is complete, with Windows vista drivers, these features should be available in ndiswrapper.
Is master mode or promiscuous mode supported?
No! NDIS doesn’t support Master/Repeater/Monitor modes. The only modes supported are Ad-Hoc and Managed. Note that some drivers may support features that are not in NDIS e.g., showing signal noise and possibly Master mode, but they are proprietary and no documentation available for them, so such features won’t be supported by ndiswrapper. Some settings don't work!
Not all wireless settings in Linux are supported by NDIS drivers e.g., promiscuous mode. As of now, most settings that are possible with NDIS drivers are implemented. Some settings although supported in ndiswrapper, may not be supported by a particular Windows driver; e.g., setting bit rate. Usually it is safe to ignore ignore such errors, as they are not required. See Tips for some information about changing network type, if at all you need that. Similarly, sensitivity is not supported either. However, for all practical purposes, one doesn’t need any of the unsupported settings. If you are having issues with wireless setup, especially with a distribution configuration tool, give as minimal setup as possible e.g., don’t give bitrate information etc. Where and how can I get help?
Check the mailing list and the forum for any solution to similar problems. Both these have search facility. The mailing list http://lists.sourceforge.net/lists/listinfo/ndiswrapper-general or archives at http://sourceforge.net/mailarchive/forum.php?forum_id=36471, http://news.gmane.org/gmane.linux.drivers.ndiswrapper.general are a good place to start looking. Please follow the following guidelines when you want help.
How do I report bugs?
I can't set (E)SSID
- First, make sure that you can see the Access Point(AP)/router/ad-hoc station in the scan: iwlist wlan0 scan should list the station you are trying to connect to. If it is not seen, then either the radio is off or the station you are trying to connect is not broadcasting its SSID. If the radio is off, you should turn it on; different systems have different ways of toggling the radio status: some have a special key, e.g., Fn+F2, some have a BIOS setting, some need a special kernel module - see http://rfswitch.sourceforge.net for details. Once the station is seen, set the operating mode Managed or Ad-Hoc as appropriate e.g., iwconfig wlan0 mode Managed. Then set the WEP encryption key, if you are using WEP. While setting the key, specify the security mode open or restricted used by the station. e.g., iwconfig wlan0 key restricted XXXXXXXXXX. If in doubt, try both modes. Until proper key is set, ESSID can’t be set. Then set the ESSID e.g., as iwconfig wlan0 essid myssid. Note that quotes shouldn’t be used around ESSID string, in this case, “myssid”. At this point, the MAC hardware address of your station’s interface should also be set automatically. Check the output of iwconfig wlan0 if ESSID and station’s MAC address have been set. Note that unless ESSID is set, the interface can’t be configured.
- Try setting the ESSID first, then the key. If ESSID is still not set, set it again after the key.
- Enable ESSID broadcast on your station. Make sure your station is listed in iwlist wlan0 scan. If the station is not listed in the scan, you can’t associate with that station.
- Note that when setting the ESSID in Managed mode, the ESSID does not show up in iwconfig until the card has successfully associated with the access point!
- Ensure that the access point is not blocking your MAC address. This must be checked and altered from a different computer.
- A good ressource for problems with iwconfig in general is the wireless-tools homepage http://www.hpl.hp.com/personal/Jean_Tourrilhes/Linux/Tools.html.
How can I set bit rate?
You don’t need to set bit rate if you associate with a node by setting essid, the card will automatically switch to best possible rate. However, if you want to use specific network type such as a/b/g, use iwpriv wlan0 network_type C to set the network type to what C represents, where C is one of a, b, g or any other characther. For example, to set to 802.11b, use iwpriv wlan0 network_type b, and to set to auto, iwpriv wlan0 network_type x. Most drivers allow changing the mode before associating only - once associated, mode can’t be changed. Usually it is not necessary to change network type: the card picks up whatever mode is necessary for proper operation. In some cases, iwconfig may report 802.11b, although the access point and card use 802.11g. Check operating speeds by downloading large file to see if 802.11g speeds are being used by the card.
Can I use ndiswrapper in 64-bit mode for AMD64?
Can I use 32-bit Windows driver in 64-bit mode?
What is the status of USB support?
USB devices are now supported see USB Device Database.
I can ping my router, but I cant get onto the internet?
- If you find everything is ok but you can’t connect to the internet try issuing a route, if you notice that the last line does not have a gateway ip address and does not reference the wlan0 interface try this: route add default gateway 192.168.0.1 in my case the router’s ip address is 192.168.0.1, but it might be something like 10.0.0.1 on your setup
- If you still can’t get onto the internet but you can ping your router see if the file _/etc/resolv.conf_ exists, if not then you won’t be able to resolve ip addresses, make a resolv.conf like so... Check you can ping you router, the ip address will vary on different routers, but it’s generally either 192.168.0.1 or 10.0.0.1 ping 192.168.0.1 Use your favourite text editor and insert the follwoing line into /etc/resolv.conf nameserver 192.168.0.1 You should now be able to ping stuff on the internet, try going somewhere in a browser too: ping ndiswrapper.sourceforge.net
How do I unpack a Windows driver file in .EXE format?
Usually these are self-extracting zip files. If that is the case, in Linux, you can run ‘unzip’ on the .EXE file, which should extract files. Sometimes, they are .cab files, in which case, you can use ‘cabextract’ to unpack. If you find .INF and .SYS files at this step, that is all you need. However, some drivers, after extracting, will give install shield files, usually in ‘data2.cab’ file. To extract files out of data2.cab, run ‘unshield x data2.cab’. You should now have .INF and .SYS files in a sub-directory where you extracted. So, in short, a combination of unzip/cabextract/unshied can unpack driver file in most cases. This combination doesn’t always work though - sometimes you may need to use ‘wine’ to extract. And in a few cases, even that doesn’t work and you need to use Windows to install the driver and find .INF and .SYS files. When I run 'modprobe ndiswrapper', I get 'Invalid module format' or 'Invalid argument' error or something similar. What do I do?
This issue has nothing to do with ndiswrapper - it is just kernel module compilation issue and if you are having difficulties with issue, seek help in channels meant for kernel e.g., kernelnewbies or your distribution. The following hints may help you.
- The kernel running should have been compiled from the same sources as ndiswrapper is.
- The compiler used for compiling kernel should be same as the one used to compile ndiswrapper. To make sure these conditions are met, run cat /proc/version and modinfo ndiswrapper and make sure that they match both compiler and kernel versions. If they do not match, you need to recompile either ndiswrapper or kernel or both. One sure way to get it right is to make sure that you have proper kernel headers installed: check that ls -l /lib/modules/$(uname -r)/build/include/linux/version.h does not give error and shows the information about that file.
- If you use precompiled kernel, make sure also that your kernel sources have exact same kernel configuration used for compiling kernel e.g., copy kernel configuration from /proc/config.gz or /boot/config-version into /lib/modules/uname -r/build/.config, such as gunzip < /proc/config.gz > /lib/modules/$(uname -r)/build/.config. Then recompile and install ndiswrapper.
Does ndiswrapper work on PowerPC architecture?
Well, it is easy to make ndiswrapper work with PowerPC, but there are no Windows drivers for PPC, so there is no point. Only i386 and x86_64 architectures are supported.
Any tips for debugging ndiswrapper?
You can compile ndiswrapper with debug flags such as 'make DEBUG=3 USB_DEBUG=1' etc. (see Makefile for all debug options).
Then ndiswrapper spits out trace messages through syslogd. You can control debug level through 'echo 1 > /proc/net/ndiswrapper/debug' anytime.