Getting a USB WiFi dongle working on the UNO Q

(TLDR; - sorry for the rather long post but I wanted to provide all the gory detail)

I have been trying to get an external USB WiFi dongle working on a UNO Q that has faulty WiFi.

Initially I tried this with a TP-Link TL-WN722N which has been my testing go-to for any Linux machine. It uses the ath9k driver and is just plug-n-play pretty much on any Linux distro without any configuration. Well it doesn't work on the UNO Q. I am currently using the official Arduino USB-C hub to connect the dongle, monitor, mouse and keyboard to the UNO Q.

As for the process that I have followed:

  • install the required tools (some were already present)

    sudo apt-get update && sudo apt-get install firmware-ath9k-htc
    sudo apt-get install wireless-tools wpasupplicant

  • Disable the broken internal WiFi

     - edit: sudo nano /etc/modprobe.d/blacklist.conf
     - add:

       blacklist wcn36xx

     - save the file
  • sudo nmcli device set wlan0 managed no

  • Configure the external adapter

     sudo nano /etc/network/interfaces

     Add:

     allow-hotplug wlan1
     iface wlan1 inet dhcp
         wpa-conf /etc/wpa_supplicant/wpa_supplicant.conf

     Save the file.
  • set up the wifi credential in the wpa_supplicant file

  • ip -br a

This did not show a wlan1 device, so I tried modprobing the ath9k driver but got:

modprobe: FATAL: Module ath9k not found in directory /lin/modules/6.16.7-g0dd6551ae96b

A little Googling suggested that this was because the kernel on the UNO Q was compiled without this driver. Given the space constraints, reducing the number of compiled-in drivers makes sense.

I therefore had a look at what other drivers were available on the UNO Q using the following command:

ls -R /lib/modules/$(uname -r)/kernel/

This does list the mt7921 and files called mt7921-common.ko and mt7921e.ko are present in the 'net' sub-directory in the kernel drivers directory. I also Googled it and got this re-assurance from its AI:

Yes, an external MediaTek MT7921U (USB) dongle will work on the Arduino UNO Q, but you should keep a few critical setup requirements in mind regarding its Debian Linux environment, hardware configuration, and built-in features.

I therefore went ahead and purchased a generic dongle (cost 11gbp) based on the mt7921 chip. It supports WiFi 6 and would be an upgrade to the 2.4GHz only TL-WN722N. Sure enough if I plug the mt7921 dongle into either of the Linux computer I have here, it works immediately without configuration. Unfortunately plugging it into the UNO Q does not produce the same result. So much for the AI reply.

I ran modprobe and loaded the mt7921e driver, which did load up along with mt7921-common:

 $ sudo modprobe mt7921-common

Module                  Size  Used by
mt7921e                16384  0
mt7921_common          65536  1 mt7921e
mt792x_lib             49152  2 mt7921e,mt7921_common

However, nmcli does not show a wireless interface. Furthermore, after a restart, it does not load up automatically and has to be modprobed again.

I compared this to what happens on my Linux machine and found that plugging in the dongle there loads the mt7921u driver. A quick comparison between mt7921e and mt7921u reveals that the 'e' variant supports the PCI bus, but the 'u' variant, which is not present on the UNO Q, supports USB devices. It seems I am back to square one again.

I have had a look at the wireless drivers directory using this command:

$ ls -R /lib/modules/$(uname -r)/kernel/drivers/net/wireless/
/lib/modules/6.16.7-g0dd6551ae96b/kernel/drivers/net/wireless/:
ath  broadcom  intel  marvell  mediatek  rsi  ti

/lib/modules/6.16.7-g0dd6551ae96b/kernel/drivers/net/wireless/ath:
ath10k  ath11k  ath12k  ath.ko  wcn36xx

/lib/modules/6.16.7-g0dd6551ae96b/kernel/drivers/net/wireless/ath/ath10k:
ath10k_core.ko  ath10k_pci.ko  ath10k_sdio.ko  ath10k_snoc.ko

/lib/modules/6.16.7-g0dd6551ae96b/kernel/drivers/net/wireless/ath/ath11k:
ath11k_ahb.ko  ath11k.ko  ath11k_pci.ko

/lib/modules/6.16.7-g0dd6551ae96b/kernel/drivers/net/wireless/ath/ath12k:
ath12k.ko

/lib/modules/6.16.7-g0dd6551ae96b/kernel/drivers/net/wireless/ath/wcn36xx:
wcn36xx.ko

/lib/modules/6.16.7-g0dd6551ae96b/kernel/drivers/net/wireless/broadcom:
brcm80211

/lib/modules/6.16.7-g0dd6551ae96b/kernel/drivers/net/wireless/broadcom/brcm80211:
brcmfmac  brcmutil

/lib/modules/6.16.7-g0dd6551ae96b/kernel/drivers/net/wireless/broadcom/brcm80211/brcmfmac:
bca  brcmfmac.ko  cyw  wcc

/lib/modules/6.16.7-g0dd6551ae96b/kernel/drivers/net/wireless/broadcom/brcm80211/brcmfmac/bca:
brcmfmac-bca.ko

/lib/modules/6.16.7-g0dd6551ae96b/kernel/drivers/net/wireless/broadcom/brcm80211/brcmfmac/cyw:
brcmfmac-cyw.ko

/lib/modules/6.16.7-g0dd6551ae96b/kernel/drivers/net/wireless/broadcom/brcm80211/brcmfmac/wcc:
brcmfmac-wcc.ko

/lib/modules/6.16.7-g0dd6551ae96b/kernel/drivers/net/wireless/broadcom/brcm80211/brcmutil:
brcmutil.ko

/lib/modules/6.16.7-g0dd6551ae96b/kernel/drivers/net/wireless/intel:
iwlwifi

/lib/modules/6.16.7-g0dd6551ae96b/kernel/drivers/net/wireless/intel/iwlwifi:
dvm  iwlwifi.ko  mvm

/lib/modules/6.16.7-g0dd6551ae96b/kernel/drivers/net/wireless/intel/iwlwifi/dvm:
iwldvm.ko

/lib/modules/6.16.7-g0dd6551ae96b/kernel/drivers/net/wireless/intel/iwlwifi/mvm:
iwlmvm.ko

/lib/modules/6.16.7-g0dd6551ae96b/kernel/drivers/net/wireless/marvell:
mwifiex

/lib/modules/6.16.7-g0dd6551ae96b/kernel/drivers/net/wireless/marvell/mwifiex:
mwifiex.ko  mwifiex_pcie.ko  mwifiex_sdio.ko

/lib/modules/6.16.7-g0dd6551ae96b/kernel/drivers/net/wireless/mediatek:
mt76

/lib/modules/6.16.7-g0dd6551ae96b/kernel/drivers/net/wireless/mediatek/mt76:
mt76-connac-lib.ko  mt76.ko  mt7921  mt792x-lib.ko

/lib/modules/6.16.7-g0dd6551ae96b/kernel/drivers/net/wireless/mediatek/mt76/mt7921:
mt7921-common.ko  mt7921e.ko

/lib/modules/6.16.7-g0dd6551ae96b/kernel/drivers/net/wireless/rsi:
rsi_91x.ko  rsi_sdio.ko  rsi_usb.ko

/lib/modules/6.16.7-g0dd6551ae96b/kernel/drivers/net/wireless/ti:
wl18xx  wlcore

/lib/modules/6.16.7-g0dd6551ae96b/kernel/drivers/net/wireless/ti/wl18xx:
wl18xx.ko

/lib/modules/6.16.7-g0dd6551ae96b/kernel/drivers/net/wireless/ti/wlcore:
wlcore.ko  wlcore_sdio.ko

Unfortunately, I don't know by looking at the file names whether all of them are PCI drivers? Some are clearly labelled as such with a '_pci' suffiix, but not all. I Googled the ath10k, ath11k and ath12k and they all seem to be PCI only, so am beginning to suspect that perhaps the others are also? Will have to Google a few more I guess.

Has anyone succeeded connecting any kind of USB WiFi dongle to the UNO Q? If so, then which one?

The other "sledge hammer" option apparently is to recompile the kernel adding in the relevant driver flags so they get compiled in. At the moment I am not sure how I would go about this, but also wondering whether a subsequent update would wipe any changes I make anyway? Furthermore, I doubt there would be enough space on the UNO Q itself, so would probably require cross-compiling on a PC, which I have not done before. I would also need help setting up the toolchain for the UNO Q. Is there a FAQ or guide on this anywhere?

(I did get some info from Google's AI, but not sure how accurate it is. I am hoping that someone from Arduino can help me with this?)

Not what you are asking for, but I just had a quick try with the dongle I happened to have on hand. No luck. Mine is the MT7601, so perhaps even less likely to work than yours.

You may find this useful:

And here is the kernel source:

Thank you for trying that. I was wondering about the MT76xx and suspected that the two MT76 files in the Mediatek driver directory are the driver shell and the PCI driver, but couldn't be sure from the file names. I guess your test proves its not a USB driver.

I suspect, since the board already has an onboard WiFi chip, that Qualcomm didn't envisage the need for any USB WiFi drivers so they stripped them out and only included certain PCI drivers to keep the footprint a small as possible.

Thanks for the other links. I will check them out.

How to Cross-Compile & Load Missing Wi-Fi / USB Kernel Modules on Arduino Uno Q (or any Armbian SBC) using WSL2

Minimal embedded Linux images (like Armbian or Debian on the Arduino Uno Q) often ship without on-board kernel headers or build trees. If your USB Wi-Fi dongle or peripheral driver is missing, you cannot compile it directly on the board.

Here is a step-by-step guide to extract your running board's kernel config, cross-compile only the missing .ko driver modules in WSL2 (taking seconds), fix version-magic (vermagic) errors, and load them successfully.


Phase 1: Identify Device & Extract Config (On the Board)

Run these commands on your board's terminal:

1. Identify your USB Dongle Chipset

lsusb

Note down the device ID (e.g., 0bda:8179 Realtek RTL8188EUS or 0cf3:9271 Atheros AR9271).

2. Check the Kernel Release and Suffix

uname -r

Example output: 7.0.0-g122c2c22d838 (note the -g122c2c22d838 localversion).

3. Extract the Running Kernel Config

zcat /proc/config.gz > ~/board.config

4. Find the Board's IP Address

hostname -I

Phase 2: Setup WSL2 Cross-Compilation Environment (In WSL2)

In your WSL2 (Ubuntu) terminal:

1. Install Cross-Compiler & Build Dependencies

sudo apt update
sudo apt install -y build-essential bc bison flex libssl-dev libelf-dev gcc-aarch64-linux-gnu git

2. Clone Matching Kernel Source (Shallow Clone)

cd ~
git clone --depth 1 --branch v7.0 https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git linux-board
cd linux-board

(Make sure --branch v7.0 matches the major.minor version from uname -r)

3. Copy the Config from the Board

scp arduino@<BOARD_IP>:~/board.config .config

Phase 3: Match Vermagic & Enable Driver (In WSL2)

To prevent modprobe: ERROR: Exec format error, the kernel localversion must match uname -r.

cd ~/linux-board

# 1. Set ARM64 cross-compile environment
export ARCH=arm64
export CROSS_COMPILE=aarch64-linux-gnu-

# 2. Set the exact localversion suffix from uname -r
./scripts/config --set-str CONFIG_LOCALVERSION "-g122c2c22d838"
./scripts/config --disable CONFIG_LOCALVERSION_AUTO

# 3. Enable the required driver (Example for Realtek RTL8188EU / 0bda:8179):
./scripts/config --enable CONFIG_RTL8XXXU
./scripts/config --module CONFIG_RTL8XXXU
./scripts/config --enable CONFIG_RTL8XXXU_UNTESTED

# 4. Prepare kernel build tree
make ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- olddefconfig
make ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- modules_prepare

Phase 4: Compile Only the Specific Module (In WSL2)

Instead of compiling the whole kernel (which takes hours), compile only the specific driver target (~5–10 seconds):

# Compile targeted driver module
make ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- KBUILD_MODPOST_WARN=1 -j$(nproc) drivers/net/wireless/realtek/rtl8xxxu/rtl8xxxu.ko

# Verify vermagic matches your board:
modinfo drivers/net/wireless/realtek/rtl8xxxu/rtl8xxxu.ko | grep vermagic

Copy the compiled module to the Board:

scp drivers/net/wireless/realtek/rtl8xxxu/rtl8xxxu.ko arduino@<BOARD_IP>:~/

Phase 5: Install Module & Firmware (On the Board)

Switch back to the Board terminal:

1. Place the Module in the Kernel Tree

sudo mkdir -p /lib/modules/$(uname -r)/kernel/drivers/net/wireless/realtek/rtl8xxxu
sudo cp ~/rtl8xxxu.ko /lib/modules/$(uname -r)/kernel/drivers/net/wireless/realtek/rtl8xxxu/
sudo depmod -a

2. Download the Required Firmware Binary

sudo mkdir -p /lib/firmware/rtlwifi
sudo wget -O /lib/firmware/rtlwifi/rtl8188eufw.bin https://git.kernel.org/pub/scm/linux/kernel/git/firmware/linux-firmware.git/plain/rtlwifi/rtl8188eufw.bin

3. Load the Driver & Verify Interface

# Load module
sudo modprobe rtl8xxxu

# Verify in dmesg
dmesg | tail -n 25

# Check if wlan0 appears
ip link

Quick Troubleshooting

  • Exec format error: vermagic mismatch. Check dmesg | tail to see what version string the kernel expected, set CONFIG_LOCALVERSION to match, and recompile.
  • Unresolved symbols / missing vmlinux.o: Pass KBUILD_MODPOST_WARN=1 when running make.
  • Firmware failed to load / device timeout: Check dmesg for missing .fw or .bin files and download the exact file to /lib/firmware/.
Also Use Claude its lowk really helpful in troubleshooting :)

also I was using this dongle for wifi

https://www.amazon.in/dp/B008IFXQFU

and this for Bluetooth

https://www.amazon.in/dp/B098K3H92Z 

cuz both Bluetooth and Wifi were dead on my board!

Thank you for the detailed guide for the cross-compilation. I will give this a try at some point.

I think both WiFi and Bluetooth are provided by the same WCBN3536A mounted on the corner of the board, so it makes sense that both services might be affected by a fault on that module. Bluetooth doesn't work on mine either.

I did notice that this particular corner on my board is slightly warped and consequently the module sits unevenly and that some of the solder balls at one end had become detached from the PCB. I tried to fix this by re-flowing the module which worked twice for a short while, but the third attempt failed and I have not been able to get it to work since. At this point I don't know whether the module has failed or something else has happened. I was thinking of removing the module altogether. Unfortunately replacement modules are not available for consumer purchase, so its not possible to solve the problem that way. But even if they were, its a tricky job to solder a BGA device on and with an uneven PCB, the chances are that it wouldn't sit level anyway. Having an external dongle would be something of an inconvenience, but at least it might make the board usable again.

Since there is a handful of other WiFi drivers present in the kernel, this raises the possibility of a substituting a module from another manufacturer. However, such a module would have to have the exact same pinout for it to be a drop-in replacement. My research has not gone that far yet though.

Glad you got the TL-WN725N working. I don't require Bluetooth yet, but glad to know that there is a solution out there. I will be working natively on Linux rather than WSL, but I expect that the process will be the same. I will report back once I have had a change to try it.

I have managed to complete nearly all the steps including the compile and copying the .ko files to the board and modprobe seems to have been successful:

$ sudo modprobe mt792x-usb
arduino@UnoQ2Gb:~$ 

But there seems little in dmesg except this:

[  267.095398] usb 1-1.4.4: new high-speed USB device number 8 using xhci-hcd

I added only these three additional files:

mt76-usb.ko
mt792x-lib.ko
mt792x-usb.ko

At the top of the lsmod output I have this:

mt792x_usb             12288  0
mt76_usb               24576  1 mt792x_usb
mt792x_lib             49152  1 mt792x_usb
mt76_connac_lib        73728  1 mt792x_lib
mt76                  106496  4 mt792x_lib,mt792x_usb,mt76_usb,mt76_connac_lib

But no wifi device.

I had a little more success with the TP Link dongle:

[ 1724.733451] usb 1-1.4.4: USB disconnect, device number 8
[ 1731.588430] usb 1-1.4.4: new high-speed USB device number 9 using xhci-hcd
[ 1731.823958] usb 1-1.4.4: ath9k_htc: Firmware ath9k_htc/htc_9271-1.4.0.fw requested
[ 1731.831926] usbcore: registered new interface driver ath9k_htc
[ 1732.124172] usb 1-1.4.4: ath9k_htc: Transferred FW: ath9k_htc/htc_9271-1.4.0.fw, size: 51008
[ 1732.377138] ath9k_htc 1-1.4.4:1.0: ath9k_htc: HTC initialized with 33 credits
[ 1732.635073] ath9k_htc 1-1.4.4:1.0: ath9k_htc: FW Version: 1.4
[ 1732.640926] ath9k_htc 1-1.4.4:1.0: FW RMW support: On
[ 1732.646056] ath: EEPROM regdomain: 0x809c
[ 1732.646068] ath: EEPROM indicates we should expect a country code
[ 1732.646080] ath: doing EEPROM country->regdmn map search
[ 1732.646089] ath: country maps to regdmn code: 0x52
[ 1732.646100] ath: Country alpha2 being used: CN
[ 1732.646111] ath: Regpair used: 0x52
[ 1732.652779] ieee80211 phy1: Atheros AR9271 Rev:1
$ ip link
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN mode DEFAULT group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
2: enx00e01b284206: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP mode DEFAULT group default qlen 1000
    link/ether 00:e0:1b:28:42:06 brd ff:ff:ff:ff:ff:ff
3: br-6275020ca3b8: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN mode DEFAULT group default 
    link/ether 02:42:9a:69:cd:e2 brd ff:ff:ff:ff:ff:ff
4: docker0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN mode DEFAULT group default 
    link/ether 02:42:d0:f9:09:3f brd ff:ff:ff:ff:ff:ff
5: wlxec086b16d627: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN mode DORMANT group default qlen 1000
    link/ether fa:86:16:f3:a7:8c brd ff:ff:ff:ff:ff:ff permaddr ec:08:6b:16:d6:2

I have also successfully made a WiFi connection using the WiFi icon on the SBC desktop. AppLab on the PC now "sees" the board over the network.

Getting one of them working is good progress. I would like to get the other working if possible.

Thanks for testing this and reporting back — that's great progress!

The TP-Link result looks completely successful. The ath9k_htc driver detected the AR9271, loaded htc_9271-1.4.0.fw, initialized the HTC firmware, and created the wireless interface (wlxec086b16d627). The fact that you were able to connect through the Uno Q desktop and that AppLab can now see the board over the network confirms that the external Wi-Fi solution works.

For the MediaTek adapter, the interesting part is that modprobe mt792x-usb succeeds and the modules appear correctly in lsmod, but no wireless interface is created. That suggests the modules themselves are loading, but the USB device may not actually be binding to mt792x_usb, or there may be another dependency or firmware/device-specific component missing.

I think the next useful checks would be to capture the exact USB ID with:

lsusb

and then, with the MediaTek adapter plugged in:

dmesg | grep -iE "mt76|mt79|firmware|usb"

It would also be useful to check:

lsusb -t

and:

iw dev

The exact lsusb vendor/product ID should tell us whether mt792x-usb is actually the correct driver for that particular MediaTek adapter.

Really glad the AR9271/TP-Link adapter is working though — that's a solid workaround for anyone whose onboard WCBN3536A Wi-Fi/Bluetooth module has failed.

Same here! The side/corner of my board is also slightly warped, so I’m wondering if that could be what’s causing the problem with the WCBN3536A module. It seems like the uneven PCB could be putting stress on the BGA solder joints or causing some of them to lose contact.

The interesting thing is that with my Linux PC, when I plug the adapter in, the lsmod output looks like this:

$ lsmod |grep mt79*
mt7921u                16384  0
mt792x_usb             16384  1 mt7921u
mt7921_common          86016  1 mt7921u
mt792x_lib             69632  3 mt792x_usb,mt7921_common,mt7921u
mt76_connac_lib        98304  3 mt792x_lib,mt7921_common,mt7921u
mt76_usb               49152  2 mt792x_usb,mt7921u
mt76                  139264  6 mt792x_lib,mt792x_usb,mt76_usb,mt7921_common,mt76_connac_lib,mt7921u
mac80211             1454080  5 mt792x_lib,mt76,iwlmvm,mt7921_common,mt76_connac_lib
cfg80211             1404928  7 wl,mt76,iwlmvm,iwlwifi,mac80211,mt7921_common,mt76_connac_lib
usbcore               409600  11 xhci_hcd,mt792x_usb,usbhid,mt76_usb,btmtk,evdi,uvcvideo,btusb,xhci_pci,mt7921u,vhci_hcd

So the module that's being loaded is 'mt7921u', although 'mt792x-usb' is also present.

The lsusb output is:

 Bus 002 Device 002: ID 0e8d:7961 MediaTek Inc. Wireless_Device

So it looks like I need to compile 7961 modules, but there aren't any files for either 7921u or 796x in the kernel tree, although there is an mt7921 directory..

PS, I also tried an older Netgear MT76 dongle (mt76x02 driver) which I had to compile and add in, but couldn't get this to work either. Will have to come back to this later and have another look at what may be missing.

Ok, so I have two Mediatek dongles:

  1. Netgear A6210
  2. Fenvi AX1800

So for the dongle 1 - Netgear:

lsusb:

Bus 001 Device 010: ID 0846:9053 NetGear, Inc. A6210

sudo dmesg | grep -iE "mt76|mt79|firmware|usb":

[sudo] password for arduino: 
[    0.000000] psci: PSCIv1.0 detected in firmware.
[    0.000000] psci: [Firmware Bug]: failed to set PC mode: -3
[    0.835250] qcom_scm firmware:scm: qseecom: found qseecom with version 0x1402000
[    0.835277] qcom_scm firmware:scm: qseecom: untested machine, skipping
[    0.850283] platform 4e00000.usb: Adding to iommu group 7
[    8.038133] systemd[1]: systemd-hibernate-clear.service - Clear Stale Hibernate Storage Info skipped, unmet condition check ConditionPathExists=/sys/firmware/efi/efivars/HibernateLocation-8cf2644b-4b0b-428f-9387-6d876050dc67
[    9.522626] usb 1-1.4.4: ath9k_htc: Firmware ath9k_htc/htc_9271-1.4.0.fw requested
[   12.314941] r8152 1-1.4.1:1.0: skip request firmware

lsusb -t:

/:  Bus 001.Port 001: Dev 001, Class=root_hub, Driver=xhci-hcd/1p, 480M
    |__ Port 001: Dev 002, If 0, Class=Hub, Driver=hub/4p, 480M
        |__ Port 001: Dev 003, If 0, Class=Human Interface Device, Driver=usbhid, 12M
        |__ Port 001: Dev 003, If 1, Class=Human Interface Device, Driver=usbhid, 12M
        |__ Port 003: Dev 004, If 0, Class=Human Interface Device, Driver=usbhid, 1.5M
        |__ Port 004: Dev 005, If 0, Class=Hub, Driver=hub/4p, 480M
            |__ Port 001: Dev 006, If 0, Class=Vendor Specific Class, Driver=r8152, 480M
            |__ Port 004: Dev 010, If 0, Class=Vendor Specific Class, Driver=[none], 480M
/:  Bus 002.Port 001: Dev 001, Class=root_hub, Driver=xhci-hcd/1p, 5000M

iw dev:

$ sudo iw dev
sudo: iw: command not found

For dongle 2 - Fenvi AX1800:

lsusb

Bus 001 Device 011: ID 0e8d:7961 MediaTek Inc. Wireless_Device

sudo dmesg | grep -iE "mt76|mt79|firmware|usb":

$ sudo dmesg | grep -iE "mt76|mt79|firmware|usb"
[    0.000000] psci: PSCIv1.0 detected in firmware.
[    0.000000] psci: [Firmware Bug]: failed to set PC mode: -3
[    0.041813] /soc@0/phy@1615000: Fixed dependency cycle(s) with /soc@0/usb@4ef8800/usb@4e00000
[    0.042170] /soc@0/geniqup@4ac0000/i2c@4a84000/encoder@58/connector: Fixed dependency cycle(s) with /soc@0/usb@4ef8800/usb@4e00000
[    0.042284] /soc@0/usb@4ef8800/usb@4e00000: Fixed dependency cycle(s) with /soc@0/geniqup@4ac0000/i2c@4a84000/encoder@58/connector
[    0.042319] /soc@0/usb@4ef8800/usb@4e00000: Fixed dependency cycle(s) with /soc@0/phy@1615000
[    0.047368] /soc@0/phy@1615000: Fixed dependency cycle(s) with /soc@0/usb@4ef8800/usb@4e00000
[    0.052525] /soc@0/geniqup@4ac0000/i2c@4a84000/encoder@58/connector: Fixed dependency cycle(s) with /soc@0/usb@4ef8800/usb@4e00000
[    0.053112] /soc@0/usb@4ef8800/usb@4e00000: Fixed dependency cycle(s) with /soc@0/geniqup@4ac0000/i2c@4a84000/encoder@58/connector
[    0.053152] /soc@0/usb@4ef8800/usb@4e00000: Fixed dependency cycle(s) with /soc@0/phy@1615000
[    0.067094] usbcore: registered new interface driver usbfs
[    0.067131] usbcore: registered new interface driver hub
[    0.067158] usbcore: registered new device driver usb
[    0.215521] usbcore: registered new interface driver usb-storage
[    0.240168] usbcore: registered new interface driver usbhid
[    0.240195] usbhid: USB HID core driver
[    0.835250] qcom_scm firmware:scm: qseecom: found qseecom with version 0x1402000
[    0.835277] qcom_scm firmware:scm: qseecom: untested machine, skipping
[    0.850283] platform 4e00000.usb: Adding to iommu group 7
[    0.850470] /soc@0/geniqup@4ac0000/i2c@4a84000/encoder@58/connector: Fixed dependency cycle(s) with /soc@0/usb@4ef8800/usb@4e00000
[    0.850553] /soc@0/phy@1615000: Fixed dependency cycle(s) with /soc@0/usb@4ef8800/usb@4e00000
[    0.850650] /soc@0/usb@4ef8800/usb@4e00000: Fixed dependency cycle(s) with /soc@0/geniqup@4ac0000/i2c@4a84000/encoder@58/connector
[    0.850682] /soc@0/usb@4ef8800/usb@4e00000: Fixed dependency cycle(s) with /soc@0/phy@1615000
[    0.864961] /soc@0/geniqup@4ac0000/i2c@4a84000/encoder@58/connector: Fixed dependency cycle(s) with /soc@0/usb@4ef8800/usb@4e00000
[    4.187017] qcom-qusb2-phy 1613000.phy: Registered Qcom-QUSB2 phy
[    5.195590] xhci-hcd xhci-hcd.2.auto: new USB bus registered, assigned bus number 1
[    5.233402] xhci-hcd xhci-hcd.2.auto: new USB bus registered, assigned bus number 2
[    5.241154] xhci-hcd xhci-hcd.2.auto: Host supports USB 3.0 SuperSpeed
[    5.248764] hub 1-0:1.0: USB hub found
[    5.258105] hub 2-0:1.0: USB hub found
[    5.508726] usb 1-1: new high-speed USB device number 2 using xhci-hcd
[    5.728257] hub 1-1:1.0: USB hub found
[    6.040716] usb 1-1.1: new full-speed USB device number 3 using xhci-hcd
[    6.210777] input: SINO WEALTH Gaming KB  as /devices/platform/soc@0/4ef8800.usb/4e00000.usb/xhci-hcd.2.auto/usb1/1-1/1-1.1/1-1.1:1.0/0003:258A:01A0.0001/input/input2
[    6.437615] hid-generic 0003:258A:01A0.0001: input,hidraw0: USB HID v1.11 Keyboard [SINO WEALTH Gaming KB ] on usb-xhci-hcd.2.auto-1.1/input0
[    6.454736] input: SINO WEALTH Gaming KB  System Control as /devices/platform/soc@0/4ef8800.usb/4e00000.usb/xhci-hcd.2.auto/usb1/1-1/1-1.1/1-1.1:1.1/0003:258A:01A0.0002/input/input3
[    6.529598] input: SINO WEALTH Gaming KB  Consumer Control as /devices/platform/soc@0/4ef8800.usb/4e00000.usb/xhci-hcd.2.auto/usb1/1-1/1-1.1/1-1.1:1.1/0003:258A:01A0.0002/input/input4
[    6.546469] input: SINO WEALTH Gaming KB  Keyboard as /devices/platform/soc@0/4ef8800.usb/4e00000.usb/xhci-hcd.2.auto/usb1/1-1/1-1.1/1-1.1:1.1/0003:258A:01A0.0002/input/input5
[    6.563135] hid-generic 0003:258A:01A0.0002: input,hidraw1: USB HID v1.11 Keyboard [SINO WEALTH Gaming KB ] on usb-xhci-hcd.2.auto-1.1/input1
[    6.648911] usb 1-1.3: new low-speed USB device number 4 using xhci-hcd
[    6.787459] input: USB Optical Mouse as /devices/platform/soc@0/4ef8800.usb/4e00000.usb/xhci-hcd.2.auto/usb1/1-1/1-1.3/1-1.3:1.0/0003:0461:4D22.0003/input/input6
[    6.803025] hid-generic 0003:0461:4D22.0003: input,hidraw2: USB HID v1.11 Mouse [USB Optical Mouse] on usb-xhci-hcd.2.auto-1.3/input0
[    6.884899] usb 1-1.4: new high-speed USB device number 5 using xhci-hcd
[    7.040710] hub 1-1.4:1.0: USB hub found
[    7.340988] usb 1-1.4.1: new high-speed USB device number 6 using xhci-hcd
[    7.560731] usb 1-1.4.4: new high-speed USB device number 7 using xhci-hcd
[    8.038133] systemd[1]: systemd-hibernate-clear.service - Clear Stale Hibernate Storage Info skipped, unmet condition check ConditionPathExists=/sys/firmware/efi/efivars/HibernateLocation-8cf2644b-4b0b-428f-9387-6d876050dc67
[    9.522626] usb 1-1.4.4: ath9k_htc: Firmware ath9k_htc/htc_9271-1.4.0.fw requested
[    9.533725] usbcore: registered new interface driver ath9k_htc
[    9.817192] usb 1-1.4.4: ath9k_htc: Transferred FW: ath9k_htc/htc_9271-1.4.0.fw, size: 51008
[   11.888537] usbcore: registered new device driver r8152-cfgselector
[   12.096340] r8152-cfgselector 1-1.4.1: reset high-speed USB device number 6 using xhci-hcd
[   12.314941] r8152 1-1.4.1:1.0: skip request firmware
[   12.368551] usbcore: registered new interface driver r8152
[   12.436755] usbcore: registered new interface driver cdc_ether
[   33.760103] usb_vbus: disabling
[ 2167.168268] usb 1-1.4.4: USB disconnect, device number 7
[ 2167.519973] usb 1-1.4.4: ath9k_htc: USB layer deinitialized
[ 2181.703228] usb 1-1.4.4: new high-speed USB device number 8 using xhci-hcd
[ 2444.672568] usb 1-1.4.4: USB disconnect, device number 8
[ 2696.006790] usb 1-1.4.4: new high-speed USB device number 9 using xhci-hcd
[ 2696.832413] usb 1-1.4.4: USB disconnect, device number 9
[ 3065.416201] usb 1-1.4.4: new high-speed USB device number 10 using xhci-hcd
[ 3551.873031] usb 1-1.4.4: USB disconnect, device number 10
[ 3558.984703] usb 1-1.4.4: new high-speed USB device number 11 using xhci-hcd

lsusb -t:

$ lsusb -t
/:  Bus 001.Port 001: Dev 001, Class=root_hub, Driver=xhci-hcd/1p, 480M
    |__ Port 001: Dev 002, If 0, Class=Hub, Driver=hub/4p, 480M
        |__ Port 001: Dev 003, If 0, Class=Human Interface Device, Driver=usbhid, 12M
        |__ Port 001: Dev 003, If 1, Class=Human Interface Device, Driver=usbhid, 12M
        |__ Port 003: Dev 004, If 0, Class=Human Interface Device, Driver=usbhid, 1.5M
        |__ Port 004: Dev 005, If 0, Class=Hub, Driver=hub/4p, 480M
            |__ Port 001: Dev 006, If 0, Class=Vendor Specific Class, Driver=r8152, 480M
            |__ Port 004: Dev 011, If 0, Class=Vendor Specific Class, Driver=[none], 480M
/:  Bus 002.Port 001: Dev 001, Class=root_hub, Driver=xhci-hcd/1p, 5000M

I have both of the Mediatek (Netgear A6210 and Fenvi AX1800) WiFi dongles working!

It was necessary to take a slightly different approach to the compile. This is what I did:

  • enabled ALL of the MT76 drivers in .config by directly editing .config, finding the MT76 section and un-commenting each of the entries under that heading. The line was then edited to replace the 'is not set' text with '=m' to match the other enabled modules.

  • compiled ALL the Mediatek modules using the following modified command:

make ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- KBUILD_MODPOST_WARN=1 -j$(nproc) M=drivers/net/wireless/mediatek/mt76
  • created a temporary directory with the following structure:
mediatek
    mt76
        mt76x2
        mt7921
  • copied the driver module files I required as follows:
cp drivers/net/wireless/mediatek/mt76/mt76x02-lib.ko /home/johnc/src/UnoQKernel/mediatek/mt76/
cp drivers/net/wireless/mediatek/mt76/mt76x02-usb.ko /home/johnc/src/UnoQKernel/mediatek/mt76/
cp drivers/net/wireless/mediatek/mt76/mt792x-lib.ko /home/johnc/src/UnoQKernel/mediatek/mt76/
cp drivers/net/wireless/mediatek/mt76/mt792x-usb.ko /home/johnc/src/UnoQKernel/mediatek/mt76/
cp drivers/net/wireless/mediatek/mt76/mt76-sdio.ko /home/johnc/src/UnoQKernel/mediatek/mt76/
cp drivers/net/wireless/mediatek/mt76/mt76-usb.ko /home/johnc/src/UnoQKernel/mediatek/mt76/

cp drivers/net/wireless/mediatek/mt76/mt7921/*.ko /home/johnc/src/UnoQKernel/mediatek/mt76/mt7921/
cp drivers/net/wireless/mediatek/mt76/mt76x2/*.ko /home/johnc/src/UnoQKernel/mediatek/mt76/mt76x2/
  • created a .tar.gz archive of the temporary mt76 directory

  • copied the archive to the UNO Q home folder and unpacked it.

  • manually created the mt76x2 and mt7921 directories in /lib/modules/6.16.7-g0dd6551ae96b/kernel/drivers/net/wireless/mediatek/mt76

  • copied the unpacked archive:

cp -R mt76/* /lib/modules/6.16.7-g0dd6551ae96b/kernel/drivers/net/wireless/mediatek/mt76/
  • ran the depmod command:
sudo depmod -a
  • then ran the modprobe command for the two drivers:
sudo modprobe mt7921u
sudo modprobe mt76x2u

lsmod for the Netgear A6210:

mt76x2u                20480  0
mt76x2_common          24576  1 mt76x2u
mt76x02_usb            20480  1 mt76x2u
mt76x02_lib            69632  3 mt76x02_usb,mt76x2u,mt76x2_common

dmesg:

[ 5720.832634] usbcore: registered new interface driver mt76x2u
[ 5755.693354] usb 1-1.4.4: new high-speed USB device number 7 using xhci-hcd
[ 5755.862017] usb 1-1.4.4: reset high-speed USB device number 7 using xhci-hcd
[ 5755.960846] mt76x2u 1-1.4.4:1.0: ASIC revision: 76120044
[ 5756.018588] mt76x2u 1-1.4.4:1.0: ROM patch build: 20141115060606a
[ 5756.167994] mt76x2u 1-1.4.4:1.0: Firmware Version: 0.0.00
[ 5756.173636] mt76x2u 1-1.4.4:1.0: Build: 1
[ 5756.177723] mt76x2u 1-1.4.4:1.0: Build Time: 201507311614____
[ 5756.950730] ieee80211 phy1: Selected rate control algorithm 'minstrel_ht'
[ 5757.036263] mt76x2u 1-1.4.4:1.0 wlxa06391bbce87: renamed from wlan0

ip link:

$ ip link
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN mode DEFAULT group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
2: enx00e01b284206: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP mode DEFAULT group default qlen 1000
    link/ether 00:e0:1b:28:42:06 brd ff:ff:ff:ff:ff:ff
3: docker0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN mode DEFAULT group default 
    link/ether 02:42:01:04:79:06 brd ff:ff:ff:ff:ff:ff
4: br-6275020ca3b8: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN mode DEFAULT group default 
    link/ether 02:42:6e:cf:25:5f brd ff:ff:ff:ff:ff:ff
5: wlxa06391bbce87: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN mode DORMANT group default qlen 1000
    link/ether 5a:1e:ed:b4:3d:96 brd ff:ff:ff:ff:ff:ff permaddr a0:63:91:bb:ce:87

This has required quite a bit of work but means that I can now connect this faulty UNO Q to my home WiFi by plugging in the USB hub and either of the WiFi dongles I have available. No doubt, if the kernel ever gets updated, then the drivers will have to be re-compiled and updated as well.