For many off-the-shelf devices to work a suitable driver needs to be compiled into a custom Linux kernel. Not all such drivers are available in custom downstream Linux kernels in which case one can use the driver backports package including suitable drivers available from later Linux kernel versions.

In other words, backports allows the use of drivers from a newer kernel version on an older kernel version. For instance, we can use Wi-Fi drivers from mainline kernel release 4.19 into our NXP i.MX downstream based on 4.9.

Starting from the Embedded Linux BSP 2.7b4 until 2.8, Toradex added kernel driver backports to its demo images, therefore you may want to have a look at how to build our BSP from scratch using OpenEmbedded, since the backports are already integrated there.

Backports support on Embedded Linux BSP 3.0 has been mostly dropped. See some comments about this below:

The downstream Linux kernel for supported NXP SoCs is recent enough (4.14 for i.MX as of December 2019).

We have the policy to mainline our BSP development. It conflicts with keeping the backports, which is a demanding and complex task.

Should backports ever be requested by customers going forward, we shall re-evaluate our current decision in the future.

For the downstream Apalis TK1 3.10 kernel backports 4.19 is still used unchanged from BSP 2.8.

Attention: Backports are only supported between Embedded Linux BSP 2.7b4 and 2.8 releases (with the exception of downstream Apalis TK1 in BSP 3.0).

The L4T Linux kernel from NVIDIA is not based on top of a clean 3.1 kernel but rather some pre 3.2 version with further Android additions. The backports drivers integrated into the demo images already take that into consideration and have been tested with the L4T Linux kernel.

If manually building backports, one needs to disable the drivers/dependencies enabled in the L4T Linux kernel before cross-compiling the driver backports to avoid any conflicts.

For cross-compiling iwlwifi, it is necessary to disable the following configs in the L4T Linux kernel:

CONFIG_CFG80211

CONFIG_WLAN

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

The Toradex BSP uses a specific backports version and configuration. To use it, first, you have to find out the OpenEmbedded/Yocto Codename that corresponds to the BSP version you want to build the backports for. Check the table at the beginning of the OpenEmbedded (Core) article.

Note: This configuration is the one applied when you create an image through Yocto that uses any kind of backports drivers, and is the same across all modules. Instead of having separated configurations for both approaches (Outside Yocto and through Yocto), we decided to reduce this to the same to improve maintainability.

Clone the backports Git repository, side-by-side with the Linux kernel repository, to your machine and checkout the corresponding remote branch that matches the backports version found in the previous section:

The compiled backports kernel modules are now in the directory linux-toradex/modules, presumably, the same directory that you have previously created while following the article Build the Linux Kernel from Source Code.

With the above procedure you should be effectively using the same configuration that is applied to our backports through a Yocto compilation, enabling WiFi and Bluetooth capabilities to the respective modules.

However, one can use the nconfig or menuconfig options to further configure the driver backports package. Default configuration files are also available which can be used to build the drivers/subsystems. If you choose to use this option just use the make defconfig-option in replacement for make menuconfig.

Note: For BSP 2.7 only defconfig-wifi (e.g. without Bluetooth) is available, which we removed in BSP 2.8 in favor of using the more homogeneous approach, that is explained in the main section of this page.