Group: Hardware/research/WiFi access points/brcm47xx

From LibrePlanet
Jump to: navigation, search

Some old broadcom WiFi chips are compatible with the free OpenFWWF firmware.

This firmware is still packaged in FSDG compliant distributions and made it possible to use some WiFi cards.

For instance in Parabola, it's available in the linux-libre-firmwares package.

Several WiFi access point also had WiFi interfaces that were compatible with this free firmware.

This article documents how to use OpenFWWF instead of the nonfree firmware in an old version of OpenWRT. It may or may not work with current versions of OpenWRT or LibreCMC.

The goal here is not to use OpenWRT as it's not FSDG compliant, but instead to document ways to use the WiFi interface in a way that don't require any nonfree software.

This could for instance enable to add support for such WiFi access point in FSDG compliant distributions like libreCMC if the hardware is still powerful enough to be supported by libreCMC (devices with 4MB of flash and 32MB of RAM are to be removed soon from OpenWRT).

At that time the following drivers were available in Linux for broadcom WiFi adapters:

    • b43
    • b43-legacy for older cards.

In this page, only the b43 driver was tested with OpenFWWF.

HOWTO

This HOWTO was tested in July 2009.

Howto create a free rootfs

checkout the svn of openwrt

svn co svn://svn.openwrt.org/openwrt/trunk

then type:

make menuconfig

and chose your options:

  • in "Target System" choose "Broadcom BCM947xx/953xx [2.6]"
  • in "Target Profile" choose "Broadcom BCM43xx WiFi (default)"
  • in "Target Images" choose: "[*] squashfs"

while it sounds crazy to choose only squashfs(because it's a highly compressed *read only* filesystem),it isn't: openwrt automatically creates some others partitions during the first boot such as some jffs2 partition for storing what you change in the root filesystem.

  • chose the free firmware as wifi firmware here:
-> Kernel modules
   -> Wireless Drivers
      -> kmod-b43.................................. Broadcom 43xx wireless support (PACKAGE_kmod-b43 [=y])
         -> b43 firmware version (<choice> [=y])
  • in "Network" choose "hostapd" "hostapd-mini" "hostapd-utils"

I have chosen the mini and the normal in order to be sure to have everything,hostapd-utils are utilities like hostpad-cli that permit you to access the running daemon: here what it can do:

# hostapd_cli -i wlan1
hostapd_cli v0.6.9
Copyright (c) 2004-2009, Jouni Malinen <j@w1.fi> and contributors

This program is free software. You can distribute it and/or modify it
under the terms of the GNU General Public License version 2. 

Alternatively, this software may be distributed under the terms of the
BSD license. See README and COPYING for more details. 

 

Interactive mode 

> help
Commands:
   mib                  get MIB variables (dot1x, dot11, radius)
   sta <addr>           get MIB variables for one station
   all_sta              get MIB variables for all stations
   new_sta <addr>       add a new station
   sa_query <addr>      send SA Query to a station
   help                 show this usage help
   interface [ifname]   show interfaces/select interface
   level <debug level>  change debug level
   license              show full hostapd_cli license
   quit                 exit hostapd_cli
> 
  • chose the additional packages you want
  • if you want the 2.6.30 kernel you need to modify a Makefile(which one?)
  • exit and save your configuration
  • in order to have enough space for having a jffs2 writable partition you might need to do the following:
make kernel_menuconfig

then select the following option:

-> General setup
  ->Optimize for size
  • then exit and save the configuration
  • then type:
make

and wait a lot of time until completion

After creating the rootfs

  • flash your firmware

then log into your router

  • verify if you have the right kernel with :
uname -a
  • verify what modules are loaded with:
lsmod
  • verify if you have the right firmware with:
ls -l /lib/firmware

if there is a directory named b43-open the right firmware was compiled and installed then we need to do some work: prepare the firmware directory

cd /lib/firmware
ln -s b43-open b43
rm -rf b43-legacy

maybe we need to understand how to remove b43-legacy support

  • prepare the modules for the free firmware:
rm /etc/modules.d/30-b43-legacy

edit the 30-b43 file and change the line with "b43" in "b43 qos=0" because the free firmware doesn't support QOS yet vi /etc/modules.d/30-b43

testing(optional,for debugging purpose or test purposes)

  • then we need to bring up the wifi interface:
ifconfig wlan0 up

this may take a long time because the file b43/pcm5.fw is not present...this is normal if we use the free firmware here's a result of the command:

root@OpenWrt:~# ifconfig wlan0 up 
b43 ssb0:3: firmware: requesting b43/ucode5.fw
b43 ssb0:3: firmware: requesting b43/pcm5.fw
b43 ssb0:3: firmware: requesting b43/b0g0initvals5.fw
b43 ssb0:3: firmware: requesting b43/b0g0bsinitvals5.fw
b43-phy0: Loading OpenSource firmware version 410.31754
b43-phy0: Hardware crypto acceleration not supported by firmware
b43-phy0: QoS not supported by firmware
Registered led device: b43-phy0::tx
Registered led device: b43-phy0::rx
b43-phy0: Radio turned on by software

then configure the interface:

ifconfig wlan0 10.0.0.1 netmask 255.255.255.0

then edit /etc/dnsmasq.conf to match the ip then edit /etc/hostapd.conf:

vi /etc/hostapd.conf

and add the following into it:

interface=wlan0
driver=nl80211
logger_syslog=-1
logger_syslog_level=2
logger_stdout=-1
logger_stdout_level=2
ssid=liberated_ap
hw_mode=g
channel=7
beacon_int=100
dtim_period=2
max_num_sta=255
rts_threshold=2347
fragm_threshold=2346
macaddr_acl=0
auth_algs=3
ignore_broadcast_ssid=0
eapol_key_index_workaround=0
own_ip_addr=127.0.0.1

I don't know all the details of the configuration file but it's a default configuration a little bit modified then do:

hostapd /etc/hosapd.conf &

it will also take a long time because of b43/pcm5.fw here the output of this command on my router: ~# hostapd /etc/hostapd.conf

Configuration file: /etc/hostapd.conf
b43 ssb0:3: firmware: requesting b43/pcm5.fw
b43-phy0: Loading OpenSource firmware version 410.31754
b43-phy0: Hardware crypto acceleration not supported by firmware
b43-phy0: QoS not supported by firmware
Registered led device: b43-phy0::tx
Registered led device: b43-phy0::rx
Using interface wlan0 with hwaddr 00:14:bf:e1:da:df and ssid 'wrt54gs_freeopenwrt'

then connect to it with a laptop or desktop computer...

Real Setup

  • just edit the /etc/config/wireless file and replace that line:
        option disabled 1

by that line:

        option disabled 0

Notes

  • The wifi setup can take some time,please be patient

TODO

  • try wep/wpa