Оболочка UEFI: постоянно изменяйте значение переменной (энергонезависимо) - PullRequest
0 голосов
/ 17 декабря 2018

Я написал UEFI-приложение для изменения переменных UEFI (вызывая gRT-> SetVariable (..)).Несмотря на то, что я изменяю энергонезависимую переменную, изменения не сохраняются после сброса.

Как я могу сделать изменения постоянно?

С помощью UEFI-App я могу изменить значениепеременной я выбираю.С dmpstore variablename я могу убедиться, что значение переменной было изменено правильно (и что у него есть флаг 'NV').Но после сброса восстанавливается старое значение.

Я использую uefiversion 2.4 и uefishellsupport 3.

Справочная информация по этому вопросу: Доступ к настройке меню BIOS / UEFI через uefiоболочки .Я хотел бы изменить такие переменные, как ConOut, ConIn и другие, которые я могу изменить в настройках меню BIOS.

Кстати: установка переменных среды с помощью команды оболочки set uefi вносит постоянные изменения.Я не понимаю, почему изменения переменных UEFI не являются постоянными ...

Ответы [ 2 ]

0 голосов
/ 05 января 2019

Не все изменения глобальных переменных UEFI сохраняются при перезагрузке.

В случае CONIN, CONOUT и ERROUT применяется следующий абзац из раздела 3.6 спецификации UEFI:

"Каждая из переменных ConInDev, ConOutDev и ErrOutDev содержит дескриптор EFI_DEVICE_PATH_PROTOCOL, который определяет все возможные устройства по умолчанию для использования при загрузке. Эти переменные являются энергозависимыми и задаются динамически при каждой загрузке. ConIn, ConOut и ErrOut являютсявсегда правильные подмножества ConInDev, ConOutDev и ErrOutDev. "

0 голосов
/ 18 декабря 2018

Для задания переменных среды оболочки UEFI следует использовать EFI_SHELL_PROTOCOL.SetEnv().

Эта функция изменяет текущее значение указанной переменной среды.Если переменная среды существует и значение является пустой строкой, то переменная среды удаляется.Если переменная среды существует и значение не является пустой строкой, то значение переменной среды изменяется.Если переменная среды не существует и значение является пустой строкой, никаких действий не предпринимается.Если переменная среды не существует и значение является непустой строкой, то переменной среды создается и присваивается указанное значение.

См. Спецификация оболочки UEFI дляподробнее

...