NOTE: this page is for archival only, see the note at the end of the page.


The libertas driver made its debut in the OLPC XO laptop, where it drives a Marvell 88W8388 USB device. In addition to the USB front-end, the driver now includes support for CompactFlash, SDIO, and GSPI interfaces.

Quoting: "Marvell Libertas has an ARM 9 processor and something like 96K of RAM.

Marvell licensed a proprietary microkernel as a framework for developing their firmware for the chip (from whom?).

Since Marvell does not own this code, it is not theirs to give away, though much/most of the code now in the firmware is not encumbered. A suitably motivated person could take the OLPC code and retarget it for some other small embedded operating system (e.g. TinyOS, maybe), and then the firmware could itself be open source."

supported chips

  • Marvell 88W8385 CF/SDIO
  • Marvell 88W8388 USB
  • Marvell 88W8686 SDIO/GSPI

available devices

  • AmbiCom WL54CF (CF)

  • SparkLAN WCFM-100 (CF)

  • Pretec CompactWLAN 802.11g CFEWGS
  • Quatech Airborne (SDIO)
  • SyChip Murata LBWA18HEPZ (SDIO/GSPI)

  • prototype boards
  • OLPC laptop


  • station (with limited roaming support)
  • ad-hoc
  • Mesh on USB devices (802.11s like)

related tools

  • lbsdebug
    • Mainly interesting for developers, it allows to switch various debug messages on and of.
  • lbsfwcutter
    • Can extract a firmware out of a binary file.

You can get the source of the tools via

  • git clone git:// tools

device firmware

All devices need firmware, which can be found in the libertas/ directory in the Linux firmware tree.

  • USB
  • CF
    • Get the libertas-tools from above and change into the fwcutter/ directory. Type make. The makefile will download a binary driver, extract the firmware out of it, checks it. Copy the two firmware files libertas_helper.fw and libertas.fw from the fwcutter/ directory into the /lib/firmware/ directory.

  • SDIO
    • Claud Yu got the driver working, using a firmware 8.73.7.p3 (downloaded from The 9.70.3.p18 firmware doesn't support the CMD_802_11_DATA_RATE command that the libertas driver currently needs.
  • GSPI
    • The GSPI firmware is available in the Linux firmware tree. Copy libertas/gspi8686_v9_helper.bin to /lib/firmware/libertas/gspi8686_hlp.bin and libertas/gspi8686_v9.bin to /lib/firmware/libertas/gspi8686.bin.

using the GSPI device

GSPI devices are intended to be used in embedded systems. They require an IRQ line (driven by the WiFi device) and that the SPI host controller is able to keep the Chip Select signal asserted through multiple bus accesses. Add the libertas_spi device to the SPI device tree in your arch/xxx/mach-xxx/boards/xxx.c – that file should include <linux/spi/libertas_spi.h> and define libertas_spi_platform_data. The SPI .bits_per_word should be set to 16 and .mode left at the default (SPI_MODE_0). You must also configure a pin for the SPI device IRQ. The .dummy_writes option in libertas_spi_platform_data may be set to 1 (the host will clock out dummy bytes, recommended) or 0 (the host will use a fixed delay) – use 0 if you are having trouble with 1 or if you are using a low SPI clock speed.

struct libertas_spi_platform_data provides two (optional) function pointers that the driver will call before setting up or tearing down the network interface:

int (*setup)(struct spi_device *spi);
int (*teardown)(struct spi_device *spi);

You should provide suitable functions here if your embedded system needs to perform additional initialization or cleanup, such as configuring clocks or GPIO pins, for the wireless device.

mailing list


additional web sources

This is a static dump of the old wiki, taken after locking it in January 2015. The new wiki is at
versions of this page: last, v25, v24, v23, v22, v21, v20, v19, v18, v17, v16, v15, v14, v13, v12, v11, v10, v9, v8, v7, v6, v5, v4, v3, v2, v1