As detailed in the article I wrote back in September of 2007 (http://bec-systems.com/web/content/view/75/9/), getting embedded wifi modules functioning is not a simple task. However, due to recent advances in the Linux kernel, it looks like a viable solution for low-mid volume products is emerging. This article provides a few details on how to get a Zcomax (Zcom) XG-180MU module working with a PXA270 processor.
The setup used includes:
- Zcomax XG-180MU SDIO Wifi module
- Compulab cm-x270 + sb-x270 system (includes the PXA270 processor)
- Linux kernel 2.6.24-rc5
Support for the Marvell 8385 and 8686 based Wifi chipsets is now included in the mainstream Linux kernel 2.6.24 release candidate source code. To use this driver, enable the CONFIG_LIBERTAS_SDIO option. I also had to enable the CONFIG_WIRELESS_EXT option to prevent a compile error, but this is probably required anyway to build a functioning wireless system.
The firmware for the Marvell SDIO wifi solutions is downloaded at runtime, so the next challenge is to find firmware files. I am working on a project that has access to a driver from Marvell, so I was able to extract this firmware from their source code header files. I’m sure there are other places where this firmware is available. The firmware files must be placed in the following location:
root@cm-x270:~$ ls /lib/firmware/sd* /lib/firmware/sd8385.bin /lib/firmware/sd8385_helper.bin
The version of udev used in OpenEmbedded determines the location of the firmware files. The Libertas Linux driver requests these firmware files, and a userspace component of udev provides these files to the kernel.
The following kernel modules are required:
root@cm-x270:~$ lsmod Module Size Used by pxamci 7008 0 libertas_sdio 8488 0 mmc_core 46868 2 pxamci,libertas_sdio libertas 85288 1 libertas_sdio ieee80211 29956 1 libertas ieee80211_crypt 4768 1 ieee80211 root@cm-x270:~$
And the result:
root@cm-x270:~$ modprobe pxamci root@cm-x270:~$ mmc0: new SDIO card at address 0001 libertas: eth1: Marvell WLAN 802.11 adapter
eth1 Link encap:Ethernet HWaddr 00:60:B3:34:77:66 UP BROADCAST MULTICAST MTU:1500 Metric:1 RX packets:0 errors:0 dropped:0 overruns:0 frame:0 TX packets:0 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:0 (0.0 B) TX bytes:0 (0.0 B)
So it looks like there is finally an embedded Wifi solution for products that sell less than 500,000 units per year. I also briefly tried this on a AT91SAM9260 system, but it did not work. So there is still some work to do on the Linux SDHC driver for the AT91SAM9260.