Skip to content

Instantly share code, notes, and snippets.

@archeYR
Last active December 16, 2025 20:24
Show Gist options
  • Select an option

  • Save archeYR/d687de5e484ce7b45d6a94415a04f3dc to your computer and use it in GitHub Desktop.

Select an option

Save archeYR/d687de5e484ce7b45d6a94415a04f3dc to your computer and use it in GitHub Desktop.
8BitDo Firmware Updater in Wine

This is about running 8BitDo's Firmware Update tool for Windows in Wine. It can be used for updating newer 8BitDo devices that may not be supported by fwupd on Linux. This tool uses .NET Framework, so it will need Wine Mono to be installed (dotnet48 wintericks verb was tested to work as well).

This tool needs Segoe UI Symbol font, on Arch this font is provided by ttf-ms-win10-auto package. For other distributions there is install script.

You will have to let Wine access device's HID interface for updating the firmware. Most importantly it should be a boot HID interface (exposed when device is in bootloader mode, often referred to as "manual update mode" or "advanced mode"). It is also worth adding the Product IDs for HID interfaces that are exposed under different conditions (for example, Ultimate Bluetooth Controller's receiver exposes a HID interface when controller is not connected), so the upgrade tool can detect it and automatically put it in bootloader mode for upgrading the firmware. You can use lsusb tool to get the Vendor and Product IDs. Here's an example for 8BitDo Ultimate Bluetooth Controller and its USB receiver, which you can adapt for your devices by modifying the Product IDs as needed:

sudo nano /etc/udev/rules.d/71-8bitdo-boot.rules

# 8BitDo Ultimate Bluetooth Controller's boot HID interface (seems to be shared by multiple 8BitDo devices)
# Change it only if lsusb prints different Product ID when device is in bootloader mode.
SUBSYSTEM=="hidraw", ATTRS{idProduct}=="3208", ATTRS{idVendor}=="2dc8", TAG+="uaccess"

# 8BitDo Ultimate Bluetooth Controller receiver's HID interface (exposed when the controller is not connected)
# When it is exposed, the upgrade tool can detect the receiver and automatically put in in bootloader mode.
SUBSYSTEM=="hidraw", ATTRS{idProduct}=="3109", ATTRS{idVendor}=="2dc8", TAG+="uaccess"

Now it is needed to reload the udev rules.

sudo udevadm control --reload-rules && sudo udevadm trigger

Disable SDL mode in winebus because it prevents firmware updater from accessing the device, can be done through Wine registry (seems like it is not needed to be done on recent Wine versions).

wine regedit

add DWORD value of 0 named "Enable SDL" at HKLM\System\CurrentControlSet\Services\winebus

Can be re-enabled after updating firmware (set the "Enable SDL" value to 1 or just remove it).

Shutdown wine server to save and apply registry changes: wineserver -k

Updating the Ultimate Bluetooth Controller works only in manual mode (press LB+RB and connect the controller through USB cable, then select appropriate device). This is (probably) because the Linux xpad driver doesn't expose additional HID interface that could be used by upgrade tool to detect the device (unlike Windows' XUSB driver, which does).

USB wireless dongle should be detected by the tool when controller is not connected.

@archeYR
Copy link
Author

archeYR commented Oct 2, 2025

As for whether a HID interface appears, where do I check that? lsusb -v?

A dmesg fragment that appears after connecting the device in bootloader mode would be interesting.

@ngmoviedo
Copy link

Has anybody managed to run this inside a Flatpak? I can run it using system Wine, with no major problem, but I wanted to install it as a program using Bottles, which I installed using Flatpak. The updater runs, but is unable to detect the controller in boot mode or the receiver. I suppose it might be related with some access restrictions to the devices.
Has anybody experimented with this option?

@nickalcock
Copy link

Looks like this doesn't work for the Ultimate 3-mode :( the updater simply doesn't appear to support it at all, insofar as I can tell from their horrific naming schemes. The only thing that does support it is only available on the Microsoft Store, so I guess I'm still totally out of luck.

@archeYR
Copy link
Author

archeYR commented Oct 20, 2025

Looks like this doesn't work for the Ultimate 3-mode :( the updater simply doesn't appear to support it at all, insofar as I can tell from their horrific naming schemes.

That seems to be a case indeed.

The only thing that does support it is only available on the Microsoft Store, so I guess I'm still totally out of luck.

Unfortunately Wine's support for WinRT/UWP applications is still poor. From my testing the Ultimate Software X just crashes on startup.

@parkerlreed
Copy link

parkerlreed commented Dec 7, 2025

Wine Mono 10.20 WOW64 I get the error screen but nothing ever happens. Slowly downloading dotnet48 in winetricks now.

EDIT: Keeps crashing on non WOW64 10.20 as well. dotnet48 didnt help. What version do I need???

image

OH I see this mentioned in the first post. Trying to get it installed now.

EDIT: Ok tip DONT hit okay on that crash. It will hard crash the program. Leaving it open works.

image

@TL-4319
Copy link

TL-4319 commented Dec 16, 2025

The software was working for me very well on CachyOS and wine (I believe it was wine 10.18 but not 100% sure). I was able to flash firmware and do all the configurations I needed to the controller.

I recently did a system update and now the software just crashes. I tested wine with a different windows app and that still works. Not sure if anyone might be able to point me to the right direction. The error message is below.

Unhandled exception: 0xe0434352 in wow64 32-bit code (0x7b5c98f7).
Register dump:
 CS:0023 SS:002b DS:002b ES:002b FS:0063 GS:002b
 EIP:7b5c98f7 ESP:002aea34 EBP:002aea88 EFLAGS:00000246(   - --  I  Z- -P- )
 EAX:002aea34 EBX:00000000 ECX:002aeaf8 EDX:00000010
 ESI:e0434352 EDI:002aeaf8
Stack dump:
0x002aea34:  e0434352 00000001 00000000 7b5c98f7
0x002aea44:  00000005 80131534 00000000 00000000
0x002aea54:  00000000 792f0000 002af2c8 00000001
0x002aea64:  002aeabc 202aeab4 002aea3c 00000000
0x002aea74:  002aea20 00000000 002aea50 0099e798
0x002aea84:  00000005 002aeb2c 793a750a e0434352
Backtrace:
=>0 0x7b5c98f7 RaiseException+0x42(code=<is not available>, flags=<is not available>, count=<is not available>, args=<is not available>) [/startdir/src/wine-64-build/../wine/dlls/kernelbase/debug.c:407] in kernelbase (0x002aea88)
  1 0x793a750a in coreclr (+0xb750a) (0x002aeb2c)
  2 0x794cdc66 in coreclr (+0x1ddc66) (0x002aeb54)
  3 0x794cd14a in coreclr (+0x1dd14a) (0x002aeb90)
  4 0x79477ba7 in coreclr (+0x187ba7) (0x002af090)
  5 0x7936b3bb in coreclr (+0x7b3bb) (0x002af0c0)
  6 0x79369b46 in coreclr (+0x79b46) (0x002af294)
  7 0x79369258 in coreclr (+0x79258) (0x002af338)
  8 0x793f76f6 in coreclr (+0x1076f6) (0x002af368)
  9 0x10cb0695 (0x002af398)
  10 0x0979562f (0x002af3a4)
  11 0x097955f6 (0x002af3b0)
  12 0x793f734f in coreclr (+0x10734f) (0x002af3bc)
  13 0x793623e6 in coreclr (+0x723e6) (0x002af3e8)
  14 0x79362356 in coreclr (+0x72356) (0x002af454)
  15 0x793a9d03 in coreclr (+0xb9d03) (0x002af568)
  16 0x793a9b65 in coreclr (+0xb9b65) (0x002af5d8)
  17 0x793a995f in coreclr (+0xb995f) (0x002af83c)
  18 0x792f3e30 in coreclr (+0x3e30) (0x002af90c)
  19 0x793e0906 in coreclr (+0xf0906) (0x002af960)
  20 0x004208f1 in 8bitdo ultimate software v2 (+0x208f1) (0x002afa04)
  21 0x00420a83 in 8bitdo ultimate software v2 (+0x20a83) (0x002afa38)
  22 0x0042100b in 8bitdo ultimate software v2 (+0x2100b) (0x002afb48)
  23 0x0040f67f in 8bitdo ultimate software v2 (+0xf67f) (0x002afbc0)
  24 0x00410c37 in 8bitdo ultimate software v2 (+0x10c37) (0x002afc18)
  25 0x00411d25 in 8bitdo ultimate software v2 (+0x11d25) (0x002afc74)
  26 0x00410d63 in 8bitdo ultimate software v2 (+0x10d63) (0x002afd10)
  27 0x0040e46d in 8bitdo ultimate software v2 (+0xe46d) (0x002afdac)
  28 0x0040bb4f in 8bitdo ultimate software v2 (+0xbb4f) (0x002afef8)
  29 0x0040bdf1 in 8bitdo ultimate software v2 (+0xbdf1) (0x002aff08)
  30 0x0042f85c in 8bitdo ultimate software v2 (+0x2f85c) (0x002aff50)
  31 0x7baffb58 in kernel32 (+0xfb58) (0x002aff68)
  32 0x7bcbe1f7 in ntdll (+0xe1f7) (0x002aff80)
  33 0x7bcf4dd5 in ntdll (+0x44dd5) (0x002affec)
0x7b5c98f7 RaiseException+0x42 [/startdir/src/wine-64-build/../wine/dlls/kernelbase/debug.c:407] in kernelbase: movl -4(%ebp), %ebx
Unable to access file '/startdir/src/wine-64-build/../wine/dlls/kernelbase/debug.c'
Modules:
Module  Address                 Debug info      Name (27 modules)
PE        400000-  560000       --none--        8bitdo ultimate software v2
PE-Wine 785f0000-7860b000       Deferred        version
PE-Wine 78620000-78657000       Deferred        icu
PE-Wine 78670000-7871b000       Deferred        uxtheme
PE-Wine 78730000-78740000       Deferred        winex11
PE      78750000-7885b000       Deferred        clrjit
PE-Wine 78870000-78b41000       Deferred        oleaut32
PE-Wine 78b60000-78bad000       Deferred        coml2
PE-Wine 78bc0000-78bdf000       Deferred        cryptbase
PE-Wine 78bf0000-78e26000       Deferred        rpcrt4
PE-Wine 78e40000-78f97000       Deferred        combase
PE-Wine 78fb0000-792d3000       Deferred        ole32
PE      792f0000-79709000       --none--        coreclr
PE-Wine 79720000-79788000       Deferred        imm32
PE-Wine 797a0000-797e7000       Deferred        shcore
PE-Wine 79800000-798f2000       Deferred        shlwapi
PE-Wine 79910000-7a5de000       Deferred        shell32
PE-Wine 7a5f0000-7a634000       Deferred        win32u
PE-Wine 7a650000-7a878000       Deferred        gdi32
PE-Wine 7a890000-7ada1000       Deferred        user32
PE-Wine 7adc0000-7b10b000       Deferred        ucrtbase
PE-Wine 7b120000-7b190000       Deferred        sechost
PE-Wine 7b1a0000-7b46c000       Deferred        msvcrt
PE-Wine 7b480000-7b566000       Deferred        advapi32
PE-Wine 7b580000-7badc000       Dwarf-4-5       kernelbase
PE-Wine 7baf0000-7bc6c000       Dwarf-4-5       kernel32
PE-Wine 7bcb0000-7bfe1000       Dwarf-4-5       ntdll
Threads:
process  tid      prio    name (all IDs are in hex)
00000020 start.exe
	00000024    0     
00000038 services.exe
	0000003c    0     
	00000040    0     wine_rpcrt4_server
	0000004c    0     wine_rpcrt4_io
	00000050    0     wine_threadpool_worker
	00000078    0     wine_rpcrt4_io
	00000090    0     wine_rpcrt4_io
	000000b4    0     wine_rpcrt4_io
	000000b8    0     wine_rpcrt4_io
	000000c0    0     wine_threadpool_worker
	000000c8    0     wine_rpcrt4_io
	000000f4    0     
	00000100    0     wine_rpcrt4_io
00000044 winedevice.exe
	00000048    0     
	00000054    0     
	00000058    0     wine_sechost_service
	0000005c    0     
	00000060    0     
	00000064    0     
	0000009c    0     wine_nsi_notification
00000068 plugplay.exe
	0000006c    0     
	0000007c    0     
	00000080    0     wine_sechost_service
	00000084    0     wine_rpcrt4_server
	000000dc    0     wine_rpcrt4_io
	000000e0    0     wine_threadpool_worker
00000070 explorer.exe
	00000074    0     
	000000a8    0     
	000000ac    0     wine_explorer_display_settings_restorer
	000000b0    0     wine_rpcrt4_server
00000088 svchost.exe
	0000008c    0     
	00000094    0     
	00000098    0     wine_sechost_service
000000a0 winedevice.exe
	000000a4    0     
	000000bc    0     
	000000c4    0     wine_sechost_service
	000000cc    0     
	000000d0    0     
	000000d4    0     
	000000d8    0     
	000000e4    0     
	000000ec    0     
	000000f0    0     
000000f8 rpcss.exe
	000000fc    0     
	00000104    0     
	00000108    0     wine_sechost_service
	0000010c    0     wine_rpcrt4_server
	00000110    0     wine_rpcrt4_server
	00000114    0     wine_rpcrt4_io
	00000118    0     wine_threadpool_worker
0000011c (D) Z:\home\tuan\Downloads\8BitDo_Ultimate_Software_V2_V1.27\8BitDo Ultimate Software V2.exe
	00000120    0 <== 
	00000124    0     
	00000128    0     
	0000012c    2     .NET Finalizer
	00000130    0     .NET Timer
	00000140    0     .NET ThreadPool Worker
	00000144    0     .NET ThreadPool Gate
	00000150    0     
00000148 conhost.exe
	0000014c    0     
System information:
    Wine build: wine-10.20
    Platform: x86_64 (guest: i386)
    Version: Windows 10
    Host system: Linux
    Host version: 6.18.1-2-cachyos

@archeYR
Copy link
Author

archeYR commented Dec 16, 2025

The software was working for me very well on CachyOS and wine (I believe it was wine 10.18 but not 100% sure). I was able to flash firmware and do all the configurations I needed to the controller.

I recently did a system update and now the software just crashes. I tested wine with a different windows app and that still works. Not sure if anyone might be able to point me to the right direction. The error message is below.

Does disabling icu, icuin and icuuc libraries in winecfg help?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment