如果需要在使用超快速启动时输入UEFI固件设置实用程序(在POST过程中未加载键盘驱动程序),我希望写入“ Os Indications” efi变量。我的操作系统是Ubuntu 14.04内核3.13.0-35-generic。
OsIndications
变量返回一个UINT64位掩码
OsIndicationsSupported
变量返回一个UINT64位掩码该
EFI_OS_INDICATIONS_BOOT_TO_FW_UI
位可以在OsIndicationsSupported变量由固件设置,如果固件支持OS请求停止在固件的用户界面。EFI_OS_INDICATIONS_BOOT_TO_FW_UI
如果操作系统希望固件在下次启动时停止在固件用户界面上,则可以由操作系统在OsIndications变量中设置该 位。
EFI_OS_INDICATIONS_BOOT_TO_FW_UI
=0x0000000000000001
- 佩奇312 UEFI规范2.3.1C的
我的固件能够在下次启动时进入固件设置实用程序:
$ hexdump /sys/firmware/efi/vars/OsIndicationsSupported-8be4df61-93ca-11d2-aa0d-00e098032b8c/data
0000000 0001 0000 0000 0000
0000008
我可以在/sys/firmware/efi/efivars
使用时 创建一个新变量
$ printf\x07\x00\x00\x00\x00" > myvar-12345678-1234-1234-1234-123456789abc
但是,写入efi变量会OsIndications-8be4df61-93ca-11d2-aa0d-00e098032b8c
导致各种结果write error: Invalid argument
:
使用新的efivarfs
# printf "x00\x00\x00\x01" > /sys/firmware/efi/efivars/OsIndications-8be4df61-93ca-11d2-aa0d-00e098032b8c
-bash: printf: write error: Invalid argument
# printf "x00\x00\x00\x01" > /sys/firmware/efi/efivars/OsIndications-8be4df61-93ca-11d2-aa0d-00e098032b8c
-bash: printf: write error: Invalid argument
# printf "\x01" > /sys/firmware/efi/efivars/OsIndications-8be4df61-93ca-11d2-aa0d-00e098032b8c
-bash: printf: write error: Invalid argument
# cat enter-uefi-fw > /sys/firmware/efi/efivars/OsIndications-8be4df61-93ca-11d2-aa0d-00e098032b8c
cat: write error: Invalid argument
使用旧的1024字节最大sysfs-efivars
# cat enter-uefi-fw > /sys/firmware/efi/vars/OsIndications-8be4df61-93ca-11d2-aa0d-00e098032b8c/raw_var
cat: write error: Input/output error
# cat enter-uefi-fw > /sys/firmware/efi/vars/new_var
cat: write error: Invalid argument
# echo 'enter-uefi-fw' > /sys/firmware/efi/vars/OsIndications-8be4df61-93ca-11d2-aa0d-00e098032b8c/raw_var
-bash: echo: write error: Invalid argument
# printf "\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" > /sys/firmware/efi/vars/OsIndications-8be4df61-93ca-11d2-aa0d-00e098032b8c/raw_var
-bash: printf: write error: Invalid argument
检查了UEFI变量支持正常运行的要求
- EFI Runtime Services支持应包含在内核
$ cat /boot/config-$(uname -r) | grep CONFIG_EFI=y
返回中CONFIG_EFI=y
- 内核处理器位/架构和EFI处理器位/架构应该匹配
吗? - 内核应以EFI模式引导
固件设置实用程序/ BIOS中禁用了CSM - 不应通过内核cmdline禁用内核中的EFI运行时服务,即,不应使用noefi内核参数。
cat /proc/cmdline | grep EFI
什么都不返回 - efivarfs文件系统应安装在/ sys / firmware / efi / efivars
mount | grep efivars
返回中none on /sys/firmware/efi/efivars type efivarfs (rw)
efivar -l
应该列出EFI变量而没有任何错误。
该命令列出了82行,没有错误。- 检查是否存在/ sys / firmware / efi / efivars / dump- *文件。
那里没有转储文件。
根据https://ask.fedoraproject.org/en/question/8264/after-installing-fedora-i-cant-open-biosefi-setup/?answer=16402#post-id-16402该cat enter-uefi-fw > /sys/firmware/efi/vars/new_var
命令应在Fedora中运行17。
第一次删除OsIndications并没有改善
# rm -rv /sys/firmware/efi/efivars/OsIndications-8be4df61-93ca-11d2-aa0d-00e098032b8c
removed '/sys/firmware/efi/efivars/OsIndications-8be4df61-93ca-11d2-aa0d-00e098032b8c'
# ls -l enter-uefi-fw
-rw-r--r-- 1 root root 2084 Aug 25 20:23 enter-uefi-fw
# cat enter-uefi-fw > /sys/firmware/efi/vars/new_var
cat: write error: Invalid argument
如何从命令行更新Ubuntu 14.04(可信任)中已经存在的OsIndications efi变量?
-bash: echo: write error: Invalid argument