[OBSOLETE] BIOS Upgrade for Linux Users

I didn’t have a “Windows To Go” or a windows machine to use, but I wanted to do the BIOS upgrade.

To do this:

  1. Install Ventoy on a USB drive
  2. Download a Windows 10 ISO
  3. Copy the ISO onto your new Ventoy USB drive
  4. Downlaod the BIOS exe and put the exe on the USB drive also
  5. Reboot your computer and use F12 to access the boot menu (this can take a few tries to get the timing right. I just kept pressing F12 as the logo appears on boot).
  6. Select your USB drive to boot
  7. Select your Windows ISO
  8. Once the installer boots up, ignore it entirely and press Shift-F10 for a Command-prompt
  9. Type C: to access the C drive (assumes you only have linux on your SSD, otherwise you don’t need this tutorial)
  10. run dir and look up the name of the Exe
  11. run the BIOS exe and your bios upgrade will run without any Windows!

This is great, thanks!

I was going to install Windows to run updates. But I like this better. I already have Ventoy on a Samsung Bar Plus, so all I need to do is drop the ISO on it. Thanks!

I just did this to flash my BIOS and it flashed successfully.

Also, as a warning to anyone who does this, my linux boot became unbootable after going through this process, due to the issue I mentioned in this thread:

The short version is that the windows installer doesn’t play nice, this is despite not clicking anything and going straight to the command line per the instructions.

It wasn’t that big of a deal because re-installing GRUB is fairly easy, but you may want to make sure you have the tools on hand to do this in case it happens to you.


Reason number 666 why Macrosloth will not get another dime from me, ever. The arrogance of “it doesn’t have a Windows bootloader on it, we have to fix that” is ridiculous.

Great tutorial / write-up, I’ll be trying it on an old laptop soon!


For what it’s worth… I find myself in the Windows installer at least once every two weeks (comes with the career) and have never seen it replace a boot loader without me asking it to, either by installing Windows or by running BCDBOOT from the diagnostic command prompt. UEFI generally makes the bootloader “fighting” mess a non-issue.

@User1209 I’m somewhat curious, though . . . you used the Windows 10 installer to install a firmware update with the M.2 drive removed, right? It seems much more likely that the firmware noted that the original boot device was totally missing and removed any registered bootloaders that happened to live on it. It would be wasteful for it to keep them around(^1).

(1): There’s a few variables in the firmware’s NVRAM store that explain how to boot the machine. One of them is BootOrder, and it contains numbers (0000, 0001, 0002, …). The entries it specifies are tried, in-order, until one succeeds. The others are Boot0000, Boot0001, (…) and they contain physical device and file paths. When it’s booted with the device missing, what should it do? Under one school of thought, those entries are stale and will never be valid again. Booting a machine without some of its fixed hardware suggests that that hardware is unlikely to return. Replacing it with a new SSD would cause the same issue, sometimes, because those boot entries occasionally contain device IDs rather than “locations”.


Lucky you. The Winblows 8 install on my Miix 700 runs an uncommanded chkdsk and self-repair every instance of the once or twice a year I have to go to it. Maybe it’s a Lenovo customization, but I doubt it. This chkdsk / self initiated boot partition restore (overwrites MBR?) kills grub2 almost every time. rEFInd seems to be more resistant to this (or possibly because my rEFInd boot partition is no longer the first on the disk).

Winblows also changes the system clock to local, and borks up USB power regulation, just to be an extra jerk too. All of this and the fact that I can’t reboot the machine without waiting large portions of an hour for updates I don’t / want need to install… Yeah, I avoid MS like the plague now.

1 Like

That’s what happened to me running Windows To Go on my desktop system recently. It rendered my Linux Mint install unbootable.

This was for a firmware update to the WD SN850 SSD which I have to do in my Framework and which I’ll have to do again in both eventually. This is why SSD manufacuters (Sabrent, WD) making firmware updates Windows-only and not publishing the firmware .bin or using LVFS is such a problem.

Simply not buying drives that have Windows-only updaters isn’t an option. They all do this now.


Creative solution. I like it!

Have the Framework team posted anywhere about whether this functionality will be available through fwupd/LVFS in the future? That would make life so much easier on the Linux side.

Edit: For the BIOS updates I mean. I understand Framework have no power over what OEMs like WD do with their SSD firmware etc.

1 Like



Perfect! Thanks — this is just what I was looking for.

User1209, sorry that you ran into issues with the boot loader.

I did not have any such issues. I left my SSD connected, ran this process, and booted into Linux without issues after the BIOS updated.

I hope others have such good luck!

The two times I booted the W10 installer mentioned in the other thread I linked, I did it without having the drive physically installed in the computer. For the firmware update I just did, I left the drive installed, so it happened in both scenarios (with/without drive installed).

This does not happen at all when I boot up arch install usb stick I’ve been using (it doesn’t mess with any settings at all unless I explicitly tell it to).


Superb! This is exactly what I did last but didn’t have time to write it up. This should be pinned along with the BIOS threads.

1 Like

I finally got around to doing this. It worked perfectly.

Updating the BIOS was fairly quick. I was not expecting the updating EC/updating PD1/updating PD2 procedures and these took long enough to make me uncomfortable, but they completed and everything’s fine.

And Windows did not mess up my bootloader!

Now I wonder if my SSD updater .EXE will work this way?


Worked perfectly for 3.06 bios update.

Used this method to install firmware from windows iso boot. Running manjaro w/ full disk encryption, i7-1185G7, phase 2 release.

The power button is not longer like looking into the sun! (Set power LED display brightness in BIOS).

1 Like

It worked for me as well. Upgrading to 3.06 on an October batch laptop. I had to perform three extra steps to be able to boot from the ventoy USB disk:

  1. disable secure boot in existing bios
  2. install ventoy using MBR partitions. It would not work for me if ventoy was installed with guid partitions
  3. use a USB mouse. The builtin trackpad would not work for me with the windows installer
1 Like

I had a similar experience with @User1209. BIOS and other images were installed correctly. However, a new directory was created by this process named /boot/EFI/Insyde, which wasn’t there before, and the grub got nuked. I followed his recommendation and re-installed grub from a live arch linux installation medium with the following command found at wonderful arch wiki:
# grub-install --target=x86_64-efi --efi-directory=/boot --bootloader-id=GRUB
Please make sure you run this command after chrooting in your system and not from the installation medium. I had a LUKS encrypted drive, there were a few more steps that took me an hour or so to figure out in total.
Hope this helps to the next individual who may experience this issue.

1 Like

Thank you for sharing this!
really looking forward to the official LVFS implementation.
<3 loving my Framework laptop with Pop!_os 21.04


I have a question on this.
So framework does use insyde bios, right? I happen to have a Lenovo Yoga notebook and I am also looking for a solution to update my bios without having to install Windows.
So my question is: is the update program from framework a GUI application or is this just a “dos-like” application? Can you even start graphical programs from Windows Installer command line? Because Lenovo is shipping the updates with a GUI that looks like a program from 1995.