EDF Wi-Fi Yocto Integration

Introduction

This page describes the Wi-Fi integration in EDF at the Yocto Project build level. It covers the machine and distro feature flags, kernel driver configuration, wireless daemon selection, firmware packaging, and image-level integration. Use this information to understand the default Wi-Fi configuration shipped in EDF images, or to customize it for your own builds.

For runtime Wi-Fi setup on a running EDF system, see EDF Wi-Fi setup.

Overview

The Yocto wifi feature flag controls Wi-Fi support in EDF, gating all related configuration at the machine, distro, kernel, and image levels. When both the machine and distro enable the wifi feature (COMBINED_FEATURES), the build system automatically:

  • Enables USB Wi-Fi kernel drivers (Atheros, Broadcom, MediaTek, Ralink, Realtek)

  • Adds the required crypto options for iwd

  • Installs iwd as the wireless daemon

  • Installs matching firmware packages for all enabled drivers

  • Includes wireless-regdb for regulatory domain compliance

Machine Feature

The wifi machine feature is enabled for all common EDF machine configurations in the following machine conf files:

  • amd-cortexa53-common.conf

  • amd-cortexa53-mali-common.conf

  • amd-cortexa72-common.conf

  • amd-cortexa78-common.conf

  • amd-cortexa78-mali-common.conf

  • amd-cortexa9thf-neon-common.conf

Each file adds wifi to MACHINE_FEATURES:

MACHINE_FEATURES += "fpga-overlay efi usbgadget wifi"

The wifi distro feature is already enabled by default through Poky’s DISTRO_FEATURES_DEFAULT and does not need to be set explicitly in the EDF distro configuration.

When both machine and distro features include wifi, the resulting COMBINED_FEATURES contains wifi, which gates all later Wi-Fi integration points.

Wireless Daemon Selection

EDF uses iwd (iNet wireless daemon) instead of the legacy wpa_supplicant. This is set at the distro level in conf/distro/amd-edf.conf:

# Use iwd instead of the default wpa-supplicant. iwd is a more modern
# wireless daemon; wpa-supplicant is considered legacy.
WIRELESS_DAEMON = "iwd"

Setting WIRELESS_DAEMON at the distro level ensures consistent daemon selection across all recipes that consume this variable, including packagegroup-base-wifi.

Kernel configuration

USB Wi-Fi Drivers

EDF enables a broad set of USB Wi-Fi drivers through two mechanisms, both gated on COMBINED_FEATURES wifi:

  1. Upstream kernel cache feature (wifi-usb.scc): Atheros ATH9K_HTC, Broadcom BRCMFMAC_USB, MediaTek MT7601U, Ralink RT2500USB/RT73USB/RT2800USB, and Realtek RTL8187/RTL8XXXU/RTL8192CU.

  2. Supplemental fragment (wifi-usb-extra.cfg): additional chipsets not covered by the upstream scc – Atheros CARL9170, the full MediaTek mt76 USB stack (MT7610U through MT7925U Wi-Fi 6E), Ralink RT5370/RT5572/RT3573, Realtek RTW88 USB (8822B/C, 8723D, 8821C), and RTW89 Wi-Fi 6 USB (8851BU, 8852BU).

The wifi-usb-extra.cfg fragment and the iwd-crypto kernel feature are provided by meta-xilinx and available to all linux-xlnx consumers. The EDF layer enables them in linux-xlnx-edf.inc:

# USB wifi drivers (upstream scc + supplemental fragment)
SRC_URI += "${@bb.utils.contains('COMBINED_FEATURES', 'wifi', \
    ' file://wifi-usb-extra.cfg', '', d)}"
KERNEL_FEATURES:append = "${@bb.utils.contains('COMBINED_FEATURES', \
    'wifi', \
    ' features/iwd/iwd-crypto.scc features/wifi/wifi-usb.scc', \
    '', d)}"

Crypto Requirements (iwd)

iwd requires kernel support for Diffie-Hellman key operations, symmetric ciphers (AES, DES, CBC), hash algorithms (HMAC, MD5, SHA1, SHA512), and the user-space crypto API (CONFIG_CRYPTO_USER_API_HASH, CONFIG_CRYPTO_USER_API_SKCIPHER). The meta-xilinx layer provides an iwd-crypto.cfg kernel fragment that enables all required options and their dependencies. The fragment is classified as kconf non-hardware through iwd-crypto.scc for the kernel config audit system, and is gated on COMBINED_FEATURES wifi.

Firmware Packages

EDF installs per-chip firmware subpackages for all enabled USB Wi-Fi drivers, gated on COMBINED_FEATURES wifi. The firmware packages are defined in edf-image-common.inc and use fine-grained subpackages where possible to minimize rootfs size.

The full list of firmware packages:

WIFI_FIRMWARE_INSTALL = " \
    linux-firmware-ath9k \
    linux-firmware-bcm43143 \
    linux-firmware-bcm43242a \
    linux-firmware-bcm43569 \
    linux-firmware-bcm4373 \
    linux-firmware-carl9170 \
    linux-firmware-mt7601u \
    linux-firmware-mt7610 \
    linux-firmware-mt7662 \
    linux-firmware-mt7663 \
    linux-firmware-mt7921 \
    linux-firmware-mt7925 \
    linux-firmware-ralink \
    linux-firmware-rtl8188 \
    linux-firmware-rtl8192cu \
    linux-firmware-rtl8192eu \
    linux-firmware-rtl8723 \
    linux-firmware-rtl8821 \
    linux-firmware-rtl8822 \
    linux-firmware-rtw88 \
    linux-firmware-rtw89 \
    "

Several of the MediaTek and Realtek subpackages (mt7610, mt7662, mt7663, mt7921, mt7925, rtl8192eu, rtw88, rtw89) are defined in a linux-firmware_%.bbappend in meta-amd-edf, since the upstream linux-firmware recipe does not split them into individual packages. This approach replaced the linux-firmware-mediatek catch-all and reduced the MediaTek firmware footprint from approximately 31 MB to 4 MB.

Image Integration

Wi-Fi packages are added to EDF images through edf-image-common.inc:

AMD-EDF_IMAGE_FULL_INSTALL = " \
    ...
    packagegroup-base-wifi \
    ${@bb.utils.contains('COMBINED_FEATURES', 'wifi', \
        '${WIFI_FIRMWARE_INSTALL}', '', d)} \
    "

packagegroup-base-wifi is an OE-Core package group that pulls in the wireless daemon (iwd in EDF) and wireless-regdb when the wifi feature is active. The firmware install list is added so that it can be customized independently.

EDF images also include usb-modeswitch and usb-modeswitch-data. Some USB devices (including certain Wi-Fi adapters such as those based on Realtek RTL8851BU) enumerate as mass storage on plugin and require a mode switch to activate their primary function. usb-modeswitch handles this automatically through udev rules. This package is installed unconditionally because it also supports non-Wi-Fi devices (cellular modems, USB Ethernet).

Customization

Disabling Wi-Fi Entirely

Remove wifi from MACHINE_FEATURES in your machine configuration or add the following to local.conf:

MACHINE_FEATURES:remove = "wifi"

This disables all Wi-Fi kernel drivers, firmware, and user-space packages in a single setting.

Adding a New USB Wi-Fi Driver

To add support for a new USB Wi-Fi chipset:

  1. Add the kernel config option to wifi-usb-extra.cfg:

    CONFIG_NEW_DRIVER=m
    
  2. Identify the required firmware files and add the corresponding linux-firmware subpackage to WIFI_FIRMWARE_INSTALL in edf-image-common.inc. If no upstream subpackage exists, create one in the linux-firmware_%.bbappend.

  3. Rebuild the kernel and image:

    $ MACHINE=<machine> bitbake virtual/kernel -c cleansstate
    $ MACHINE=<machine> bitbake edf-linux-disk-image
    

Using wpa_supplicant Instead

To revert to wpa_supplicant instead of iwd, override the distro setting in local.conf:

WIRELESS_DAEMON = "wpa-supplicant"

Note

The iwd-crypto.cfg kernel fragment is still applied but is harmless when using wpa_supplicant. The crypto options it enables are general-purpose and do not interfere with wpa_supplicant operation.

Supported chipsets

The following table lists all USB Wi-Fi chipsets enabled in EDF, grouped by vendor:

Vendor

Chipset

Kernel driver

Firmware package

Atheros

AR9271, AR7010

ATH9K_HTC

linux-firmware-ath9k

Atheros

AR9170

CARL9170

linux-firmware-carl9170

Broadcom

BCM43143

BRCMFMAC_USB

linux-firmware-bcm43143

Broadcom

BCM43242A

BRCMFMAC_USB

linux-firmware-bcm43242a

Broadcom

BCM43569

BRCMFMAC_USB

linux-firmware-bcm43569

Broadcom

BCM4373

BRCMFMAC_USB

linux-firmware-bcm4373

MediaTek

MT7601U

MT7601U

linux-firmware-mt7601u

MediaTek

MT7610U/E, MT7650E

MT76x0U

linux-firmware-mt7610

MediaTek

MT7612U

MT76x2U

linux-firmware-mt7662

MediaTek

MT7663U

MT7663U

linux-firmware-mt7663

MediaTek

MT7921U (Wi-Fi 6)

MT7921U

linux-firmware-mt7921

MediaTek

MT7925U (Wi-Fi 6E)

MT7925U

linux-firmware-mt7925

Ralink

RT2500, RT2501

RT2500USB

linux-firmware-ralink

Ralink

RT2600, RT2700

RT73USB

linux-firmware-ralink

Ralink

RT2800, RT3x00, RT5370, RT5572, RT3573

RT2800USB

linux-firmware-ralink

Realtek

RTL8187

RTL8187

(no firmware needed)

Realtek

RTL8188CUS/RTL8192CU

RTL8192CU

linux-firmware-rtl8192cu

Realtek

RTL8192EU

RTL8XXXU

linux-firmware-rtl8192eu

Realtek

RTL8188EU and others

RTL8XXXU

linux-firmware-rtl8188

Realtek

RTL8723DU

RTW88_8723DU

linux-firmware-rtl8723, linux-firmware-rtw88

Realtek

RTL8821CU

RTW88_8821CU

linux-firmware-rtl8821

Realtek

RTL8822BU/CU

RTW88_8822BU/CU

linux-firmware-rtl8822

Realtek

RTL8851BU (Wi-Fi 6)

RTW89_8851BU

linux-firmware-rtw89

Realtek

RTL8852BU (Wi-Fi 6)

RTW89_8852BU

linux-firmware-rtw89

Next Steps

Wi-Fi support is enabled by default in EDF images, so no additional configuration is needed for a standard build. To build an EDF Linux disk image with Wi-Fi included, follow the existing build instructions in Operating System Integration and Development.

After flashing and booting the image, see EDF Wi-Fi setup for connecting to a Wi-Fi network at runtime.

References