Search by Tags

Setting up Kernel Support for 3rd Party Wi-Fi Adapters in Toradex’s Linux Images

 

Article updated at 21 Jul 2020
Compare with Revision

Subscribe for this article updates

Introduction

Click here to see a complete list of Toradex Computer on Modules (COMs) with integrated Wi-Fi/Bluetooth

Toradex's Embedded Linux BSPs only provide out-of-the-box software support for the LM006 Wi-Fi dongle, Wi2Wi WM828CC6, and AzureWave AW-CM276NF modules (Integrated to selected CoMs). For these modules, the support is already provided with Toradex's Linux images. If this is your case, you can skip this article and go directly to Wi-Fi Connection Bring Up article.

For modules that don't come with on-module Wi-Fi hardware, a mini-PCIe, SDIO or USB Wi-Fi module can be used. This article will provide you an overview of how to set up software drivers for other 3rd party Wi-fi modules.

Other Wi-Fi related articles

If this is not the information you are looking for, please, refer to the Wi-Fi Connectivity with Toradex’s Computer on Module (CoM) article for more Wi-Fi related information.

Setting up 3rd Party Wi-Fi interface modules drivers

Many Wi-Fi modules will work just fine once the matching driver is compiled into a custom Linux kernel. For a complete list of tested modules, see the Adding Wi-Fi Connectivity to Toradex’s Computer on Module (CoM) page.

Note that most Wi-Fi modules require matching firmware as well. It is recommended to first test the selected Wi-Fi module on a regular PC running Linux (e.g. using a mini-PCIe to PCIe adapter if required). Make sure to use a Linux kernel version as close as possible to the version running on the Toradex module. This procedure not only checks if the module works reliably but also can be used to copy the matching firmware from there if required.

Also see the Linux BSP Release, where you can filter for information about the Wi-Fi Subsystem, and the official Linux Wireless wiki, where you can get information such as the supported chips and their drivers status, as well as how to install the firmware, among other information.

Custom Kernel

To enable support for other Wi-Fi hardware a custom Linux kernel is required. Please refer to the Build U-Boot and Linux Kernel from Source Code article concerning its setup/compilation. Once completed continue with the Kernel Driver Backports Integration article.

Note: Since the Embedded Linux BSP 2.7b4, the driver backports are added to the Toradex pre-built image. Please see the Kernel Driver Backports Integration article for further information.

Physical interfaces

Mini-PCIe

Our embedded Linux BSPs so far do not support any mini-PCIe Wi-Fi modules out-of-the-box. However, we successfully tested various mini-PCIe Wi-Fi modules based on Broadcom (e.g. BCM4311KFBG) and Intel (e.g. 4965AGN, 6230AGN, ,N-1000 and N-7260) chip sets.

To configure e.g. support for the Intel 6230AGN mini-PCIe module one has to enable CONFIG_IWLAGN as follows:

[user@host linux-toradex]$ make menuconfig
Device Drivers --->
[*] Network device support --->
[*] Wireless LAN --->
<*> Intel Wireless WiFi Next Gen AGN - Wireless-N/Advanced-N/Ultimate-N (iwlagn)
< Exit > (4 times)
Do you wish to save your new configuration? < Yes >

Then just compile and deploy the custom kernel as explained in the above mentioned article.

During boot one gets the following kernel messages:

[ 7.290881] Intel(R) Wireless WiFi Link AGN driver for Linux, in-tree:
...
[ 7.344598] iwlagn 0000:04:00.0: HW Revision ID = 0x34
[ 7.357966] iwlagn 0000:04:00.0: Detected Intel(R) Centrino(R) Advanced-N 6230 AGN, REV=0xB0
[ 7.369558] iwlagn 0000:04:00.0: L1 Disabled; Enabling L0S
[ 7.396050] iwlagn 0000:04:00.0: device EEPROM VER=0x716, CALIB=0x6
[ 7.405308] iwlagn 0000:04:00.0: Device SKU: 0X1f0

USB

The following USB Wi-Fi sticks with the Realtek RTL8188CUS/RTL8188EUS chip set are supported out-of-the-box. However we successfully tested various USB Wi-Fi modules based on Ralink(e.g RT5370, RT5572), Realtek(e.g RTL8188CUS, RTL8192EU chipset), Zydas(e.g ZD1211B).

  • LM006 USB Wi-Fi

During boot or upon insertion the following kernel messages identify the LM006 stick:

[ 55.779953] usb 3-1: new high speed USB device number 3 using tegra-ehci
[ 55.971825] usb 3-1: New USB device found, idVendor=0bda, idProduct=8176
[ 55.978538] usb 3-1: New USB device strings: Mfr=1, Product=2, SerialNumber=3
[ 55.985743] usb 3-1: Product: 802.11n WLAN Adapter
[ 55.990587] usb 3-1: Manufacturer: Realtek
[ 55.994688] usb 3-1: SerialNumber: 00e04c000001
[ 56.151090] rtl8192cu: MAC address: 5c:f3:70:24:97:e5
[ 56.156167] rtl8192cu: Board Type 0
[ 56.171585] rtlwifi: rx_max_size 15360, rx_urb_num 8, in_ep 1

In user space it can be identified by lsusb as follows:

root@colibri_t20:~# lsusb
...
Bus 003 Device 003: ID 0bda:8176 Realtek Semiconductor Corp. RTL8188CUS 802.11n WLAN Adapter
...
Legacy information regarding the Ambicon WL250N USB Wi-Fi firmware

SDIO

We successfully tested the WiBear 11n SDIO Wi-Fi wireless adapter module based on Marvel 8787 chipset. In addition, Wi2Wi WM828CC6 is employed as the on-module Wi-Fi for some models of the Colibri iMX6ULL SoM, and thus supported out-of-the-box in our BSP.

To configure support for the Marvel 8787 SDIO wireless adapter module one has to enable CONFIG_MWIFIEX, CONFIG_MWIFIEX_SDIO as follows:

[user@host linux-toradex]$ make menuconfig
Device Drivers --->
[*] Network device support --->
[*] Wireless LAN --->
<*> Marvell WiFi-Ex Driver
<*> Marvell WiFi-Ex Driver for SD8786/SD8787/SD8797/SD8887/SD8897
< Exit > (4 times)
Do you wish to save your new configuration? < Yes >

During boot one gets the following kernel messages:

[ 392.591781] mmc1: new high speed SDIO card at address 0001
[ 393.583165] mwifiex_sdio mmc1:0001:1: WLAN FW is active
[ 394.068554] mwifiex_sdio mmc1:0001:1: ignoring F/W country code US
[ 394.118806] mwifiex_sdio mmc1:0001:1: driver_version = mwifiex 1.0 (14.66.35.p52)
[ 429.748907] IPv6: ADDRCONF(NETDEV_UP): mlan0: link is not ready

Firmware

Most Wi-Fi hardware uses specific firmware to operate properly. Certain such firmware can easily be installed as follows:

opkg update
opkg --force-depends install linux-firmware