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.

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

  • 2015-05-14 at 20:12
    Permalink

    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

    Reply
    • 2015-09-29 at 17:48
      Permalink

      Strange. I had to boot with secure boot + UEFI πŸ˜€

      Reply
      • 2016-10-02 at 13:49
        Permalink

        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 πŸ™‚

        Reply
  • 2015-06-30 at 17:15
    Permalink

    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.

    Reply
  • 2015-07-21 at 23:14
    Permalink

    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.

    Reply
  • 2015-07-27 at 13:41
    Permalink

    Thanks. Worked fine on my X220.

    Reply
  • 2015-08-09 at 13:01
    Permalink

    Thanks, it worked! πŸ˜€

    Reply
  • 2015-09-06 at 13:17
    Permalink

    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!

    Reply
  • 2016-01-08 at 12:23
    Permalink

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

    Reply
  • 2016-02-22 at 16:58
    Permalink

    Worked great on my W550s

    Reply
  • 2016-04-09 at 21:35
    Permalink

    Can’t find the CD for the Lenovo Ideapad U430 Touch :-/

    Reply
  • 2016-04-30 at 15:49
    Permalink

    Thanks – it works perfectly on my ThinkPad X1 Carbon! Very nice!

    Reply
  • 2016-05-01 at 11:21
    Permalink

    Thanks!

    It worked on my x260

    Reply
  • 2016-05-06 at 12:35
    Permalink

    Help. When trying to boot the usb drive it says “non-system disk or disk error”

    Reply
    • 2017-07-07 at 21:44
      Permalink

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

      Reply
      • 2017-07-09 at 11:14
        Permalink

        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.

        Reply
  • 2016-07-13 at 10:09
    Permalink

    Many thanks! It works fine on my ThinkPad X1 Carbon 2nd Gen.

    Reply
  • 2016-07-19 at 21:00
    Permalink

    Worked perfect for me! No problems at all! Thanks.

    Reply
  • 2016-07-20 at 00:35
    Permalink

    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)

    Reply
    • 2016-09-08 at 07:24
      Permalink

      Hey Snowpaws… I managed to post my solution by replying to the wrong person below.

      Reply
    • 2017-07-01 at 01:29
      Permalink

      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?

      Reply
  • 2016-07-27 at 02:19
    Permalink

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

    Reply
    • 2016-09-08 at 07:23
      Permalink

      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 πŸ™‚

      Reply
  • 2016-10-07 at 14:11
    Permalink

    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 )

    Reply
  • 2016-10-17 at 15:38
    Permalink

    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.)

    Reply
    • 2016-10-17 at 16:09
      Permalink

      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.

      Reply
      • 2016-10-17 at 17:14
        Permalink

        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.

        Reply
  • 2016-12-20 at 05:09
    Permalink

    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.

    Reply
  • 2017-01-28 at 04:49
    Permalink

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

    Reply
  • 2017-02-07 at 16:32
    Permalink

    if only i could find a iso for Lenovo z50-70 πŸ™

    Reply
  • 2017-03-28 at 20:06
    Permalink

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

    Reply
  • 2017-04-18 at 11:54
    Permalink

    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

    Reply
    • 2017-07-01 at 02:41
      Permalink

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

      Reply
  • 2017-07-01 at 01:36
    Permalink

    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

    Reply
    • 2017-07-01 at 02:43
      Permalink

      A T460p, I should have said.

      Reply
  • 2017-07-02 at 21:27
    Permalink

    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.

    Reply
  • 2017-07-17 at 04:44
    Permalink

    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

    Reply
  • 2017-08-02 at 22:19
    Permalink

    What file do I use for Lenovo T520?

    Reply
  • 2017-08-05 at 09:07
    Permalink

    Worked on Lenovo ThinkPad P50 — BIOS 1.43, Firmware 1.16

    Reply
  • 2017-08-24 at 16:12
    Permalink

    Have a problem on ThinkPad W510 – “no operating system” display, when reviewing the USB I can see that there is no EFI directory with data. Only Flash directory and some files like comand.com, autoexec.bat, etc.

    The iso file got from:
    http://support.lenovo.com/pl/en/downloads/migr-74859 version 1.45 supposedly.

    Reply

Leave a Reply

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

By continuing to use the site, you agree to the use of cookies. more information

The cookie settings on this website are set to "allow cookies" to give you the best browsing experience possible. If you continue to use this website without changing your cookie settings or you click "Accept" below then you are consenting to this.

Close