Installation - NdisWrapper for Linux wifi drivers
23 September 2006Installation
Compile and install
Go to the source-directory and run ‘make distclean‘ and ‘make‘. As root, run ‘make install‘. This should compile and install both the kernel module and the userspace utilities. If you don’t need USB support in ndiswrapper, with recent versions, you can compile with ‘make DISABLE_USB=1‘ and install with ‘make DISABLE_USB=1 install‘.
Edit: Need to go to main directory (top of the source-directory mentioned above) and then do a make install. Without this, it does not work.
Install Windows driver
Important: Do NOT use the drivers on your CD. They may work, but you may experience kernel crashes, etc., if the driver on your CD has not been tested.
Instead, you need to download the appropriate Windows XP driver for your card from the wiki entry list. To identify the driver that you need, first identify the card you have with ‘lspci’ and note the first column such as 0000:00:0c.0 and then find out the PCI ID of the card that with ‘lspci -n’ corresponding to the first column of ‘lspci’ output.
The PCI ID is third column or fourth in some distributions and of the form ‘104c:8400′. Now you need to get the Windows driver for this chipset. In the list, find out an entry for the same PCI ID, and download the driver corresponding to it. Unpack the Windows driver with unzip/cabextract/unshield tools, and find the INF file (.INF or .inf extension) and the SYS file (.SYS or .sys extension). If there are multiple INF/SYS files, you may look in the list if there are any hints about which of them should be used. Make sure the INF file, SYS file and any BIN files (For example, TI drivers use BIN firmware) files are all in one directory.
If you already have your device working in Windows you can try that driver. Open the device manager and find the name of the .sys driver file listed for the device. You need the .sys file and the .inf file. To find the .inf file search in the \Windows\inf\ directory for a file containing the name of the .sys file. You will need to do an advanced search to search for text within the files.
Now use the 'ndiswrapper' tool to install the driver withndiswrapper -i filename.infThis copies all necessary files to/etc/ndiswrapperand creates the config files for your card.
After installing you can run ndiswrapper -l to see the status of your installed drivers. If you have installed the correct driver you should see something like this
Installed ndis drivers: bcmwl5 driver present, hardware present
Where ‘present’ means that you have a card that can be used with the driver installed. In this case, broadcom driver bcmwl5 is used. If you see ‘cannot locate lspci. Unable to see if hardware is present’, you need to install the pciutils package.
===Errors on Installation===
If you get an error with ndiswrapper -i filename.inf along the lines of “couldn’t copy filename.inf at line xxx”, then ‘filename.inf’ most probably does not exist. (Unfortunately ndiswrapper won’t give a sensible error message such as “can’t find ‘filename.inf’”). Check your spelling carefully and remember to use upper / lower case where appropriate.
You will have to correct this failed “installation” with ndiswrapper -e filename (note: not filename.inf) before trying again.
“Extracting_drivers_from_EXEs_or_CAB_files”>
If there’s no windows driver listed for your card, or your card isn’t there at all, you might as well try to locate a driver, and add it if you succeed. The drivers you find may be packaged as an executable file. These notes were extracted from the List of cards, there may be more there.
- Use cabextract on the exe file.
- Use unshield to extract from CAB files, typically named data1.cab, data1.hdr, data2.cab. Also read here for a bit more detail.
Load module
Before you load the module, DO NOT FORGET to type depmod -a. If there is no error, continue.
To load the module type modprobe ndiswrapper. If you get no error, the driver should now be loaded. You can verify this by checking the system log produced by dmesg. If the driver is loaded successfully, you should see a message in the system log
ndiswrapper version loaded
Make sure the version here matches the version of ndiswrapper package that you downloaded and installed. If you get a different version, you have an old version of package, which you should uninstall, and then go back to step 1.If after modprob’ing, the system is locked up (no response to keyboard, etc.), it indicates that kernel has crashed. See distributions and the FAQ for hints on what may cause problems for your distribution/kernel.
If you have successfully installed the windows drivers earlier with ndiswrapper -i INFfile, the ndiswrapper module will load them all. You should then see the following messages in system log
ndiswrapper: driver ''driver1'' added
for each of the drivers. If you don’t see these messages, it usually means that there are no usable drivers installed in /etc/ndiswrapper directory. Check if the /etc/ndiswrapper directory has one sub-directory for each driver and if in each driver’s directory there are inf, sys and conf files. Otherwise, you may need to repeat step 2.If this does not bring up the lights on the card, try ejecting it and re-inserting it.
If the system has a card that works with one of the loaded drivers, you should see the following message in the system log
wlan0: ndiswrapper ethernet device xx:xx:xx:xx:xx:xx
Configure interface
Use iwconfig to configure wireless network interface. First, see if the interface is available, with iwconfig. This tool is not likely to be present on your system: it is part of the package Wireless Tools for Linux, which you should install.
This will print the wireless interface e.g., wlan0. In the examples below, wlan0 is used. Replace wlan0 with the interface reported by iwconfig above. The wireless configuration to be used should match what your access point uses. First, find out if you can see your access point (AP) with
iwlist wlan0 scan
Note: You may have to set the network name before the scan can find your Access Point. If the scan does not find your AP, try issuing the command
iwconfig wlan0 essid ESSID
before using the command
iwlist wlan0 scan
If this lists your AP, you can continue. Otherwise, you may have one of two problems: Your AP doesn’t broadcast SSID. See the FAQ for more information, or if the radio of the card is off again, see the FAQ for details. If you see the AP in the scan above, set the operating mode of the interface according to your setup. In most cases, it is Managed
iwconfig wlan0 mode Managed
If you use encryption WEP, set the key:
iwconfig wlan0 key restricted XXXXXXXX
You can use 10 hex digits for 40-bit encryption or 26 hex digits for 128-bit encryption. You may need to use open security mode instead of restricted depending on the setup of your AP. If you want to write the key in ASCII use s: e.g. iwconfig wlan0 key restricted s:password. Set the network name
iwconfig wlan0 essid ESSID
Replace ESSID with the network name used by your AP.At this point, check to make sure that the ESSID is set in the output of iwconfig wlan0. If you see the ESSID as you set, you can proceed to the next step. If you see ESSID: off/any, then your card is not associated to the AP. Check if WEP encryption is set exactly as used by the AP, and that the AP broadcasts ESSID. See the FAQ for more details. Until ESSID is set in output of iwconfig wlan0, you may not use wlan0 as a network interface.
Now, setup the network parameters for the interface wlan0. This varies from distribution to distribution. Refer to your distribution’s documents on how to do this. Once this is done, you can use network tools to bring up the network e.g.,
ifconfig wlan0 up
or
dhclient wlan0
or
dhcpcd wlan0
etc.Remember, if you have a firewall, let it know that wlan0 is an external interface, and allow it to pass traffic. Otherwise you won’t even be able to ping your AP.
Once everything works fine you can write the correct modprobe settings to load ndiswrapper automatically when the wlan0 interface is used, by running
ndiswrapper -m
Note that this doesn’t automatically load ndiswrapper module at boot time. If you want the module to be loaded automatically at boot time, you should configure your module setup, which depends on the distrbution. Most distributions will load all modules listed in /etc/modules at boot time. Mandrake 10.x uses /etc/modprobe.preload. For them, you can add a line
ndiswrapper
in /etc/modules. For Fedora Core5, add a line
alias wlan0 ndiswrapper
in /etc/modprobe.conf. If this does not work, instead add a line
modprobe ndiswrapper
in /etc/rc.d/rc.local.If this does not work either, you can find a couple of other possible solutions at this thread
- WPA support: See WPA Wiki on how to use Wi-fi Protected Access with ndiswrapper
Comments are closed.