При необходимости войти в утилиту настройки прошивки UEFI при использовании сверхбыстрой загрузки (драйверы клавиатуры не загружаются во время POST), я хочу записать в переменную efi «Os Indications». Моя ОС - Ubuntu 14.04, ядро 3.13.0-35-generic.
OsIndications
переменная возвращает битовую маску UINT64
OsIndicationsSupported
переменная возвращает битовую маску UINT64
EFI_OS_INDICATIONS_BOOT_TO_FW_UI
Бит может быть установлен в переменной OsIndicationsSupported прошивкой, если запросы микропрограмм поддерживает ОС останавливаться на пользовательском интерфейсе прошивки.EFI_OS_INDICATIONS_BOOT_TO_FW_UI
Бит может быть установлен в ОС в переменной OsIndications, если желания OS для прошивки останавливаться на пользовательском интерфейсе прошивки на следующей загрузке.
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.
CSM отключен в утилите настройки прошивки / BIOS - Службы времени выполнения EFI в ядре не должны быть отключены через cmdline ядра, т.е. параметр ядра noefi не должен использоваться.
cat /proc/cmdline | grep EFI
ничего не возвращает - efivarfs файловая система должна быть установлена в / SYS / прошивки / 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-16402cat 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
Как я могу обновить уже существующую переменную OsIndications efi в Ubuntu 14.04 (trusty) из командной строки?
источник
-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
? обратите внимание на начальный '\' в printf '\ x', который вы пропустили, тот факт, что мы заполняем все значение, и raw_var в конце пути.# 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
cat
команды?# ls -l enter-uefi-fw
возвращает-rw-r--r-- 1 root root 2084 Aug 25 20:23 enter-uefi-fw
.