Tools to modify UEFI Variables in Windows/Linux?

I have a DELL machine that use Phoenix SecureCore Tiano as its UEFI/BIOS However, it is totally not configurable as its UEFI shell & menus are hidden in BIOS Setup.

I'm wondering if there were tools that can modify the UEFI settings(such as Boot Items) in user mode? such as "efibootmgr" in linux.

btw, because it is not configurable, I think the boot process is in legacy mode so that's to say OSes can not detect the UEFI exist, am i right?

so, that's the paradox: I must be boot in non-legacy mode to enable UEFI tools to modify boot items in user mode? but I must enable UEFI tools to modify boot items first to enable non-legacy boot?


Solution 1:

EFI implementations must provide some way to control the boot mode (EFI vs. BIOS), except of course for EFI-only implementations without BIOS support. Too often, though, the firmware gives the user little or no explicit control of the matter; instead, the firmware attempts to infer the correct boot mode based on the state of the hard disk -- for instance, it might use EFI mode if a GPT is detected and BIOS mode if an MBR is found; or it might use EFI mode if an EFI System Partition (ESP) is found and BIOS mode if not. You may be able to find a clue about what your firmware is doing by reading the manual. If not, you'll just have to experiment.

When booting removable media, the rules may be different, but you can often give it a kick in the right direction by providing just one boot mode. This may require re-mastering a CD or (more easily) carefully selecting a CD. If you're trying to force an EFI-mode boot, my rEFInd, and in particular its bootable CD version, may be helpful; it boots only in EFI mode, and as configured, it will act as a boot manager for other EFI-based boots, but not for BIOS-mode boots.

Solution 2:

I've just bought a Dell XPS 17 (l702x) and I'm interested in multi-booting a variety of OSes. If what I've understood is correct, the Dell has some form of locked-down Phoenix SecureCore Tiano UEFI 'BIOS'. From what I've read, UEFI isn't directly usable (possibly via a hidden menu etc., which might require a BIOS mod).

It does seem possible to use/access a Phoenix compatible EFI shell, using the open-source (BSD) TianoCore edk2/ShellPkg (source) and edk2/ShellBinPkg (binary) packages (GIT Repo).

I recommend the newer ShellBinPkg, using the "full shell" profile of UEFI Shell 2.0 (supports the most commands). You can also rebuild a custom shell using the ShellPkg (build standalone or include it in the OVMF package to generate a x64 version) - Inclusion of UEFI shell in Linux distro iso.

The [U]EFI shell binary is compiled to run independent of the firmware. This can be tested by putting the shell on a FAT32 file system (USB stick, hard drive partition), renamed as /efi/boot/bootx64.efi and then booting to it, from your [UEFI] BIOS.

Help text for the shell is accessed by typing help utilname. Just using help produces a list of all available shell commands.

Note: If you are unable to launch UEFI Shell from the firmware directly, create a FAT32 USB pen drive with Shell.efi copied as (USB)/efi/boot/bootx64.efi . This USB should come up in the firmware boot menu. Launching this option will launch the UEFI Shell for you. - Arch Linux's take on UEFI

Solution 3:

I just release my utility if anyone is interested. It edits UEFI variable in windows.

https://gist.github.com/Zibri/19f9838ffd12349bb2c6c3afddc9388f/

Updated on 25/02/2020 to version 1.2.
No internet connection needed.
Virus total reports 6 (false positives) over 96 because the code is obfuscated.