Updating the BIOS on Lenovo laptops from Linux using a USB flash stick

Aren’t hardware manufacturers funny? They either require an old-fashioned operating system (Windows) or museum hardware (floppy drives) to update a BIOS. Apparently they never learn and are instead busy adding features like DRM and UEFI to make our lives even more miserable.

However updating the BIOS on my Lenovo X230 laptop was surprisingly easy once I learned how to do that (kudos to a G+ post I stumbled upon).

  1. Go to support.lenovo.com (or better use a search engine becaues the Lenovo website is beautiful but technically pretty broken and slow) and search for the BIOS upgrade of your laptop model.
  2. Download the most recent ISO file. Look for “BIOS bootable update CD”.
  3. Convert the ISO image using the geteltorito utility (if you don’t have it: apt-get install genisoimage).
    Example:
    geteltorito -o bios.img g2uj18us.iso
  4. Insert any USB stick into your laptop that you have lying around. The image file is just 50 MB in size so even USB sticks with low capacity will work. Keep in mind that the stick will be completely overwritten.
  5. If you are in a graphical environment then unmount the USB stick again.
  6. Find out the device name of the stick. Enter a terminal window and enter “dmesg | tail”. You are looking for something like:[ 2101.614860] sd 6:0:0:0: [sdb] Attached SCSI disk
    The “sdb” tells you that your USB stick is available on /dev/sdb. Don’t just assume it’s sdb. If it’s on another device on your laptop then you will destroy your data.
  7. Copy the image to the USB stick:
    dd if=bios.img of=/dev/sdb bs=1M
  8. Reboot your laptop.
  9. After the Lenovo logo appears press ENTER.
  10. Press F12 to make your laptop boot from something else than your harddisk.
  11. Select the USB stick.
  12. Make sure your laptop has its power supply plugged in. (It will refuse to update otherwise.)
  13. Follow the instructions.

111 thoughts on “Updating the BIOS on Lenovo laptops from Linux using a USB flash stick”

  1. I have a lenovo E330 and had to update the bios firmware
    This technic worked with an ubuntu
    I want to add that I had to modify the boot option to boot in legacy mode with the quick boot disable

      1. Hey, man! You saved my day! I was trying to boot with
        Secure Boot Off
        – UEFI/Legacy Boot [Both]
        but that was failing. You gave me a hint and I did my settings according to the readme table
        at https://download.lenovo.com/pccbbs/mobiles/r02uj49d.txt
        with “OS Optimized Defaults” setting [Disabled] case, i.e. settings from the first column. See the table below:
        “OS Optimized Defaults” setting [Disabled] case [Enabled] case
        – Security
        – UEFI BIOS Update Option
        – Secure RollBack Prevention [Disabled] [Enabled]
        – Secure Boot
        – Secure Boot [Disabled] [Enabled]
        – Startup
        – UEFI/Legacy Boot [Both] [UEFI Only]
        – UEFI/Legacy Boot Priority [Legacy First] (Not shown)
        – CSM Support [Yes] [No]

        May be it will help someone else too 🙂

        1. These settings worked fine for me, and after have done two times the dd step, I was able to upgrade my T460s’ Bios. I think that the crucial part is boot in a Legacy mode, not UEFI.

          1. Raghavendra Rao

            Excellent! YES you have to run the dd command TWICE compulsorily…then verify the contents under the flash drive. It should look something like this:

            total 8
            drwx——. 2 user user 2048 Feb 26 2016 $RECYCLE.BIN
            drwx——. 3 user user 2048 Mar 25 2016 EFI
            drwx——. 2 user user 2048 Feb 16 2017 System Volume Information
            drwx——. 3 user user 2048 Jan 16 07:57 Flash

            Once you get this then your BIOS WILL be updated for sure. Just make sure your flash drive gets detected properly.

          2. I’ve tried exactly this process, and while it does result in a bootable image, trying to start the update process yields the error “the system program file was not found on the cd”. I haven’t yet found a way to resolve this problem.

  2. kaloyan petrov

    I use fedora and decided to update my T520i (BIOS 1.29/EC 1.22), using the USB method.
    After a minute of updating, i received an error on the screen.
    I was able to boot with new 1.45 BIOS, but the EC was at version 1.22
    Using an update with a CD fixed things.

  3. suicidaleggroll

    Worked great on my X1 Carbon 3rd gen, thanks. I had originally tried dd’ing the downloaded iso directly to the usb like you can do with so many other isos, but that wouldn’t boot. I was just missing the geteltorito step.

  4. I just upgraded the firmware on my Lenovo X131e with this manual and it worked perfectly.

    A lot easier than having to find a USB CD ROM drive and burning a CD that you’re only going to use once.

    Thanks a lot for your tutorial!

  5. Thanks! Worked perfectly on my ThinkPad X230. Only couldn’t find USB after dismount. Had to replug (and not dismount).

    1. I got the same error message “Non-System disk or disk error” after following all the instructions above. Please help!

      1. Christoph Haas

        I had that a lot with bootable USB sticks and I suspect that it’s a problem with the partition table. Try to remove all but one partition and format that with VFAT (mkfs.vfat). Also “wipefs” seems to have helped me.

  6. On my X260 with the 6/20/2016 bios update (version 1.21), when I use F12 and try to boot from my USB, it just returns me to the boot menu. I’ve tried changing the UEFI/Legacy boot options, but it doesn’t help. Has anyone else gotten this to work? I can’t run the latest fedora kernel without a bios update (https://bugzilla.redhat.com/show_bug.cgi?id=1353103)

    1. Jonathan Hartley

      When selecting “boot from the usb” returned me to the boot menu, it was because I hadn’t properly created a bootable USB. (I was mistyping the “geteltorito” command in the OP above.) Can you boot from the USB on another machine?

    2. hi, i enabled secure boot and had to enable USB HDD Generic STORAGE DEVICE under Startup afterwards. then it worked with my x260

  7. This was really helpful. I just updated the BIOS on my T450s and it worked without a hitch. Thanks!

    1. Had the same problem. To fix it I simply re-did the dd part, unmounted the disk (I had forgot to do that the first time) and tried another usb port. This time it worked!

      @Christoph: Thanks again for this guide, I used it so many times 🙂

  8. Shimon Rura

    Thanks! Worked great on my Thinkpad X240.

    Also potentially helpful: you can check your current BIOS version from linux by running the dmidecode utility. For example:

    $ sudo dmidecode -s ‘bios-version’
    GIET87WW (2.37 )

  9. I am trying to update my BIOS following your guide … just one thing for which I need reassurance:

    The newest iso for the X230t downloads correctly and the checksum fits.
    However, the iso is about 32MB in size, while the result of geteltorito is only 512B.

    Is this correct?

    (I’d rather ask something stupid than being sorry afterwards.)

    1. Christoph Haas

      I searched the Lenovo website for the “X230 tablet” and then went to the “Drivers & Software” section. Next I clicked “BIOS” in the left selection box. That lead me to an ISO file download described as “BIOS Update Bootable CD for Windows 10 (64-bit), 8.1 (32-bit, 64-bit),8 (32-bit, 64-bit), 7 (32-bit, 64-bit), XP – ThinkPad X230 Tablet and X230i Tablet”. I downloaded it and got an ISO file called “gcuj25us.iso”.

      Using “geteltorito” I converted it into an image:

      $ geteltorito -o bios.img gcuj25us.iso
      Booting catalog starts at sector: 20
      Manufacturer of CD: NERO BURNING ROM
      Image architecture: x86
      Boot media type is: harddisk
      El Torito image starts at sector 27 and has 65536 sector(s) of 512 Bytes

      That file now seems to have a reasonable size:

      $ ls -al bios.img
      -rw-rw-r– 1 chaas chaas 33554432 Okt 17 18:07 bios.img

      I hope that helps a bit.

      1. Thank you for such a quick reply.

        I did the very same several times now, but I always got the output

        $ geteltorito -o bios.img gcuj25us.iso
        Booting catalog starts at sector: 20
        Manufacturer of CD: NERO BURNING ROM
        Image architecture: x86
        Boot media type is: harddisk
        El Torito image starts at sector 27 and has 1 sector(s) of 512 Bytes

        Seems like the ‘geteltorito’ from the ‘genisoimage’ package in debian “wheezy” (64bit) is broken.

        I found this version here:
        http://www.splode.com/~friedman/software/scripts/src/misc/geteltorito

        Which gives me the same result you got (now I’m confident to continue with this img).
        Thank you very much the reference!

        After enabling ‘USB UEFI BIOS Support’ in BIOS Configuration, I could finally update.

        And it worked!
        Thank you again for your good and to the point reference.

    2. I have a similar issue (see my post, below); though in my case the .iso and the .img are not only different sizes, but include completely non-intersecting sets of files! WTF??

  10. Thanks. Worked on my T460s.
    Needed to select as follows:
    USB UEFI support = enabled
    OS optimized defaults = disabled
    secure rollback = disabled
    secure boot = disabled
    UEFI / Legacy = both
    Priority = Legacy First
    CSM = yes

    then select F12 to pick USB boot option.

    the menus once inside are weird – written in pseudo english. Select 2. Leave the USB stick plugged in. Press ENTER. (PC will reboot). Then will flash your ROM. then reboot again. Then will flash the ECP.

    1. This still works in 2019 on my T460s!

      Since BIOS version 1.42, Lenovo has provided capsule updates for Linux, so you do not need to burn anything—you just run fwupdmgr and the updates are installed on the next reboot. (The full instructions are in the README.) However, I had to upgrade the BIOS the old way to 1.24 first, as lower versions aren’t compatible with the capsule updates. The guide here and your settings worked perfectly.

  11. Thanks for this – worked like a charm on the W541. This is ridiculous how Lenovo packages updates

  12. Thank you for this solution. I wish I found it earlier after struggling for a few hours.

  13. Hello, when I try to do the 3rd step it says:
    – Cannot read image/device “6muj31uc.iso”. Aborting
    What am i doing wrong??
    Pls Help

    1. Jonathan Hartley

      Felix: Sanity check: Does your user have permissions to read the .iso file?

      1. I don’t think it’s a permissions problem. I had the same problem and I attempted to eXecute the same command with the root account which I assume has permission to do whatever and I still got the same error.

        He needs to type the path or directory of the .iso file and include it in his command. I don’t know why we seem to be the only ones who had to that, maybe we’re just noobs who didn’t know that we had to save the .iso in a certain place in order for the terminal and the geteltorito utility to be able to see it without guiding it.

        So for eXample: -o bios.img /home/user/Desktop/g2uj18us.iso

        instead of just: -o bios.img g2uj18us.iso

        That worked for me

    2. Hey FeliX I had the same problem

      You need to type the path or directory of the .iso file and include it in your command. I don’t know why we seem to be the only ones who had to that, maybe we’re just noobs who didn’t know that we had to save the .iso in a certain place in order for the terminal and the geteltorito utility to be able to see it without guiding it.

      So for eXample: -o bios.img /home/user/Desktop/g2uj18us.iso

      instead of just: -o bios.img g2uj18us.iso

      That worked for me

      I’m more than a year late on my reply but hopefully this helps someone in the future maybe

  14. Jonathan Hartley

    I successfully booted the resulting USB stick. I select “2” to update the BIOS, and then press “y” or somesuch to proceed, and it gives an error: “The system program file was not found on the CD.” I tried the USB stick in all USB ports, that doesn’t help. I’m trying to update a 460p.

    The contents of my USB stick looks like:
    .
    ├── EFI
    │   └── Boot
    │   └── BootX64.efi
    ├── Flash
    │   ├── 406E1.PAT
    │   ├── 406E2.PAT
    │   ├── 406E3.PAT
    │   ├── 506E2.PAT
    │   ├── 506E3.PAT
    │   ├── BCP.evs
    │   ├── NoDCCheck_BootX64.efi
    │   ├── R07ET75W
    │   │   ├── $0AR0700.FL1
    │   │   └── $0AR0700.FL2
    │   ├── README.TXT
    │   └── SHELLFLASH.EFI
    ├── $RECYCLE.BIN
    │   └── desktop.ini
    └── System Volume Information
    ├── IndexerVolumeGuid
    └── WPSettings.dat

    1. Michael Kesper

      Strange, I got this behaviour when erroneously trying to use the T470 image for a T470s.

  15. Grant McWilliams

    This worked on Chapeau 23 (Fedora 23) so thanks! The geteltorito command wasn’t in the repos so I searched online and found a noarch rpm for Fedora 24 and it worked fine. The text in the BIOS update utility is mostly Chinglish which baffles my why a company so large can’t have someone proofread their software but I’m now running the latest BIOS so I’m happy.

  16. Has anyone here successfully updated the BIOS on a G40-30? Download for my BIOS is an .exe with the following contents:

    -a7cn48ww_64/BiosImageProcx64.dll
    -a7cn48ww_64/Ding.wav
    -a7cn48ww_64/FlsHook.exe
    -a7cn48ww_64/FlsHookDll.dll
    -a7cn48ww_64/FWUpdLcl.exe
    -a7cn48ww_64/InsydeFlashx64.exe
    -a7cn48ww_64/iscflashx64.dll
    -a7cn48ww_64/iscflashx64.sys
    -a7cn48ww_64/isflash.fd
    -a7cn48ww_64/xerces-c_2_7.dll

    I have looked around quite a bit, and have yet to come across my scenario – not sure which files I need to copy or whether all etc.

    Just updated the SSD firmware and processor microcode successfully btw

    Thanks,

    Maurice

  17. W541 with the 2.32 update: I can’t get the update to load no matter what. I’ve re-converted the iso, I’ve re-written it to different USB drives. I’ve tried all manner of BIOS options.

    When I choose the flash drive from the list of disks at boot, the screen flashes and returns to the menu of devices.

    Ideas?

    1. Problem resolved: In Fedora, geteltorito does not come as part of the genisoimage package. Had to install it separately, and the .img was created correctly and written to the USB disk.

  18. After a lot of trial and error, I managed to perform a successful BIOS update on my Thinkpad T470.

    A lot of time was wasted initially because I probably had a bad USB thumb drive or something. I used another thumb drive and used the Thinkpad to create a bootable USB disk.

    Then, I performed the following steps in the BIOS:

    * USB UEFI support = enabled
    * OS optimized defaults = disabled
    * secure rollback = disabled
    * secure boot = disabled
    * UEFI / Legacy = both
    * Priority = Legacy First
    * CSM = yes

    From then on, it was easy.

    1. Thanks for that. I was struggled why it didn’t work when I tried to boot my usb even though I strctly followed the instructions. These settings saved my day!

  19. chinnasamy

    Lenovo B490 Bios update failed.but,black screen using instruction please sir.flash drive

  20. Great description and I’d been meaning to do this but CVE-2017-5715 forced me to do it. Easy to use apt-get install genisoimage then etcher app image to burn the iso to a img. Worked flawlessly.

    Thanks

  21. Brian Haley

    My T460s wouldn’t initially boot to the USB drive when I chose it from the boot menu (after hitting F12) it just looped back to the menu after a few seconds. After un-plugging the USB stick and plugging back in it did boot to it successfully and I was able to update the BIOS. Just something to try if you get stuck like I did.

  22. This instruction is great, It make release my headache!
    Every single step is necessary!
    My carbon x1 gen 3 work great!!

  23. Works great on the X260. One question though;

    Is it possible to change the bios boot splash logo this way? In Windows you drop your logo.gif image in the same folder as the winuptp executable. When you run winuptp it’ll inform you that a new logo image is available and if you want to flash it. You also need to disable secure rollback if you have the current bios for your machine installed and just want to overwrite the bios splash image.

    Can you drop the logo image on the linux USB stick somewhere and have it flashed?

    1. Answered my own question. It works. Though did throw out an error the first time I tried to flash it. I simply tried again and it worked. Place your custom boot logo image in /ISO/FLASH folder, like in the screenshot I have provided. Next time you boot your machine, rather than the “LENOVO” red and white splash image, will be your custom image.

      https://i.imgur.com/hvZTSO9.png

      This was done on an X260. Customising the bios boot splash image will only work on machines with a BIOS that supports it. DO NOT attempt this before determining whether or not your machine bios supports it. Also learn about what you can and cannot use for bios boot splash images.

      For anyone that wants a Fedora logo: https://i.imgur.com/4IxXCuj.gif

      Make sure the file is named “logo.gif” when it’s placed in the /ISO/FLASH folder. I do not know if the flash tool will detect any image, regardless of what it is named, but it’s better to be safe.

  24. Perfect! This information worked for both my ThinkPads X270 and P51.

    Had to turn off Security > Secure Boot. And switch boot mode to both (legacy and UEFI). Enabled boot menu F12 to select prepared USB drive.

    Thank you!

  25. HenryAvery

    Running Lubuntu on a *pretty old* Lenovo IdeaPad P580… no luck with getting an .iso file. The only file available for download is a windows .exe. Not sure if I can use FreeDOS to run it either. Lenovo doesn’t say anything about that. (We are talking 5 years ago for the last BIOS update though, this is a throwaway pretty much lol)

  26. I was able to use isoHunter to extract the .img file which was able to be turned into a bootable USB.

  27. This works to update BIOS for T470s, after many trials with FreeDOS, UNetbootin, and none of these worked.

    Your tutorial was my savior, thanks a lot!

  28. Eduardo Sanchez

    Thank you so much for this. I successfully converted the *.iso file to *.img and dd’d it to a USB drive. I used Ubuntu 18.04 LTS to make the conversion.

    This helped me update the BIOS on my Lenovo x220 to the latest and greatest BIOS version 1.46 from 2018-06-26.

    Thanks again for this guide!

  29. Lenovo Support

    I really appreciate this wonderful post that you have provided for us. If you are facing any kind of glitches concerned with any of the lenovo product then feel free to drop a call at Lenovo support number. In case, if you need any kind of further help then get in touch with our lenovo support team .Visit Here : https://lenovosupport.org/lenovo-customer-support/

  30. Lenovo Support

    No doubt this is an excellent post I got a lot of knowledge after reading good luck. Can you offer some more information about the problem that you’re experiencing so we can assist? I am also facing Lenovo laptop and would like to make sure we can all support it appropriately

  31. Oddly, if I mount the 6.6MB iso, I find the files below (totalling 5.0MB), but if I run `geteltorito -o 7luj27uc.img 7luj27uc.iso`, the .img file is only 1.5MB and contains a shorter list of completely different files (totallying 174KB).

    7luj27uc.iso (for a T61):

    $01AF000.FL1
    $01AF000.FL2
    06f1.hsh
    06F1.PAT
    06f4.hsh
    06F4.PAT
    06f5.hsh
    06F5.PAT
    06f9.hsh
    06F9.PAT
    06fa.hsh
    06FA.PAT
    06fb.hsh
    06FB.PAT
    06fd.hsh
    06FD.PAT
    10661.hsh
    10661.PAT
    10671.hsh
    10671.PAT
    10674.hsh
    10674.PAT
    10676.hsh
    10676.PAT
    CHKBMP.EXE
    COMMAND.COM
    FLASH2.EXE
    lcreflsh.bat
    LOGO.BAT
    LOGO.SCR
    PHLASH16.EXE
    PREPARE.EXE
    README.TXT
    TPCHKS.EXE
    UPDTFLSH.EXE
    UPDTMN.EXE
    USERINT.EXE
    UTILINFO.EXE

    7luj27uc.img:

    AUTOEXEC.BAT
    CD-DRV.BAT
    COMMAND.COM
    CONFIG.SYS
    HIMEM.SYS
    IBMBIO.COM
    IBMDOS.COM
    IBMTPCD.SYS
    MSCDEX.EXE
    QCD-DRV.COM

  32. Continuing the previous post …

    My version of geteltorito is the one linked above by Nadine (http://www.splode.com/~friedman/software/scripts/src/misc/geteltorito)

    When I run:

    geteltorito -o 7luj27uc.1.img ./7luj27uc.iso

    I get:

    Booting catalog starts at sector: 20
    Manufacturer of CD:
    Image architecture: x86
    Boot media type is: 1.44meg floppy
    El Torito image starts at sector 28 and has 2880 sector(s) of 512 Bytes

    Image has been written to file “7luj27uc.1.img”.

  33. Continuing the previous post … My version of geteltorito is the same one linked by Nadine, above. When I run:

    geteltorito -o 7luj27uc.img ./7luj27uc.iso

    I get:

    Booting catalog starts at sector: 20
    Manufacturer of CD:
    Image architecture: x86
    Boot media type is: 1.44meg floppy
    El Torito image starts at sector 28 and has 2880 sector(s) of 512 Bytes

    Image has been written to file “7luj27uc.img”.

  34. Again continuing … If the .iso is somehow representing itself to geteltorito as a floppy, I could see the resulting 1.44MB image; but why then is the mounted .iso not revealing the AUTOEXEC.BAT, or any of the other files, save COMMAND.COM?

  35. Oscar Franzen

    I updated my X1C6 successfully. don’t forget that “UEFI/Legacy boot” MUST be set to “Both” before updating BIOS (mine was set to legacy only and it didn’t work).

    this process is not for the light-hearted. an error during this *will* permanently brick your system board, needing manufacturer replacement. be careful.

    mine worked successfully and the S3 sleep mode is now available in Linux.

    r[~]> dmesg | grep -i “acpi: (supports”
    [ 0.245577] ACPI: (supports S0 S3 S4 S5)

    1. John Johnson

      THIS!! I was having trouble getting my X1C5 to update but setting UEFI/Legacy to Both in the BIOS worked for me. I was sweating the whole damn time. Thank you Oscar, great tip

  36. Thank you this worked perfectly on my T420i. Couldn’t boot the USB when writing the ISO directly but converting it to img as per this article worked a charm.

  37. Just updated my T480. Here are some key takeaways, esp. that I am using Fedora 29:

    a. genisoimage IS NOT the same as geteltorito: there’s no point in installing the genisoimage RPM under Fedora, as it does not include geteltorito, and ONLY geteltorito will strip away the initial blocks that prevent the unmodified ISO from booting properly

    b. when writing to the USB flash device, make sure to write to the whole device, not a partition on the device, e.g.
    good:`dd if=my.img of=/dev/sdX bs=64K`
    bad: `dd if=my.img of=/dev/sdX1 bs=64K`

    c. your BIOS must be set to either UEFI only or Both with ‘try UEFI first’ – otherwise, even a properly prepared USB flash will not boot

  38. Just tried to update my x240;
    creating the bootable usb stick and booting it was no problem.
    But when the setup says it would reboot and flash the Bios it would just do a normal reboot.
    im on version 2.33 and tried to install 2.45 and 2.46
    Any suggestions what could be wrong?

  39. Just to verify this still is relevant, take time to read through comments for additional info.
    Is saving my ass with a bunch of thinkpads.

  40. Simple solution:
    1) Use RUFUS and format the drive to FST32 and tick “Make bootable” and select “MS-DOS”
    2) Unzip to folder
    3) Copy to USB – format2.exe + imagem1a.rom + afudos.exe + compdos.exe (do not copy autoexec.bat)
    4) when it boot to DOS prompt – check C:> dir
    5) type format2.exe imagem1a.rom /rsmb /reboot + Enter

    Done!

  41. There seems to be something wrong with the latest .iso bios update from Lenovo for X230. The newest version is 2.76 (G2ETB6WW) It does not upgrade the Embedded controller. That should be at version 1.14 (G2HT35WW) but mine stayed at 1.13. I had to downgrade to 2.75 to properly upgrade the embedded controller. After that I could upgrade the bios to 2.76

  42. I have a Lenovo t450. I create the usb successfully and boots. It takes me to upgrade the bios by choosing option 2. But after that the system remains unresponsive with a page on saying:

    Now updating.. it may take about a few minutes …

    It has been 2 hours. Please help.

  43. RosieHoward

    Web desk ERP is a dynamic and progressive company with a clear objective – to provide our clients with innovative and cost-effective business solutions through the efficient deployment and integration of information technology.Inventory Management Software in UAE

  44. Aghanya Technology Chennai

    Wow. Great and thanks for the detailed step given. Looking for more updates from you. Thanks again.

  45. HI, I really appreciate this wonderful post that you have provided for us. I have a Lenovo B40-80 so , how can i perform the upgrade if my laptop doesn’t have the .ISO FIle only .EXE and my OS is Linux debian?

  46. Thank-you for the very helpful post. I followed your instructions to create a boot-able USB drive based upon the ISO image file from Lenovo for my W530 laptop. I reset my BIOS settings to default, then selected UEFI Secure Boot = On. The system was able to boot from the USB drive, I selected option #2 from the menu (after reviewing the readme) and performed the BIOS upgrade successfully.

  47. I modified a bit to accommodate at T480 Lenovo, but this worked perfectly. Nice and clear instructions. Shame on Lenovo for being so biased to Windows. Their documentation is non-existent for Linux-based distros. Thank you!

Leave a Reply

Your email address will not be published. Required fields are marked *

Scroll to Top