Last month, we noted that Mediatek MT7902 WiFi 6E and Bluetooth 5.x chipset finally got drivers in mainline Linux, and should be part of the Linux 7.0 release.
MT7902 wireless modules are used in many Windows laptops, but users have been asking for the Linux drivers for almost two years now. One method is to wait for the drivers to find their way into your distribution, but “hmtheyboy154” didn’t feel like waiting and backported the drivers to Linux 6.6 to 6.19. Since I own one of those laptops, namely the ASUS Vivobook 16, I gave it a try on Ubuntu 24.04, but it should work on other Linux distributions as well.
Note that this method only works with the PCIe driver, so if you own an SDIO module, you’d need to work out another solution. My Ubuntu 24.04 laptop is indeed using an MT7902 PCIe module (AW-XB552NF):
|
1 2 |
jaufranc@CNX-LAPTOP-5:~$ lspci | grep 7902 0000:02:00.0 Network controller: MEDIATEK Corp. Device 7902 |
I could install the driver in four steps:
|
1 2 3 4 |
git clone https://github.com/hmtheboy154/mt7902 cd mt7902/ make -j8 sudo make install |
You can optionally install the firmware, although it might already be part of your distribution:
|
1 |
sudo make install_fw |
After that, you could reboot your laptop, but I used modprobe instead:
|
1 |
sudo modprobe mt7902e |
I could then enable WiFi on Ubuntu 24.04 and connect to my access point.
The kernel log should look something like that:
|
1 2 3 4 5 6 7 8 9 10 11 12 |
[1014428.026033] wlo1: deauthenticating from 3c:cd:57:f5:af:91 by local choice (Reason: 3=DEAUTH_LEAVING) [1014439.871042] mt7902e 0000:02:00.0: ASIC revision: 79020000 [1014439.966746] mt7902e 0000:02:00.0: HW/SW Version: 0x8a108a10, Build Time: 20251212032046a [1014439.988460] mt7902e 0000:02:00.0: WM Firmware Version: ____000000, Build Time: 20251212032127 [1014440.940270] mt7902e 0000:02:00.0 wlo1: renamed from wlan0 [1014443.452779] wlo1: authenticate with 3c:cd:57:f5:af:91 (local address=10:68:38:3a:0d:da) [1014443.452797] wlo1: send auth to 3c:cd:57:f5:af:91 (try 1/3) [1014443.467182] wlo1: authenticated [1014443.468008] wlo1: associate with 3c:cd:57:f5:af:91 (try 1/3) [1014443.507278] wlo1: RX AssocResp from 3c:cd:57:f5:af:91 (capab=0x511 status=0 aid=3) [1014443.543479] wlo1: associated [1014443.545773] wlo1: Limiting TX power to 27 (30 - 3) dBm as advertised by 3c:cd:57:f5:af:91 |
I still did a quick iperf3 test with 5 GHz WiFi, about 2 meters from a Xiaomi Mi Router AX6000.
- Download
1234567891011121314151617jaufranc@CNX-LAPTOP-5:~$ iperf3 -t 60 -c 192.168.31.12 -i 10 -RConnecting to host 192.168.31.12, port 5201Reverse mode, remote host 192.168.31.12 is sending[ 5] local 192.168.31.152 port 41870 connected to 192.168.31.12 port 5201[ ID] Interval Transfer Bitrate[ 5] 0.00-10.01 sec 528 MBytes 443 Mbits/sec[ 5] 10.01-20.01 sec 530 MBytes 444 Mbits/sec[ 5] 20.01-30.01 sec 477 MBytes 400 Mbits/sec[ 5] 30.01-40.01 sec 484 MBytes 406 Mbits/sec[ 5] 40.01-50.01 sec 432 MBytes 362 Mbits/sec[ 5] 50.01-60.01 sec 493 MBytes 414 Mbits/sec- - - - - - - - - - - - - - - - - - - - - - - - -[ ID] Interval Transfer Bitrate Retr[ 5] 0.00-60.01 sec 2.88 GBytes 412 Mbits/sec 23 sender[ 5] 0.00-60.01 sec 2.88 GBytes 412 Mbits/sec receiveriperf Done. - Upload
12345678910111213141516jaufranc@CNX-LAPTOP-5:~$ iperf3 -t 60 -c 192.168.31.12 -i 10Connecting to host 192.168.31.12, port 5201[ 5] local 192.168.31.152 port 35586 connected to 192.168.31.12 port 5201[ ID] Interval Transfer Bitrate Retr Cwnd[ 5] 0.00-10.01 sec 433 MBytes 363 Mbits/sec 0 1.09 MBytes[ 5] 10.01-20.01 sec 547 MBytes 459 Mbits/sec 0 2.43 MBytes[ 5] 20.01-30.01 sec 568 MBytes 477 Mbits/sec 0 2.43 MBytes[ 5] 30.01-40.01 sec 567 MBytes 476 Mbits/sec 0 2.43 MBytes[ 5] 40.01-50.01 sec 566 MBytes 475 Mbits/sec 0 2.43 MBytes[ 5] 50.01-60.03 sec 550 MBytes 460 Mbits/sec 0 2.43 MBytes- - - - - - - - - - - - - - - - - - - - - - - - -[ ID] Interval Transfer Bitrate Retr[ 5] 0.00-60.03 sec 3.16 GBytes 452 Mbits/sec 0 sender[ 5] 0.00-60.04 sec 3.16 GBytes 452 Mbits/sec receiveriperf Done.
About 400-450 Mbps in either direction, which should be fine with a link speed of 600 Mbps, plus my ISP only supports 300 Mbps uploads/downloads.
I also tried Bluetooth, but it didn’t work for me at first, as I couldn’t enable it in the settings. I eventually noticed it just requires a different branch on the same GitHub repo:
|
1 2 3 4 5 6 7 8 |
git clone https://github.com/hmtheboy154/mt7902 -b bluetooth_backport btusb_mt7902 cd btusb_mt7902/ make -j8 sudo make install sudo make install_fw sudo rmmod btusb suydo rmmod btmtk sudo modprobe btusb_mt7902 |
I could then enable Bluetooth, pair my smartphone to the laptop, and transfer a file from my Android phone to the laptop.
Note that the btusb and btmtk modules conflict with btusb_mt7902, so I had to remove them, or I would get the error:
|
1 2 |
jaufranc@CNX-LAPTOP-5:~/btusb_mt7902$ sudo modprobe btusb_mt7902 modprobe: ERROR: could not insert 'btusb_mt7902': Exec format error |
To do that permanently, create the file /etc/modprobe.d/blacklist_btusb.conf with:
|
1 |
blacklist btusb btmtk |
It took a long while to get WiFi and Bluetooth support on Linux for MT7902 modules, but it’s now easy enough to install on Ubuntu 24.04 without waiting for the official release.

Jean-Luc started CNX Software in 2010 as a part-time endeavor, before quitting his job as a software engineering manager, and starting to write daily news, and reviews full time later in 2011.
Support CNX Software! Donate via cryptocurrencies, become a Patron on Patreon, or purchase goods on Amazon or Aliexpress. We also use affiliate links in articles to earn commissions if you make a purchase after clicking on those links.








Nice one just found this out was a big help for me
Fails at my setup with error message:
“~/mt7902$ sudo modprobe mt7902e
modprobe: ERROR: could not insert ‘mt7902e’: Key was rejected by service”
You may want to disable Secure Boot in the BIOS. That’s the easiest way.
If you need to keep Secure Boot, you’d need to self-sign the module. Something like that (i haven’t tried):
at first it worked but suddenlt the connection drop and now it isn’t connecting with any wifi network. Always showing authentication failure. Bluetooth is working properly. Faced no error during installation both wifi and bluetooth
I had an issue after running apt dist-upgrade, which updated the kernel.
A quick solution is to rebuild the driver for the new kernel.
A better solution is to enable DKMS from the source directory:
Content of dkms:
Do you know how to do the same for the bluetooth driver?
I’ve just noticed Bluetooth indeed stopped working on my system since I didn’t do the DKMS part.
I haven’t tried it yet, but you can follow a similar method by replacing mt7902 with btusb_mt7902.
Yeah ive updated to the kernel 7.0 and wifi worked fine with the dkms but i had to recompile the bluetooth manually
i cant get past ERROR: could not insert ‘btusb_mt7902’: Exec format error. could you maybe explain it to me more in depth
You need to do something like that:
Or just add them to the blacklist as explained in the article and reboot.
thank you! I got it working
Does this work with other linux distro, like omarchi linux ? Sir
Thank you so much. In fedora works perfectly!
It worked perfectly thank you a looooot!!!! For anyone being on a custom kernel like the cachyos one, you will have to add ‘CC=clang LLVM=1’ at the end of each ‘make’ command so it compiles properly for the kernel ^^