For a larger project, we had to update BIOS settings on a HP Z2 Mini G9 Workstation Desktop PC – from within Linux, that is. Now “BIOS” in essence is the firmware that is running before Linux is active. This means it is highly manufacturer dependent and you cannot – possibly – update the BIOS without a manufacturer supplied program to do that.
Is there such thing for HP? Turns out: there is! So now you can change any BIOS setting from within Linux. Also, for example, configuration settings to start the PC at a certain time or day, or to change power-on-button settings.
At https://ftp.hp.com/pub/caps-softpaq/cmit/linuxtools/HP_LinuxTools.html, HP supplies us with a nice .tgz file that contains several RPM’s and a few utilities that have been nicely compiled for other Linux distributions. Installation is rather easy:
wget https://ftp.hp.com/pub/softpaq/sp143001-143500/sp143035.tgz tar -zxf sp143035.tgz cd hpflash-3.22/ cd non-rpms/ tar -ztf hpuefi-mod-3.04.tgz cd hpuefi-mod-3.04/ make sudo insmod hpuefi.ko sudo mknod -m 644 /dev/hpuefi c `grep hpuefi /proc/devices|cut -d ' ' -f 1` 0
So there we are: our kernel module has been loaded and a device is available. If we go back up one directory, you’ll notice that there is another tgz-file there, called
hp-flash-3.22_x86_64.tgz. This is full of
hp-flash utilities, compiled for several Linux-distributions. You can find, for example, hp-
hp-flash.sled15 among others. A nice
install.sh script could help you put these in the
/opt/hp/hp-flash/bin/ directory, should you be interested in that.
Now I’m actually quite lazy and not willing to clutter my system with proprietary HP utilities, so I will not run the installer script. The
hp-repsetup utility is what is needed for BIOS functionality and as I’m running Ubuntu 22.04, I’ll just run the
hp-repsetup.u2204 utility right from the
After this, things are quite easy.
Reading all BIOS settings can be done with
hp-repsetup.u2204 -a -g biosfile – where the
-a option means “write ASCII”, the
-g is for “get” and
biosfile is where the output will be stored. If you leave the
-a out, the output file is written as Unicode UCS-2, which can be edited by
vi, but will not show up nicely in
Now you can edit the fields that you want to change, by editing the
biosfile that you just created with an editor of choice. Simply put a * in front of options that you would like to enable. Then run hp-repsetup again, this time as
hp-repsetup -a -s biosfile – where
-a is still for ASCII and
-s is for “set”. You don’t have to set everything at once, it is also possible to just change a single setting. For example, make a file
/tmp/newsetting that only contains:
hp-repsetup.u2204 -a -s /tmp/newsetting to just have the PC autostart on Wednesdays.
Important Wisdom: as far as I can see, the “language” setting does not interfere with the
hp-repsetup BIOS output, i.e. if you change your BIOS language to Traditional Chinese, your settings in
hp-repsetup will still be English. (Tip: should you want to test this yourself, please use a language that you can revert from without calling HP support!)
hp-repsetup script (as opposed to the
hp-repsetup.u2204 program that I’m running) does a few more things: it runs
modprobe hpuefi.ko and re-runs the
mknod command with a script that it (most likely) installed during install phase; afterwards, it unloads the
hpuefi.ko kernel module from memory again.
As said, I did not install and I’m only doing this once, so I’m not too interested in putting this somewhere on the system, but your situation could be different.