Ndiswrapper

Differences between revisions 5 and 7 (spanning 2 versions)
Revision 5 as of 2006-02-10 19:13:47
Size: 19129
Editor: 12
Comment:
Revision 7 as of 2006-02-13 01:17:37
Size: 19178
Editor: c-24-125-47-253
Comment: rename page to fit into structure, checked for wiki links and redirect, 8 chgd
Deletions are marked like this. Additions are marked like this.
Line 1: Line 1:
## page was renamed from WifiDocs/Ndiswrapper
Line 13: Line 14:

1. Introduction

  • If your wireless network card does not have a native linux driver for it you can use the windows drivers with ndiswrapper. Ndiswrapper is a module in linux that allows linux to use the windows driver for wireless cards (in most cases).

    If you do not know what chipset your wifi card uses, issue the lspci command in a terminal. It should be listed there. In order to see if your chipset is known to work with the ndiswrapper module, find your card in the list [http://ndiswrapper.sourceforge.net/mediawiki/index.php/List here]. That link might even provide you with useful tips to get your specific card to work, as well as providing a link to the working Windows drivers.

Info <!> Before going any further, are you using a Live CD? If you are, give up now. This won't work.

Info <!> If you are running ubuntu AMD64 bit, go to links section for instructions.

2. Install Repository Version

2.1. Install necessary packages

  • Ubuntu comes with the necessary ndiswrapper module pre-installed but it needs the ndiswrapper-utils package to get it working. There is also a graphical interface to using ndiswrapper which you can use.

2.1.1. With internet access on ubuntu pc

  • If you have internet access via some other method while logged into ubuntu, you can install the apps from the repositories. If you don't know how to install apps then you can read [http://help.ubuntu.com/starterguide/C/ch02.html how to here]

(i) You may have to add the multiverse and universe repositories which is explained in the link.

2.1.2. With internet access from another pc

BR

  • Copy the appropriate files over to a directory on your ubuntu machine (a good location is /home/(user_name)/drivers) and install them in this order:

      sudo dpkg -i ndiswrapper-utils_1.1-4ubuntu2_i386.deb
      sudo dpkg -i ndisgtk_0.5-1ubuntu1_all.deb

Info <!> The commands listed above are a general example on how to install a .deb package from the command line. You need to be in the directory where the files were copied to and you need to replace the end with the actual package name you are installing. If you are new to the terminal, I suggest reading the wiki:BasicCommands:BasicCommands page here on the wiki.

2.1.3. With no internet access

  • With out any access you can still install ndiswrapper-utils from the install cd but ndisgtk is not on the disk. Put the disk back in the drive, open up synaptic from System>Admin and search for ndis. If you do not know how to install apps, click on the lifepreserver on the top panel and read Ubuntu X.XX starter guide.

Anchor(install)

2.2. Set up and install drivers

attachment:IconsPage/IconWarning3.png

  • Important: Do NOT use drivers on your CD. They may work and you can try them, but you may experience kernel crashes etc., if the driver on your CD has not been tested. Instead, you need to download 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 [http://ndiswrapper.sourceforge.net/mediawiki/index.php/list list], find out an entry for the same PCI ID and download the driver corresponding to it (don't worry if the link is not under your exact card as many cards you the same chipsets). 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). (this is important as some drivers have a connection with the .sys file which makes the driver work properly) If there are multiple INF/SYS files, you may look in the [http://ndiswrapper.sourceforge.net/mediawiki/index.php/list 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 on your harddrive.

(i) The above statement is pulled from the ndiswrapper wiki site. Your drivers from your cd may work and you can try them, it's not hard to remove and try a different driver. It might save you some time searching to find someone who has verified a driver and provide a download site.

2.2.1. ndisgtk instructions

  • If you chose the ndisgtk route, after install, click on System > Admin > Windows wireless drivers and follow through the prompts.

Awesome! B) Some screen shots of ndisgtk can be found [http://lxer.com/module/newswire/view/46385/ here].

2.2.2. Command line instructions

2.2.2.1. Install the windows driver

  •   sudo ndiswrapper -i ~/drivers/{driver}.inf

    (assuming the driver is in a directory in your home folder called drivers)

2.2.2.2. checking to make sure it installed correctly.

  • Run this command:
      ndiswrapper -l
    If this is installed correctly you should see:

attachment:IconsPage/IconExample48.png

  •   Installed ndis drivers:
      {name of driver}  driver present, hardware present
    If you do NOT see this message.
    1. Try a different driver such as the drivers for win2k or another driver matching the pciid on the [http://ndiswrapper.sourceforge.net/mediawiki/index.php/List ndiswrapper list]

    2. There is a [#trouble troubleshooting] section, you can see if there is an answer there.
    3. Look for additional help at [http://www.ubuntuforums.org the Ubuntu Forums].

2.2.2.3. loading the new module.

  • First run this command:
      sudo depmod -a
    then:
      sudo modprobe ndiswrapper

    With no errors given you can go to the networking tool System > Administration > Networking and configure your device, or try the command ifconfig. Your wireless card should now appear with an interface name of wlan0. If it doesn't appear here then the driver is not working properly.

2.2.3. automatically load at boot-time

  • If everything works, you need to tell your system to load the module on boot. Two ways you can do this are:
      sudo ndiswrapper -m
    which will add the proper line to the /etc/modules file or you can add it manually by opening the file with this command:
      sudo gedit /etc/modules

    and add the word ndiswrapper to the end of this file and save.

Anchor(trouble)

3. Troubleshooting

  • If you can not get a working driver, you may want to consider compiling and using the latest ndiswrapper release. Breezy comes with v1.1 As of Jan 2006 v1.8 is the stable release.
  • Can not modprobe ndiswrapper, fatal error given.
    • This error is usually given when ndiswrapper is compiled and installed. You have a bad installation or you didn't remove the module that came with ubuntu. Need to uninstall ndiswrapper and make sure you remove the ndiswrapper module that came with ubuntu. Uninstall instructions can be found [http://ndiswrapper.sourceforge.net/mediawiki/index.php/Uninstall here]

3.1. Some common errors

  • Tried to install driver from cd-rom
    • The files need to be on your hard drive, they can not be loaded from the cd-rom
  • Not all files are copied over to the hard drive
    • Not all files from the drive are needed. You basically need a .inf and a .sys file. Some drivers also use a .bin file but there shouldn't be any other file type needed.
  • Two many driver files copied to folder
    • You should only have 1 .inf and 1 .sys file in the directory on your hard drive.
  • Can't get driver.inf file to install - file not found

    • You have to be in the directory where the .inf file is or specify the full path to the file.
  • Another driver loads and binds to the device
    • Sometimes ndiswrapper is used prematuerly. There may be a native driver that comes with Ubuntu that's taking the primary driver position and conflicting with ndiswrapper. For more about this go to the wiki:WirelessTroubleshootingGuide:WirelessTroubleshootingGuide and the step on device drivers.

4. Compile latest version of ndiswrapper

BR

  •   sudo modprobe -r ndiswrapper 
      sudo apt-get --purge remove ndiswrapper-utils 
      sudo rm -r /etc/ndiswrapper/ 
      sudo rm -r /etc/modprobe.d/ndiswrapper
      sudo rm /lib/modules/`uname -r`/kernel/drivers/net/ndiswrapper/ndiswrapper.ko

4.1. Install kernel headers:

  •   sudo apt-get install linux-headers-$(uname -r)
    and dependencies:
      sudo apt-get install dh-make fakeroot gcc-3.4 build-essential

4.2. Download the current version

4.3. Untar

  • Move to the file where you downloaded the file and run these commands. On the second command replace [current version] with the actual version of the file you downloaded.

      tar xvfz ndiswrapper-[current version].tar.gz 
      cd ndiswrapper-[current version]

4.4. Build deb packages:

  •   fakeroot debian/rules binary-modules 
      fakeroot debian/rules binary-utils 
      cd ..

4.5. Install

  •   sudo dpkg -i ndiswrapper-modules-[your kernel]_[current version]-1_i386.deb ndiswrapper-utils_[current version]-1_i386.deb
    Now go back to the [#install install] section to set up and use your newly installed ndiswrapper package.

5. WPA setup

5.1. Pre-amble

  • (quoting notzac): I've been bashing at this for the last few hours as I just got myself a shiny new wireless router and wanted to use WPA-PSK rather than WEP. I don't pretend to be any sort of guru at this; I spent most of my time reading FAQs and Wiki entries; swore at my computer for a while when it didn't work and then just started experimenting. I've finally got what appears to be a fairly nice configuration that works great for me - I'm writing it up in the hopes that it helps someone else.

5.2. Assumptions

  1. You can already access the network/internet -without- WPA or other encryption.
  2. You're using an ndiswrapper-based driver (probably not essential, but you'll have to modify a few of the commands if you're using madwifi or one of the native drivers - YMMV).
  3. Your wireless card comes up with an interface name of 'wlan0' (if not, you'll need to modify my examples to suit).
  4. You want to use WPA-PSK with either TKIP or AES/CCMP.
  5. Your router (or whatever) provides IP address details via DHCP (not essential, but you'll have to modify one of the files beyond my examples).
  6. Your router or WAP broadcasts its SSID (if not, [#anthony see Anthony's] notes at the bottom of this page).
    1. You're comfortable editing files and working with badly-written HOWTOs. Smile :)

5.3. The procedure

  • First up, you'll need the wpasupplicant package. It's in the Universe repository, so you'll need to have that in your sources.list file. If you've already installed this package, I recommend that you reinstall; use these commands to get rid of it:
      sudo killall wpasupplicant
      sudo dpkg --purge wpasupplicant
    Now install a fresh copy:
      sudo apt-get install wpasupplicant

Info <!> If you compiled and installed a newer version of ndiswrapper then it's possible you will need to compile and install a newer version of wpasupplicant.

  • After you've got it installed, start by modifying the "default" file -- I'm not sure why to be honest, but the installer told me to start there and I did:
      sudo vi /etc/default/wpasupplicant

attachment:IconsPage/IconExample48.png

  • Here's what mine looks like; modify yours to taste:
      # /etc/default/wpasupplicant
      # WARNING! Make sure you have a configuration file!
      ENABLED=1
    
      # Useful flags:
      #  -D <driver>          Wireless Driver
      #  -i <ifname>          Interface (required, unless specified in config)
      #  -c <config file>     Configuration file
      #  -d                   Debugging (-dd for more)
      #  -w                   Wait for interface to come up
    
      # OPTIONS="-w"
    Save and exit. Next, you'll need to sort your pre-shared key out. My router allows me to input the passphrase that makes up the key itself; I originally tried putting this passphrase in as the wireless key, which failed to work altogether for fairly obvious reasons. Hindsight is wonderful like that. Take the passphrase that you used in your router or WAP and use wpa_passphrase to generate the key. You use this command in the following format:
      wpa_passphrase <ssid> <passphrase>
    So the command I ran looks something like this:
      wpa_passphrase MyHomeWireless SuperSecretPassphrase

attachment:IconsPage/IconExample48.png

  • .. which gives you an output something like:
      network={
            ssid="MyHomeWireless"
            #psk="SuperSecretPassphrase"
            psk=e42ac2538ef03f906d37332a0df4446150e04cdcdd392e  309486075065a70a1f
      }
    Copy all that - we'll need in a moment. You now need to put that in to a configuration file for wpa_supplicant, which you first need to create. Given that you'll have the keys to your wireless access in this file, a little extra precaution is in order. Use the following commands to create and then open the file for editing:
      sudo touch /etc/wpa_supplicant.conf
      sudo chmod 600 /etc/wpa_supplicant.conf
      sudo vi /etc/wpa_supplicant.conf

attachment:IconsPage/IconExample48.png

  • Using the output of wpa_passphrase we copied earlier as a base, you'll need to tell wpa_supplicant a few more details about your network. Here's what my copy of this file looks like when complete, with the sample data:
      network={
            ssid="MyHomeWireless"
            #psk="SuperSecretPassphrase"
            psk=e42ac2538ef03f906d37332a0df4446150e04cdcdd392e  309486075065a70a1f
            key_mgmt=WPA-PSK
            proto=WPA
      }
    Save and exit. You should probably test this now - here's a good command to copy/paste to your cli (this will only work if you fulfill the assumptions of this HOWTO):
      sudo ifconfig wlan0 up && sudo /usr/sbin/wpa_supplicant -Bw -Dndiswrapper -iwlan0 -c/etc/wpa_supplicant.conf && sudo dhclient wlan0
    If that doesn't get you to the point where you can ping other hosts on your network, something is most likely wrong with wpa_supplicant (I'm assuming that it hasn't got anything to do with DHCP). Run these two commands:
      sudo dhclient -r wlan0 && sudo ifconfig wlan0 down && sudo killall wpa_supplicant
      sudo ifconfig wlan0 up && sudo /usr/sbin/wpa_supplicant -w -Dndiswrapper -iwlan0 -c/etc/wpa_supplicant.conf -dd
    This will give you a bunch of debugging output, and someone who is much more skilled than I might be able to help you out. Sorry, but this HOWTO isn't going to help you much more, as it's beyond my ken completely. If you got lucky and you -are- able to ping hosts on your network, now is the time to automate it. It's actually really easy. Run this command first to bring the wireless link down cleanly:
      sudo dhclient -r wlan0 && sudo ifconfig wlan0 down && sudo killall wpa_supplicant
    You need to tell your network interface configuration file how to deal with the wireless config nicely; here's what you need to put in for your wireless card (again, if you don't completely fulfill the assumptions of this HOWTO, you'll need to change a few things). Open up /etc/network/interfaces:
      sudo vi /etc/network/interfaces
  • .. here's the part you'll need to add/modify in yours for the wireless:
      auto wlan0
      iface wlan0 inet dhcp
      pre-up /usr/sbin/wpa_supplicant -Bw -Dndiswrapper -iwlan0 -c/etc/wpa_supplicant.conf
      post-down killall -q wpa_supplicant
    Save and exit. We're all done! Wireless will now come up on boot (assuming that your computer already detects the card and loads the drivers for it already), and you can start/stop the wireless link with the following two commands:
      sudo ifup wlan0
      sudo ifdown wlan0

Anchor(anthony)

5.4. If your router does not broadcast the SSID

  • I recommend you do not broadcast the ssid for added security. It's just one more thing your potential intruder has to guess. First, set
      ap_scan=2
    This means, don't bother scanning (since it's not broadcasting anyway right), use the first network block. Since your router isn't broadcasting, you have to add some more detail about the encryption, in particular whether it's TKIP or CCMP(also known as AES).

    You also have to specify scan_ssid=1, which means this router does not broadcast.

attachment:IconsPage/IconExample48.png

  • Here is a sample of my network block:
      network={
            ssid="myrouterssid"
            scan_ssid=1
            psk="topsecret"
            key_mgmt=WPA-PSK
            proto=WPA
            auth_alg=OPEN
            pairwise=TKIP
            group=TKIP 
     }

Enjoy using your network securely Smile :)

6. links

[http://ndiswrapper.sourceforge.net/mediawiki/index.php/Main_Page ndiswrapper wiki]

[https://wiki.ubuntu.com/HowtoUseNdiswrapperOnAmd64Ubuntu?highlight=%28ndiswrapper%29 Ndiswrapper on amd64 box]

wiki:WifiDocs/WifiDocs


CategoryDocumentation CategoryNetworking

WifiDocs/Driver/Ndiswrapper (last edited 2008-08-06 16:19:19 by localhost)