Linux: How to Get Wireless to Work
This page is my notes on getting your laptop's builtin wi-fi device to work on Linux. I assume you are using Ubuntu Linux, but others are similar.
Basic steps:
- Get your machine updated fully first. For example, Run
sudo apt-get update
,sudo apt-get upgrade
,sudo apt-get dist-upgrade
, in this order. - Reboot the machine and check if your wireless is working. For example,
ping example.com
. - If not, then find out what the company name and model is your network device.
- Install the drivers. (open source or proprietary) And install firmware, if necessary
How to do find out the wireless device maker/model?
To list PCI* devices, do lspci
. PCI is Peripheral Component Interconnect (Peripheral Controller Interface), a computer bus for attaching hardware devices in a computer. (e.g. graphics cards, audio card, networking card)
Here's sample output of my wireless device:
xah@xahcp:~$ lspci 00:00.0 Host bridge: Advanced Micro Devices [AMD] nee ATI RS480 Host Bridge (rev 01) 00:01.0 PCI bridge: Advanced Micro Devices [AMD] nee ATI RS480 PCI Bridge 00:05.0 PCI bridge: Advanced Micro Devices [AMD] nee ATI RS480 PCI Bridge 00:13.0 USB controller: Advanced Micro Devices [AMD] nee ATI IXP SB400 USB Host Controller 00:13.1 USB controller: Advanced Micro Devices [AMD] nee ATI IXP SB400 USB Host Controller 00:13.2 USB controller: Advanced Micro Devices [AMD] nee ATI IXP SB400 USB2 Host Controller 00:14.0 SMBus: Advanced Micro Devices [AMD] nee ATI IXP SB400 SMBus Controller (rev 11) 00:14.1 IDE interface: Advanced Micro Devices [AMD] nee ATI IXP SB400 IDE Controller 00:14.3 ISA bridge: Advanced Micro Devices [AMD] nee ATI IXP SB400 PCI-ISA Bridge 00:14.4 PCI bridge: Advanced Micro Devices [AMD] nee ATI IXP SB400 PCI-PCI Bridge 00:14.5 Multimedia audio controller: Advanced Micro Devices [AMD] nee ATI IXP SB400 AC'97 Audio Controller (rev 02) 00:14.6 Modem: Advanced Micro Devices [AMD] nee ATI IXP SB400 AC'97 Modem Controller (rev 02) 00:18.0 Host bridge: Advanced Micro Devices [AMD] K8 [Athlon64/Opteron] HyperTransport Technology Configuration 00:18.1 Host bridge: Advanced Micro Devices [AMD] K8 [Athlon64/Opteron] Address Map 00:18.2 Host bridge: Advanced Micro Devices [AMD] K8 [Athlon64/Opteron] DRAM Controller 00:18.3 Host bridge: Advanced Micro Devices [AMD] K8 [Athlon64/Opteron] Miscellaneous Control 01:05.0 VGA compatible controller: Advanced Micro Devices [AMD] nee ATI Radeon XPRESS 200M 5955 (PCIE) 06:02.0 Network controller: Broadcom Corporation BCM4318 [AirForce One 54g] 802.11g Wireless LAN Controller (rev 02) 06:06.0 Ethernet controller: Realtek Semiconductor Co., Ltd. RTL-8139/8139C/8139C+ (rev 10)
lspci -vvv
for full info on the devices.
Following is a part of the output of lspci -vvv
, showing my wireless device.
06:02.0 Network controller: Broadcom Corporation BCM4318 [AirForce One 54g] 802.11g Wireless LAN Controller (rev 02) Subsystem: Hewlett-Packard Company Broadcom 802.11b/g WLAN Control: I/O- Mem+ BusMaster+ SpecCycle- MemWINV- VGASnoop- ParErr- Stepping- SERR- FastB2B- DisINTx- Status: Cap- 66MHz- UDF- FastB2B- ParErr- DEVSEL=fast >TAbort- <TAbort- <MAbort- >SERR- <PERR- INTx- Latency: 64 Interrupt: pin A routed to IRQ 21 Region 0: Memory at c0200000 (32-bit, non-prefetchable) [size=8K] Kernel driver in use: b43-pci-bridge Kernel modules: ssb
Following is a part of the output of lspci -vvv
, showing my ethernet (wired) device.
06:06.0 Ethernet controller: Realtek Semiconductor Co., Ltd. RTL-8139/8139C/8139C+ (rev 10) Subsystem: Hewlett-Packard Company Device 30a4 Control: I/O+ Mem+ BusMaster+ SpecCycle- MemWINV- VGASnoop- ParErr- Stepping- SERR- FastB2B- DisINTx- Status: Cap+ 66MHz- UDF- FastB2B+ ParErr- DEVSEL=medium >TAbort- <TAbort- <MAbort- >SERR- <PERR- INTx- Latency: 128 (8000ns min, 16000ns max) Interrupt: pin A routed to IRQ 22 Region 0: I/O ports at a000 [size=256] Region 1: Memory at c0202000 (32-bit, non-prefetchable) [size=256] Capabilities: <access denied> Kernel driver in use: 8139too Kernel modules: 8139too, 8139cp
How to list all USB devices?
To list USB devices: lsusb
.
Sample output.
xah@xahcp:~$ lsusb Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub Bus 002 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub Bus 003 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub Bus 002 Device 002: ID 046d:c018 Logitech, Inc. Optical Wheel Mouse
If the menu bar shows “device not ready firmware missing”, then you need to install the firmware.
How to search the available drivers/firmware for a network device?
Once you got the name of your network device, you might web search to find lots useful info. (see bottom of this page for references) Then, you can also search the packages for the drivers.
So, once i know my device is “Broadcom … BCM4318 … 802.11g …”, from the web i found related names “b43*” chipset. I can do search like this: apt-cache search broadcom
and apt-cache search firmware
and apt-cache search b43
. These commands lets me search for a package for the firmware or driver.
xah@xahcp:~$ apt-cache search broadcom b43-fwcutter - Utility for extracting Broadcom 43xx firmware broadcom-sta-common - Common files for the Broadcom STA Wireless driver broadcom-sta-source - Source for the Broadcom STA Wireless driver firmware-crystalhd - Crystal HD Video Decoder (firmware) bcmwl-kernel-source - Broadcom 802.11 Linux STA wireless driver source crystalhd-dkms - Crystal HD Video Decoder (Linux kernel driver) gstreamer0.10-crystalhd - Crystal HD Video Decoder (GStreamer plugin) libcrystalhd-dev - Crystal HD Video Decoder (development files) libcrystalhd3 - Crystal HD Video Decoder (shared library)
xah@xahcp:~$ apt-cache search b43 b43-fwcutter - Utility for extracting Broadcom 43xx firmware firmware-b43-installer - Installer package for firmware for the b43 driver firmware-b43-lpphy-installer - Installer package for firmware for the b43 driver (LP-PHY version) firmware-b43legacy-installer - Installer package for firmware for the b43legacy driver libghc-configfile-dev - Parser and writer for sectioned config files in Haskell libghc-configfile-prof - Parser and writer for sectioned config files in Haskell; profiling libraries
Once you have the package name, to describe what it does, do apt-cache show ‹package_name›
and apt-cache showpkg ‹package_name›
.
xah@xahcp:~$ apt-cache show firmware-b43-installer Package: firmware-b43-installer Priority: optional Section: multiverse/kernel Installed-Size: 35 Maintainer: Ubuntu Developers <ubuntu-devel-discuss@lists.ubuntu.com> Original-Maintainer: Fabrizio Regalli <fabreg@fabreg.it> Architecture: all Source: b43-fwcutter Version: 1:015-9 Depends: b43-fwcutter (>= 1:015-9), bzip2, wget Recommends: linux-image Conflicts: firmware-b43-lpphy-installer Filename: pool/multiverse/b/b43-fwcutter/firmware-b43-installer_015-9_all.deb Size: 3524 MD5sum: 69db16b6be9a28028c04b248edfc206c SHA1: ea12e46859d383ba4d9a77d2ef72bdaf83da7849 SHA256: 4d4f57e194f217da4f1455863b255fec1c3b0a13ec3297c0799c90e7404a6987 Description-en: Installer package for firmware for the b43 driver This package installs the firmware needed for usage of the b43 kernel driver. . Supported chipsets: - BCM4306/3 - BCM4311 - BCM4318 - BCM4321 - BCM4322 (only 14e4:432b) Homepage: http://wireless.kernel.org/en/users/Drivers/b43 Description-md5: 97312c6d9c7624888f4e31a1f191c9ed Bugs: https://bugs.launchpad.net/ubuntu/+filebug Origin: Ubuntu
Then, sudo apt-get install firmware-b43-installer
.
Output: apt-get_install_firmware-b43-installer_2012-10-08.txt
How to list your network devices?
Type ifconfig
.
If your wireless device is working, it should be listed there.
Following is a sample output of a machine when the wireless device is NOT working. (the wired ethernet is working)
xah@xahcp:~$ ifconfig eth0 Link encap:Ethernet HWaddr 00:16:d4:36:19:43 inet addr:192.168.1.4 Bcast:192.168.1.255 Mask:255.255.255.0 inet6 addr: fe80::216:d4ff:fe36:1943/64 Scope:Link UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:274 errors:0 dropped:0 overruns:0 frame:0 TX packets:132 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:37321 (37.3 KB) TX bytes:22428 (22.4 KB) Interrupt:22 Base address:0xa000 lo Link encap:Local Loopback inet addr:127.0.0.1 Mask:255.0.0.0 inet6 addr: ::1/128 Scope:Host UP LOOPBACK RUNNING MTU:16436 Metric:1 RX packets:105 errors:0 dropped:0 overruns:0 frame:0 TX packets:105 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:0 RX bytes:7166 (7.1 KB) TX bytes:7166 (7.1 KB)
Following is a sample output of a machine with both wired and wireless devices are working.
xah@xahcp:~$ ifconfig eth0 Link encap:Ethernet HWaddr 00:16:d4:36:19:43 UP BROADCAST MULTICAST MTU:1500 Metric:1 RX packets:10566 errors:0 dropped:0 overruns:0 frame:0 TX packets:7643 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:11367418 (11.3 MB) TX bytes:1103737 (1.1 MB) Interrupt:22 Base address:0xa000 lo Link encap:Local Loopback inet addr:127.0.0.1 Mask:255.0.0.0 inet6 addr: ::1/128 Scope:Host UP LOOPBACK RUNNING MTU:16436 Metric:1 RX packets:707 errors:0 dropped:0 overruns:0 frame:0 TX packets:707 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:0 RX bytes:64560 (64.5 KB) TX bytes:64560 (64.5 KB) wlan0 Link encap:Ethernet HWaddr 00:14:a5:b6:cd:d1 inet addr:192.168.1.7 Bcast:192.168.1.255 Mask:255.255.255.0 inet6 addr: fe80::214:a5ff:feb6:cdd1/64 Scope:Link UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:11104 errors:0 dropped:0 overruns:0 frame:0 TX packets:7360 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:10044313 (10.0 MB) TX bytes:1153426 (1.1 MB)
How to configure a wireless device?
Call iwconfig
. Here's a sample output of a machine with working wifi.
xah@xahcp:~$ iwconfig lo no wireless extensions. wlan0 IEEE 802.11bg ESSID:"oooo3" Mode:Managed Frequency:2.462 GHz Access Point: 00:90:4C:7E:00:64 Bit Rate=48 Mb/s Tx-Power=20 dBm Retry long limit:7 RTS thr:off Fragment thr:off Power Management:off Link Quality=70/70 Signal level=-40 dBm Rx invalid nwid:0 Rx invalid crypt:0 Rx invalid frag:0 Tx excessive retries:22 Invalid misc:112 Missed beacon:0 eth0 no wireless extensions.
Reference
Here's some sites i found useful.
- 〔WifiDocs/WirelessCardsSupported By Tttt. At https://help.ubuntu.com/community/WifiDocs/WirelessCardsSupported , accessed on 2012-10-08〕
- 〔WifiDocs/Driver/bcm43xx By Ubuntu Documentation Wiki. At https://help.ubuntu.com/community/WifiDocs/Driver/bcm43xx , accessed on 2012-10-08〕
- 〔b43 and b43legacy By Linux Wireless Wiki. At http://linuxwireless.org/en/users/Drivers/b43 , accessed on 2012-10-08〕
- 〔Broadcom BCM4331: “device not ready firmware missing” error By Fernhill Linux Project. At http://askubuntu.com/questions/183192/broadcom-bcm4331-device-not-ready-firmware-missing-error , accessed on 2012-10-08〕