Skip to content

Instantly share code, notes, and snippets.

@eNV25
Last active October 28, 2024 14:10
Show Gist options
  • Save eNV25/c8001491dc0440656ff7b0ae18993ba1 to your computer and use it in GitHub Desktop.
Save eNV25/c8001491dc0440656ff7b0ae18993ba1 to your computer and use it in GitHub Desktop.
Instructions to Update the BIOS/UEFI for an HP Laptop on Linux

Instructions to Update the BIOS/UEFI for an HP Laptop on Linux

To update the BIOS/UEFI firmware requires HP-specific files in the EFI System Partition, also referred to as ESP.

On a Linux system, the ESP is typically mounted on /boot/efi or /efi. Whithin you should also find a EFI directory, e.g. /boot/efi/EFI or /efi/EFI. This article assumes that the ESP is mounted on /efi and that the /efi/EFI directory exists. You can replace that with the mount point your system uses.

The HP-specific files are located in /efi/EFI/HP or /efi/EFI/Hewlet-Packard. These files typically come preinstalled in HP Windows PCs. If you have these files you could skip Install HP-specific files.

Install HP-specific files

We can obtain the HP-specific files using HP's HP PC Hardware Diagnostics 4-IN-1 USB KEY installer. This installer contains the needed files. We can simply extract this installer and copy the needed files to the ESP

HP's installer only runs on Windows, but it is possible to extract it by running the self-extracting executable on Wine. You cannot simply extract the executable using 7-zip because the executable needs to do some file generation.

Download the executable. You can get the URL to the latest executable from HP's website.

$ wget https://ftp.hp.com/pub/softpaq/sp112501-113000/sp112853.exe

Run the executable using wine. This will extract its contents to ./sp112853.

$ wine sp112853.exe /s /e /f sp112853

Copy the HP-specific files to the the ESP.

# cp -r sp142721/field/{Hewlett-Packard,HP} /efi/EFI/

According to HP, this works for most hardware. For some cases you may need additional files. I have tired this with an HP Pavilion 13-an0008ne Laptop only, which required no additional steps.

Install BIOS update

You'll need to find you updated BIOS image. You can find one by going to HP's Software and Drivers page, and input your serial number. Make sure you select Windows as your Operating System, otherwise it may not show the updates.

These drivers often also come in Windows executables, you should run them in wine. The executable will first fail to install automatically. Then it will display different options on how to procede. Select the Copy option and select a directory where the BIOS image and the key file should be copied to.

$ wget https://ftp.hp.com/pub/softpaq/sp112501-113000/sp112516.exe
$ wine sp112516.exe /s /f sp112516           # extract and execute

Complete BIOS update using HP Hardware Diagnostics

There should be a .bin and an .s12 file. Copy these files to the ESP to the directory /efi/EFI/Hewlett-Packard/BIOS/New and /efi/EFI/HP/BIOS/New. Here I am using 084C5 as an example.

# mkdir /efi/EFI/Hewlett-Packard/BIOS/New
# cp sp112516/084C5{.bin,.s12} /efi/EFI/Hewlett-Packard/BIOS/New
# mkdir /efi/EFI/HP/BIOS/New
# cp sp112516/084C5{.bin,.s12} /efi/EFI/HP/BIOS/New

At this point you should have the needed HP-specific files and the BIOS update installed in the ESP. Now, you can actually complete the update.

Boot into firmware settings and press F2 to enter HP Hardware Diagnostics. You should be presented a menu and there should a menu entry named BIOS Management. Navigate to BIOS Management > Update BIOS. Your BIOS should start updating.

If you have enabled Secure Boot with custom keys, you will first need to sign the HP-specific .efi files.

Complete BIOS update using Win+B key combination

Sometimes the previous method does not work, and the BIOS Management option does not show up. You can alternatively copy the .bin and .s12 file to /efi/EFI/Hewlett-Packard/BIOS/Current or /efi/EFI/HP/BIOS/Current, and press Win-B while the PC is booting up. This key combination should cause a BIOS firmware recovery using the files you copied.

Also note that updating will re-enable Secure Boot if had it disabled. If so, you might want to disable it again. Your custom Secure Boot keys will be preserved.

@bretif
Copy link

bretif commented Sep 18, 2024

Method proposed by @alexey198233 works well on Ubuntu 24.04.
Easy and no problem at all

@alexey198233
Copy link

alexey198233 commented Sep 18, 2024

There is one more way. I will explain using the example of the HP Probook 440g6 firmware.

The BIOS downloaded from the HP website is not intended for direct flashing (in my case, this is the R71_012800.bin file). The utilities on the HP_TOOLS section are needed to create the firmware.bin file (add few bytes to the beginning of the file), not for flash. The EFI/HP/BIOS/New path apparently serves only to display information about the firmware, it does not need to be created for flashing (that is why, if you have no HP_TOOLS partition, it complains about the incorrect firmware file size because it is not on the required path ). The firmware itself is created by utilities, copied into the EFI/HP/DEVFW folder and then flashed.
The algorithm is as follows:

  1. Download exe archive with utilities and the BIOS archive inside.
  2. Unpack the archive, run the installation under Wine or VirtualBox.
  3. After running the utility, there will be a bunch of errors in the logs about the impossibility of creating a correct firmware.bin file, since there is no full access to the WMI interface,
    but the firmwareRecovery.bin file will be created - this is the bios file for the firmware. It is created during the launch of HpFirmwareUpdRec and is deleted when it is closed.
    Minimize HpFirmwareUpdRec, copy the firmwareRecovery.bin file and rename it to firmware.bin
  4. Mount the EFI partition and copy firmware.bin to the EFI/HP/DEVFW folder.
  5. Reboot, go to bios. The firmware will start automatically when you go to the bios / firmware update section.
    Before flashing, make sure that the downloaded bios file exactly for your model (the list of supported models you can found in the History.txt file).

@alexey198233
Copy link

Method proposed by @alexey198233 works well on Ubuntu 24.04. Easy and no problem at all

You can use this method also , Linux tools support limited devices.
https://gist.github.com/eNV25/c8001491dc0440656ff7b0ae18993ba1?permalink_comment_id=5195795#gistcomment-5195795

@dmitrmax
Copy link

dmitrmax commented Sep 18, 2024

  1. Download exe archive with utilities and the BIOS archive inside.
  2. Unpack the archive, run the installation under Wine or VirtualBox.

It seems to me that 7z can perfectly unpack those exe files under Linux. So no need for various emulators

@alexey198233
Copy link

  1. Download exe archive with utilities and the BIOS archive inside.
  2. Unpack the archive, run the installation under Wine or VirtualBox.

It seems to me that 7z can perfectly unpack those exe files under Linux. So no need for various emulators

Anyway you need emulator to run HpFirmwareUpdRec.exe , that util unpack main firmware archive (in my case R71_012800.bin > firmwareRecovery.bin). Better just run install directly from wine or under virtualbox and get firmwareRecovery.bin after that , just less move .

@alexey198233
Copy link

alexey198233 commented Sep 18, 2024

R71_012800.bin even not an archive , HpFirmwareUpdRec.exe just append few bites with extended info.

  1. Download exe archive with utilities and the BIOS archive inside.
  2. Unpack the archive, run the installation under Wine or VirtualBox.

It seems to me that 7z can perfectly unpack those exe files under Linux. So no need for various emulators

Anyway you need emulator to run HpFirmwareUpdRec.exe , that util unpack main firmware archive (in my case R71_012800.bin > firmwareRecovery.bin). Better just run install directly from wine or under virtualbox and get firmwareRecovery.bin after that , just less move .

@levicki
Copy link

levicki commented Sep 24, 2024

Can this help?

https://ftp.hp.com/pub/caps-softpaq/cmit/linuxtools/HP_LinuxTools.html

  The toolset is compatible with the following HP systems:
     2015 and newer HP Desktop Workstations
     2018 and newer HP business Notebooks and Desktops.

This utility will not work on platforms prior to those listed above.

@alexey198233
Copy link

Can this help?

https://ftp.hp.com/pub/caps-softpaq/cmit/linuxtools/HP_LinuxTools.html

  The toolset is compatible with the following HP systems:
     2015 and newer HP Desktop Workstations
     2018 and newer HP business Notebooks and Desktops.

This utility will not work on platforms prior to those listed above.

Help with what ? This is tool for flashing HP BIOS , but support limited models . What model you have ?

@levicki
Copy link

levicki commented Sep 26, 2024

Help with what?

With not having to use Wine.

This is tool for flashing HP BIOS , but support limited models.

Yes, I know. That's why I asked if it would be helpful to people commenting here.

What model you have?

HP ProBook 440 G7, should be supported by that tool, but I wasn't asking for myself.

Have you considered making a bootable WinPE image for flashing and adding the Windows flash tool to it instead of running it from Linux with emulation?

@alexey198233
Copy link

Help with what?

With not having to use Wine.

This is tool for flashing HP BIOS , but support limited models.

Yes, I know. That's why I asked if it would be helpful to people commenting here.

What model you have?

HP ProBook 440 G7, should be supported by that tool, but I wasn't asking for myself.

Have you considered making a bootable WinPE image for flashing and adding the Windows flash tool to it instead of running it from Linux with emulation?

Yes, you can use it directly. This is linux executable, but first you must build and load module hpuefi .

@alexey198233
Copy link

Have you considered making a bootable WinPE image for flashing and adding the Windows flash tool to it instead of running it from Linux with emulation?

Yes. But anyway windows HP flash tool try to find and mount HP_TOOL partition. If can't find it - offer to create, if i skip creation and try to flash, then got error "EFI flash not detected as supported".

image

I think it's because can't mount EFI partition . I don't now why , i have simple fat32 efi with correct flags , that normal mount in linux/mac os. I tryed to mount efi by hand and have same error. Also i have some WMI error in logs.

Used Windows 10 PE x64. Maybe its trouble with my assembly PE itself or because partition don't have windows specific directories, i don't have real windows on my laptop to check it.

I fork this manual .
https://gist.github.com/alexey198233/087a1a52d7a31b07bc4e114220561bac

Flashing very easy , and remember: wine is NOT an emulator :)

@levicki
Copy link

levicki commented Sep 26, 2024

Yes. But anyway windows HP flash tool try to find and mount HP_TOOL partition. If can't find it - offer to create, if i skip creation and try to flash, then got error "EFI flash not detected as supported".

Actually, according to your error log it also can't mount the ESP partition on drive T: (it is probably taken by RAM disk in default WinPE image). As for private WMI extension, that is probably installed by some chipset driver and drivers can be integrated in WinPE image too.

@alexey198233
Copy link

Yes. But anyway windows HP flash tool try to find and mount HP_TOOL partition. If can't find it - offer to create, if i skip creation and try to flash, then got error "EFI flash not detected as supported".

Actually, according to your error log it also can't mount the ESP partition on drive T: (it is probably taken by RAM disk in default WinPE image). As for private WMI extension, that is probably installed by some chipset driver and drivers can be integrated in WinPE image too.

I write about that under screenshot log.
T: is not taken at all.
This tool not mount partition on drive , Actually HP tool assign letter for partition, if it taken HP tool just use another letter, with same error.
Possible you can install drivers on flash drive with PE , make windows efi partition on linux system , but this is Instructions to Update the BIOS/UEFI for an HP Laptop under Linux and it's easy and quick.

@DaRandomCube
Copy link

so, how do i know which additional files i need and where do i place them?

@alexey198233
Copy link

so, how do i know which additional files i need and where do i place them?

you can read step by step manual here :
https://gist.github.com/alexey198233/087a1a52d7a31b07bc4e114220561bac

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