Invalid highlighting regular expression "(WifiDocs/Device": unbalanced parenthesis

Clear message


Candidate for Deletion
This article may not be appropriate for this wiki, and may be deleted. More info...


Duplicate Article
This article covers the same material as another article. More info...

Broadcom BCM4311 802.11g mini-PCIe (14E4:4324) Wireless Adapter using ndiswrapper Installation (Plus NetworkManager and WPA)


The bcm4311 is an 802.11g wireless device, in a mini-PCIe card format, that is installed into many laptop computers.

Before trying ndiswrapper, consider trying the native driver, which is simpler and free software (except for the firmware), see WifiDocs/Driver/bcm43xx.

The guide is also works with BCM4306 in a 32bit environment and is unconfirmed in at 64bit environment, as it may need a different driver. please update when tested with 64bit

For this example we assume that we are building the device in the user's home directory.

Note: ndiswrapper 1.29 was released on 23 November 2006. I would suggest trying it instead of 1.28 now*, though 1.28 is known to work with the particular NDIS driver that my Compaq Presario laptop uses.

  • Please read the all documentation first and then follow it to install ndiswrapper

(*See user notes, below, for varying success with ndiswrapper 1.29.)

(Here is a brief, simplified version of this howto for Feisty Fawn, which requires no compiling.)

=== Brief Summary === (assumes you have a suitable version of ndiswrapper installed, i.e. skips steps 3-4)

lspci -v | grep Broadcom
echo 'blacklist bcm43xx' | sudo tee -a /etc/modprobe.d/blacklist
cat /etc/iftab | grep wlan0
cd $driver_dir
sudo ndiswrapper -i bcmwl5.inf
sudo depmod -a
sudo modprobe ndiswrapper
sudo ndiswrapper -m
cat /etc/modprobe.d/ndiswrapper
sudo ifdown wlan0
sudo ifup wlan0
sudo iwlist scanning
sudo dhclient wlan0

User Notes



ndiswrapper Version





I have only tested this using 128bit (104bit) WEP and ndiswrapper 1.28.




Tested and working with compiled 1.29 ndiswrapper on hp dv6000 series in my case dv6116eu

Jamie Jackson



Successfully tested ndiswrapper/NetworkManager/WPA on with fresh Edgy install and compiled 1.28 ndiswrapper on Dell Latitude D620 with Dell 1390 wireless device.

Jamie Jackson



Same platform as above with compiled ndiswrapper 1.29. "ndiswrapper -l" yielded "bcmwl5 invalid driver!"




Tested and working with compiled 1.29 ndiswrapper on hp dv6000 series-6125se




Got "bcmwl5 invalid driver!", then installed ndiswrapper-utils via sudo apt-get install ndiswrapper-utils and received "bcmwl5 driver present, hardware present". Afterwards, iwconfig would not show wlan0 and I had no further luck, although modprobe ndiswrapper did not produce errors. (??)




Edgy install, Amd64, Gateway model number MX6446. Gateway users can install drivers from the Gateway's support site by providing their serial number. Change the original .exe file to .zip and use cabextract on the .exe inside the new archive after extraction. For configuration, bcmwl564.sys (additional 64 for 64bit pcs?) must be included in the same directory as bcmwl5.inf: this may or may not replace bcmwl5.sys, it has not been determined.




Dapper, iMac Core Duo early 2006. This tutorial seems to work perfectly for early 2006 Apple iMacs wireless internal cards.




HP DV2000 series w/Broadcom 4311 - after many attempts with v1.29, v1.34 worked on the first attempt. I followed this guide, including installing ndiswrapper-utils.




HP nx7400 with Broadcom 4311 - worked like a charm




Edgy on a Dell Inspiron 600m with the Broadcom 4306




Edgy on Compaq v6000t with Broadcom 4311 - installed w/ v1.37, first major update broke it, reinstalled ndiswrapper, everything works great.


Partial Failure


Dapper x86-64 on Compaq v6000 - ndiswrapper appears to work fine, the driver and hardware are present, but wlan0 doesn't show up - let me know if you have any ideas




installed on 25-Feb-2007 - Dapper Drake (6.06) on Compaq v6000 (V6133CL) with Broadcom 4311 - works fine w/ v1.37. Gotchas: I recommend that you follow the instructions here to the letter. It took me more than an hour because: a) you can't have a space in the name of the folder from where you are compiling ndiswrapper. b) The Wireless switch on the laptop should be turned on (switch to the right) - duh c) ndiswrapper -l does not show the hardware entry, but it works fine.




installed on 27-Feb-2007 - Edgy Eft (6.10) on Gateway MX8711 with Broadcom 4311 - works fine w/ v1.37. ndiswrapper -l shows the hardware entry. It works seamlessly with network-manager-gnome to set up WPA-PSK




Ubuntu 6.10 (Edgy Eft) on a HP Pavilion dv9074ea with the Broadcom 4312




Ubuntu Dapper Drake (6.06) on HP Pavillion DV6000z with Broadcom BCM4310 UART (rev 01), works fine




Ubuntu 7.04 on HP G5009EA with Broadcom BCM4311, works fine (needed to redo all steps in this tutorial after upgrading from 6.10)




Ubuntu 7.04 on Compaq F500EA with Broadcom BCM4311, works fine with WPA




Ubuntu 7.04 on Dell Latitude CPx500 with Linksys WPC54g v1, works fine with WPA




Ubuntu 7.04 on HP Pavilion dv6301eu with Broadcom BCM4311, works fine with WPA



1.45 (Gutsy packaged)

Ubuntu 7.10 on Dell Vostro 1000 Broadcom BCM4311, works fine with WEP


Partial Success


Ubuntu 8.10 beta. BCM4311 neeeds workaround:

Reference should be made to the ndiswrapper wiki if any doubts exist:

You should test that your device is applicable to this instruction using lspci:

user@ubuntu:~$ lspci

Your output from lspci should contain a line very much like this:

0X:00.0 Network controller: Broadcom Corporation Unknown device 4311 (rev 01)

Step 1 - Remove any existing copies of ndiswrapper that you may have

user@ubuntu:~$ ndiswrapper

If you get an error stating that the program is not installed then proceed to the Step 2.

Here is how to remove a copy that was installed using apt-get:

user@ubuntu:~$ sudo apt-get remove ndiswrapper

If you have an existing copy that you installed using make then change to the driver's directory and remove it using make:

user@ubuntu:~$ make uninstall

Run ndiswrapper once more to make sure that you get the not installed error message:

user@ubuntu:~$ ndiswrapper

It is also advisable to remove ndiswrapper module from kernel when using ndiswrapper 1.29

user@ubuntu:~$ sudo rmmod ndiswrapper

recommend that you reboot before continuing particularly using ndiswrapper 1.29.

As of 01/17/2007, the Latest ndiswrapper version is 1.34 - several successful installs already.

Step 2 - Disable any Competing Drivers

The Ubuntu 6.10 Edgy Eft release has a kernel driver for this device that is called bcm43xx. Prior releases may have this device as well. In order to use ndiswrapper you must put the bcm43xx in the black list file.

echo 'blacklist bcm43xx' | sudo tee -a /etc/modprobe.d/blacklist

The blacklisted module will not be loaded on reboot from now on.

Check the contents of the /etc/iftab file and make sure that no other device has the wlan0 driver name reserved for it:

user@ubuntu:~$ cat /etc/iftab

Hardy no longer uses the file /etc/iftab, instead /etc/udev/rules.d/70-persistent-net.rules is used.

user@ubuntu:~$ gksu gedit /etc/udev/rules.d/70-persistent-net.rules

If there are any lines assigning the name wlan0 to a MAC identifier then either remove that line or comment it out with the "#" character.

The line assigning the name eth1 may also need to be commented out. (see Step 6)

Step 3 - Prepare the Linux build environment

You will need to install the essential build files to compile the driver:

user@ubuntu:~$ sudo apt-get update
user@ubuntu:~$ sudo apt-get install build-essential

Install the correct headers for your version of Ubuntu: (don't worry if it tells you that yours are up to date.)

user@ubuntu:~$ sudo apt-get install linux-headers-`uname -r`
user@ubuntu:~$ sudo ln -s /usr/src/linux-`uname -r` /lib/modules/`uname -r`/build

Step 4 - Download the latest version of the ndiswrapper driver

Download the latest version of the ndiswrapper from sourceforge:

At the time I originally wrote this the latest version was 1.28:

Or, from the command line:

user@ubuntu:~$ sudo wget

Now 1.35 is available:

user@ubuntu:~$ sudo wget

1.46 is now available (June 6th, 2007) and has been used successfully. Just replace 1.28 or 1.35 below with 1.46:

user@ubuntu:~$ sudo wget

Move the file from the Desktop, or from wherever you download it, to your home directory. You can open you home directory from the middle top menu called "Places" by selecting "Home Folder" and then copying the file into your home using your mouse pointer.

It should be noted that as the ndiswrapper is further developed it could be the case that any particular NDIS driver's compatibility could become broken for awhile.

Step 5 - Extract and install the ndiswrapper using make

Using tar extract the archived driver and change directories into the build area.

user@ubuntu:~$ tar -xvzf ndiswrapper-1.28.tar.gz
user@ubuntu:~$ cd ndiswrapper-1.28

Make the driver with the commands "make distclean", "make", and "make install":

user@ubuntu:~/ndiswrapper-1.28$ make distclean
user@ubuntu:~/ndiswrapper-1.28$ make
user@ubuntu:~/ndiswrapper-1.28$ sudo make install

The make process will take several minutes to complete.

You can now check the ndiswrapper to see that it is installed correctly. You should see something similar to:

user@ubuntu:~/ndiswrapper-1.28$ ndiswrapper -v
utils version: 1.9
driver version:        1.28
vermagic:       2.6.17-10-generic SMP mod_unload 586 REGPARM gcc-4.1

Obtain the Windows NDIS drivers that you intend to use with the device. In this case we are going to download the drivers from the Hewlett Packard or Compaq web sites.

For another device you should look at the ndiswrapper site's device listing and obtain your drivers from the described location. Or if you only have the install CD you can try to use those drivers, but it might not work.

The driver that we are using can be obtained from Hewlett Packard. Download this file and put it into your home directory.

user@ubuntu:~/ndiswrapper-1.28$ sudo wget -O${HOME}/sp33008.exe

Once we've got the archive file from a manufacturer, the "cabextract" tool will be required to extract the archive:

Edit the /etc/apt/sources.list and uncomment the line for the universe repository and then run apt-get update and install:

user@ubuntu:~/ndiswrapper-1.28$ gksudo gedit /etc/apt/sources.list

Find and uncomment these lines:

deb edgy universe
deb-src edgy universe


deb edgy-security universe
deb-src edgy-security universe

Run apt-get update and install the cabextract and unzip package:

user@ubuntu:~/ndiswrapper-1.28$ sudo apt-get update
user@ubuntu:~/ndiswrapper-1.28$ sudo apt-get install cabextract unzip

Create the directory bcm4311 and move the file sp33008.exe into it and extract the file using cabextract or unzip:

user@ubuntu:~/ndiswrapper-1.28$ cd ~
user@ubuntu:~$ mkdir bcm4311
user@ubuntu:~$ mv sp33008.exe bcm4311
user@ubuntu:~$ cd bcm4311
user@ubuntu:~/bcm4311$ cabextract sp33008.exe

or if above fails

user@ubuntu:~/bcm4311$ unzip sp33008.exe

Now we can install the drivers:

user@ubuntu:~/bcm4311$ sudo ndiswrapper -i bcmwl5.inf

You should see output similar to this during the install:

installing bcmwl5 ...
forcing parameter IBSSGMode from 0 to 2
forcing parameter IBSSGMode from 0 to 2
forcing parameter IBSSGMode from 0 to 2
forcing parameter IBSSGMode from 0 to 2
forcing parameter IBSSGMode from 0 to 2
forcing parameter IBSSGMode from 0 to 2
forcing parameter IBSSGMode from 0 to 2
forcing parameter IBSSGMode from 0 to 2
forcing parameter IBSSGMode from 0 to 2
forcing parameter IBSSGMode from 0 to 2
forcing parameter IBSSGMode from 0 to 2
forcing parameter IBSSGMode from 0 to 2
forcing parameter IBSSGMode from 0 to 2
forcing parameter IBSSGMode from 0 to 2
forcing parameter IBSSGMode from 0 to 2
forcing parameter IBSSGMode from 0 to 2
forcing parameter IBSSGMode from 0 to 2
forcing parameter IBSSGMode from 0 to 2
forcing parameter IBSSGMode from 0 to 2
forcing parameter IBSSGMode from 0 to 2

You should not receive any warnings or errors.

Using ndiswrapper we can list the installed driver to make sure that we have it:

user@ubuntu:~bcm4311$ ndiswrapper -l
installed drivers:
bcmwl5          driver installed, hardware (14E4:4324) present (alternate driver: bcm43xx)

If all you see is the driver, but there is no message displayed about the hardware being present, then you need to tell ndiswrapper to use your driver with your device. You will need to determine what the device ID is by typing 'lspci -n' or 'lsusb'. Once you have the device ID, then use the driver:

user@ubuntu:~/bcm4311$ sudo ndiswrapper -a 14E4:4324 bcmwl5

Make sure you fill in '14E4:4324' with YOUR device id, and 'bcmwl5' with your driver.

We can also look inside the directory where the drivers get stored by ndiswrapper:

user@ubuntu:~/bcm4311$ ls /etc/ndiswrapper

And the contents of the bcmwl5 subdirectory are:

user@ubuntu:~/bcm4311$ ls /etc/ndiswrapper/bcmwl5
14E4:4311:1363:103C.5.conf  14E4:4319:1359:103C.5.conf
14E4:4311:1364:103C.5.conf  14E4:4319:135A:103C.5.conf
14E4:4311:1365:103C.5.conf  14E4:4319.5.conf
14E4:4311.5.conf            14E4:4320:00E7:0E11.5.conf
14E4:4312:135F:103C.5.conf  14E4:4320:12F4:103C.5.conf
14E4:4312:1360:103C.5.conf  14E4:4320:12F8:103C.5.conf
14E4:4312:1361:103C.5.conf  14E4:4320:12FA:103C.5.conf
14E4:4312:1362:103C.5.conf  14E4:4320:12FB:103C.5.conf
14E4:4312.5.conf            14E4:4320.5.conf
14E4:4318:1355:103C.5.conf  14E4:4324:12F9:103C.5.conf
14E4:4318:1356:103C.5.conf  14E4:4324:12FC:103C.5.conf
14E4:4318:1357:103C.5.conf  14E4:4324.5.conf
14E4:4318.5.conf            bcmwl5.inf
14E4:4319:1358:103C.5.conf  bcmwl5.sys

Move the 14E4:4324.5.conf file into .conf:

user@ubuntu:~/bcm4311$ sudo cp /etc/ndiswrapper/bcmwl5/14E4:4324.5.conf /etc/ndiswrapper/bcmwl5/.conf

Edit the new .conf file:

  • On 1.28: I also didn't need to edit this file. (FYI, DLink router.) --Jamie Jackson
  • On 1.29: altering config file proved to be not needed. --Teaker1s
  • On 1.34: No changes to config file required. --AntiFlash

  • On 1.35: My ndiswrapper -l showed 14E4:4311, so I used an appropriate .conf file and made no changes to it - is it a good idea? -- grybba
  • On 1.43: My ndiswrapper -l showed 14E4:4311, so I used the appropriate .conf file and made no changes to it, and it worked fine -- cro

user@ubuntu:~/bcm4311$ gksudo gedit /etc/ndiswrapper/bcmwl5/.conf

Change the .conf file and change the line "Afterburner|1" to "Afterburner|0"



This turns off a Broadcom extention to the 802.11x standards that improves throughput when you are using all Broadcom devices. It also will not let this device work with my Linksys Access Point unless it is turned off. Perhaps this would not be necessary with some Broadcom Access Points?

Bring up the driver:

user@ubuntu:~/bcm4311$ sudo depmod -a
user@ubuntu:~/bcm4311$ sudo modprobe ndiswrapper

If you do not get any errors and your system does not immediately freeze the driver should now be loaded. Do not reboot until we have made some basic checks and installed the driver permanently.

Step 6 - Install the device and configure the network settings

Issuing an iwconfig command should reveal that your device is waiting to be configured, similar to this one:

user@ubuntu:~/bcm4311$ iwconfig
lo        no wireless extensions.

eth0      no wireless extensions.

wlan0     IEEE 802.11b  ESSID:off/any
          Mode:Managed  Frequency:2.412 GHz  Access Point: Not-Associated
          Bit Rate:11 Mb/s
          RTS thr:2432 B   Fragment thr:2432 B
          Power Management:off
          Link Quality:95/100  Signal level:-35 dBm  Noise level:-96 dBm
          Rx invalid nwid:0  Rx invalid crypt:0  Rx invalid frag:0
          Tx excessive retries:0  Invalid misc:0   Missed beacon:0

sit0      no wireless extensions.

If your device shows up as wlan0 then you should be able to put your data in through the System-->Administration-->Networking applet.

(If your wireless device initially shows up as eth1, go back to step 2 and comment out the eth1 line in /etc/iftab. Then resume the rest of the instructions. If you don't comment out the eth1 entry, ndiswrapper won't be able to alias the device as wlan0.)

If it is eth1 or some other name then you should put in the data in interfaces using the gedit editor as explained below and fix the name as is described later in the procedure as well.

You just need to end up with the record formats that I am showing in my example. I used gedit to put the required record into the /etc/network/interfaces file: (note that the Xs are your actual WEP key.)

user@ubuntu:~/bcm4311$ gksudo gedit /etc/network/interfaces

Create a record that looks like this: (Note we are using 128bit WEP encryption in this example.)

iface wlan0 inet dhcp
wireless-essid My_Essid
auto wlan0

Save the file.

Make the driver permanent using the ndiswrapper method:

user@ubuntu:~/bcm4311$ sudo ndiswrapper -m
adding "alias wlan0 ndiswrapper" to /etc/modprobe.d/ndiswrapper ...
couldn't add module alias:  at /usr/sbin/ndiswrapper line 717.

Critical Notice: Check the file /etc/modprobe.d/ndiswrapper file and make sure that the ndiswrapper alias is wlan0 an not something else such as eth1.

Use cat to look at /etc/modprobe.d/ndiswrapper and ensure that it contains the line "alias wlan0 ndiswrapper" and nothing else:

user@ubuntu:~/bcm4311$ cat /etc/modprobe.d/ndiswrapper

Make sure that it contains only the wlan0 identifier and no other:

alias wlan0 ndiswrapper

If it contains anything else edit /etc/modprobe.d/ndiswrapper and ensure that it contains the line "alias wlan0 ndiswrapper" and nothing else:

user@ubuntu:~/bcm4311$ gksudo gedit /etc/modprobe.d/ndiswrapper

Save the file.

Reboot your system in preparation for testing and validation of your work.

Step 7 - Testing the device

Now when we run iwconfig we should see that your ESSID and Access Point fields have been filled in with your access point's correct information and the Frequency field shows the correctly detected frequency:

user@ubuntu:~bcm4311$ iwconfig
lo        no wireless extensions.

eth0      no wireless extensions.

wlan0     IEEE 802.11b  ESSID:"My_Essid"
          Mode:Managed  Frequency:2.412 GHz  Access Point: 00:08:74:02:01:FC
          Bit Rate:11 Mb/s
          RTS thr:2432 B   Fragment thr:2432 B
          Power Management:off
          Link Quality:95/100  Signal level:-35 dBm  Noise level:-96 dBm
          Rx invalid nwid:0  Rx invalid crypt:0  Rx invalid frag:0
          Tx excessive retries:0  Invalid misc:0   Missed beacon:0

sit0      no wireless extensions.

The ESSID field should contain the name of your wireless network and the Access Point field should be filled in with the MAC identifier of your access point.

Run a ip route command, and you should see that the correct routing is setup:

user@ubuntu:~$ ip r dev wlan0  proto kernel  scope link  src dev lo
default via

In this case is the gateway address to an Internet router.

If everthing looks good then all of your network data has been entered correctly.

Step 8 - Controlling the device

My system does not restart this device on startup, so I use the ifup and ifdown commands to control it. Scanning is supported in iwlist so you can scan for networks and wifi-radar works as well.

You can now control the device with ifup and ifdown:

user@ubuntu:~$ sudo ifdown wlan0
user@ubuntu:~$ sudo ifup wlan0
user@ubuntu:~$ sudo iwlist wlan0 scanning

Removing and inserting the device should remove and setup the network correctly, at least it does with this device.

If you need to restore or change your system's route to the internet you can use dhclient:

user@ubuntu:~$ sudo dhclient wlan0

when you are happy that your wireless networking is correct then

gksudo gedit /etc/modules

Add the word ndiswrapper and save the file using "save as" this will then load everytime you boot

Hopefully, you have arrived at the end of this procedure with a working device. Refer questions to the Networking & Wireless section of the forums.

NetworkManager (optional)

NetworkManager is a tool that scans and connects to wireless networks, and defaults to a wired network if one is present. Thus, it is especially well suited to mobile users. Once installed, its interface is accessed through a tray icon (near the system clock).

Hand over control to NetworkManager ("All your interface are belong to us")

In order for NetworkManager to be able to take control over your networking devices (wired and wireless), you'll need to take control away from the stock Ubuntu network manager. (Is this the right lingo? -JJ)

Edit the following file, and comment out (put a "#" in front of) all lines that don't reference the "lo" interface. (N.B. there are two lines, probably at the top, which do reference the "lo" interface. Again, leave these two alone, uncommented.)

user@ubuntu:~/bcm4311$ gksudo gedit /etc/network/interfaces

Download NetworkManager

This is Gnome's NetworkManager. (I think Kubuntu/KDE would use network-manager-kde.)

sudo apt-get install network-manager-gnome

note If you don't want to edit the above config file now on your desktop panel you want to click system administration networking

it's important to make sure that devices show un-configured so network-manager-gnome can control them. Shutdown and remove Ethernet cable, boot and you should now left click network applet next to volume icon select your network and put in Passphrase or network key

Give your system a kick.

The next step may or may not be necessary, and I'm not sure exactly what it does. However, if you don't have the NetworkManager icon yet or it's not working...

sudo /etc/init.d/dbus restart

Adding WPA Support (optional)

(The following instructions are adapted from the blog.)

N.B. Perform the above step ("Download NetworkManager") before adding WPA support. After you have done so, follow the instructions below:

Create a file, /etc/default/wpasupplicant, and add the entry ENABLED=0 to it. (The following command will do all of this for you.)

echo 'ENABLED=0' | sudo tee -a /etc/default/wpasupplicant

Do this restart thing that I don't completely understand.

sudo /etc/init.d/dbus restart

Hopefully, you now have spiffy wireless with automatic network scanning and WPA!


ndiswrapper team:

Pontus Fuchs - Main developer.

Giridhar Pemmasani - Main developer.

Various - Misc minor patches.

Teaker1s - Minor edit of this page for ndiswrapper 1.29 /setting ndiswrapper to boot + Bug

Jamie Jackson - WPA, NetworkManager docs, and misc other tweaks.


Ndiswrapper 1.29 doesn't seem to accept drivers loaded with ndisgtk gui also correctly loaded drivers via terminal won't show in ndisgtk with ndiswrapper 1.29-1.34 tested and bug.

If you follow this and you receive fatal error like this

FATAL: Error inserting ndiswrapper (/lib/modules/2.6.17-10-generic/kernel/drivers/net/ndiswrapper/ndiswrapper.ko): Invalid argument

or trying several known drivers results in invalid driver then install

sudo apt-get install ndiswrapper-common ndiswrapper-utils ndiswrapper-utils-1.1 ndiswrapper-utils-1.8 

Reinstall driver and check for driver and hardware installed

sudo ndiswrapper -l

If it still returns fatal then from experience you haven't removed the kernel module and rebooted prior to building 1.29 source. Invalid driver with ndiswrapper's version of bcmwl5 would appear that certain manufacturers customize the driver and using your hardware manufacturers version of bcmwl5 results in success. Also be aware certain installs require all extracted files in the same directory- and not just bcmwl5.inf, for successful bcmwl5.inf

Upgrade to Feisty isn't updating to ndiswrapper-utils-1.9 and wireless is off. manually install and wireless will light up as normal again.

bcm4311 now becomes in feisty

Network controller: Broadcom Corporation Dell Wireless 1390 WLAN Mini-PCI Card (rev 01)

Necessary Changes or Questions

Please contact FrodoB through a private message or through the Networking & Wireless section of the forums if you see items that need to be clarified or improved upon. Thank you very much.


WifiDocs/Device/Broadcom_BCM4311_rev_01_(ndiswrapper) (last edited 2011-06-22 13:16:36 by jengelh)