вы можете бесплатно подписаться на «Red Hat Enterprise Linux Developer Suite», а затем получить доступ к обновлению. Но в вашем случае вам просто нужно использовать CentOS, который полностью совместим.
ниже цитата из: firmware.intel.com/blog/accessing-uefi-variables-linux
Опубликовано mfleming 03.01.2014
В этой статье дается краткое изложение из двух методов, которые Linux предоставляет для доступа к переменным времени выполнения UEFI, наряду с компромиссами и немного истории.
Устаревший интерфейс efivars
Исходный интерфейс, написанный Мэттом Домшем, для взаимодействия с переменными UEFI экспортируется через универсальный sysfs ядра Linux. файловая система. Этот интерфейс был создан во времена EFI, до UEFI для использования с машинами Itanium и поэтому поставляется с определенной суммой исторического багажа.
Устаревший интерфейс efivars экспортируется по пути «firmware/efi/vars/» относительно точки монтирования sysfs.Предполагая что sysfs монтируется в /sys, каталог, содержащий efivars файлы будут,
/sys/firmware/efi/vars/
Помимо специальных файлов
new_var
иdel_var
, каждая запись в указанной выше точке монтирования сама по себе является каталогом — один каталог для каждая переменная UEFI, доступная во время выполнения,Boot0000-12345678-abcd-abcd-abcd-123456789abc/ Загрузка0001-12345678-abcd-abcd-abcd-123456789abc/ BootCurrent-12345678-abcd-abcd-abcd-123456789abc/ BootOrder-12345678-abcd-abcd-abcd-123456789abc/ BootSetup-12345678-abcd-abcd-abcd-123456789abc/ del_var Ланг-12345678-abcd-abcd-abcd-123456789abc/ LangCodes-12345678-abcd-abcd-abcd-123456789abc/ новая_вар Настройка-12345678-abcd-abcd-abcd-123456789abc/
Имя каталога для переменной UEFI состоит из имени переменной и ее глобального уникального идентификатора (GUID). Этот пример:
Boot0000-12345678-abcd-abcd-abcd-123456789abc/
может быть каталогом для первой загрузочной переменной UEFI. В каждом каталоге можно найти следующие файлы, атрибуты
данные руководство raw_var размер
Содержимое большинства этих файлов доступно для чтения человеком и соответствует одноименным переменным параметрам UEFI. То исключением является файл 'raw_var', который содержит двоичные данные.За Например, файл «атрибутов» для указанной выше записи загрузки будет содержать что-то вроде следующих строк ASCII,
EFI_VARIABLE_NON_VOLATILE EFI_VARIABLE_BOOTSERVICE_ACCESS EFI_VARIABLE_RUNTIME_ACCESS
, чтобы указать, что переменная является энергонезависимой и доступна как до, так и после вызова службы загрузки UEFI, ExitBootServices(). Невозможно писать в эти удобочитаемые файлы - их единственный цель состоит в том, чтобы предоставить пользователям подробную информацию о переменной.
raw_var
позволяет считывать/записывать переменную бинарную структуру данных UEFI, используемую в ядре, из пользовательского пространства и является основным часть устаревшего интерфейса. Все модификации существующих переменных выполняются через этот файл путем передачи объекта struct efi_variable,struct efi_variable { efi_char16_t ИмяПеременной[1024/sizeof(efi_char16_t)]; efi_guid_t VendorGuid; беззнаковый длинный DataSize; __u8 Данные[1024]; efi_status_t Статус; __u32 Атрибуты; } __attribute__((упаковано));
Специальные файлы «new_var» и «del_var» в верхнем каталоге используются, как следует из названия, для создания и удаления переменных UEFI. В этих файлах не используется удобочитаемый текст. Вместо этого 'структура Объекты efi_variable передаются туда и обратно между ядром и пользовательское пространство для создания новых или удаления существующих переменных UEFI.
Основной причиной сохранения интерфейса efivars в ядре Linux является наличие инструментов, которые будут использовать только этот интерфейс. интерфейс: инструмент efibootmgr, доступный во всех Linux распределения управлять порядком загрузки в системах UEFI, по-прежнему использует этот устаревший интерфейс.
Однако существуют некоторые ограничения устаревшего интерфейса efivars, которые со временем стали серьезной головной болью.
Наиболее очевидный недостаток заключается в том, что существует верхний предел размера переменных данных UEFI, которые можно читать/записывать. Потому что способ, которым были спроектированы структуры данных ядра, не можно прочитать или записать более 1024 байт переменных данных, и для некоторых случаев использования это ограничение является проблемой.
Кроме того, интерфейс efivars по своей сути требует инструментов для управления переменными UEFI, поскольку интерфейс имеет дело только с чтение и запись копий нетривиальной 'struct efi_variable' структура данных для переменной UEFI через «new_var», «del_var» и специальные файлы 'raw_var'. Невозможно удалить переменную UEFI без создания объекта struct efi_variable и записи его в файл 'del_var'.
Файловая система efivarfs
Чтобы обойти ограничения устаревшего интерфейса efivar, Мэтью Гарретт и Джереми Керр создали совершенно новую файловую систему Linux. Эта новая файловая система получила название «efivarfs» и была частью Linux. версия ядра v3.10.
Как и все другие файловые системы Linux, efivarfs должен быть где-то смонтирован для доступа к своим файлам, что можно сделать, введя следующая команда
mount -t efivarfs none /sys/firmware/efi/efivars
Вместо каталогов efivarfs содержит файлы, имена которых состоят из имени переменных UEFI и GUID,
Boot0000-12345678-abcd-abcd-abcd-123456789abc. Загрузка0001-12345678-abcd-abcd-abcd-123456789abc BootCurrent-12345678-abcd-abcd-abcd-123456789abc BootOrder-12345678-abcd-abcd-abcd-123456789abc BootSetup-12345678-abcd-abcd-abcd-123456789abc
Хотя каждый из файлов содержит двоичные данные (например,
new_var
,del_var
устаревшего интерфейса), структура данных для efivarfs намного проще, состоит всего из 4 байтов для UEFI. битовая маска переменных атрибутов, а остальное - переменные данные UEFI, напримерСтруктура new_efi_variable { атрибуты u32; данные u8[0]; };
Вся остальная информация, такая как имя переменной, GUID и размер, выводится из имени читаемого/записываемого файла. Это делает тривиально создать или удалить переменную UEFI, создав или удаление файлов.
Например, следующая команда оболочки создает новую переменную:
printf "\x07\x00\x00\x00\x00" > myvar-12345678-1234-1234-1234-123456789abc
назвал
myvar
с GUID12345678-1234-1234-1234-123456789abc
иEFI_VARIABLE_NON_VOLATILE
,EFI_VARIABLE_BOOTSERVICE_ACCESS
иEFI_VARIABLE_RUNTIME_ACCESS
биты, установленные в битовой маске атрибута, за которым следует 1 байт данных (последний\x00
).Размер переменной плюс 4 байта данных атрибута можно найти, используя любой из обычных методов получения размера файл. Например, выполнив следующую команду оболочки,
du -b myvar-12345678-1234-1234-1234-12345678abc
напечатает «5» — это 4 байта для битовой маски атрибута переменной плюс один байт данных.
Чтобы удалить переменную, просто удалите ее из файловой системы efivarfs,
rm myvar-12345678-1234-1234-1234-12345678abc
Очевидно, что это гораздо более интуитивно понятный интерфейс для доступа к переменным UEFI из командной строки и из сценариев оболочки. Большинство главное, нет ограничений на количество данных, которые могут быть чтение/запись для переменной UEFI, в отличие от устаревшего интерфейса.
Конечно, несмотря на то, что структура данных, используемая efivarfs, намного проще, чем устаревший интерфейс, она по-прежнему читается/записывается как двоичная. данных и требует большей умственной обработки, чем читаемые человеком файлы предоставляется устаревшим интерфейсом.
В этой статье мы кратко обсудили два решения, которые Linux предоставляет для доступа к переменным UEFI во время выполнения. В то время как новый Файловая система efivarfs предоставляет удобный интерфейс для доступа к UEFI. переменные из сценариев оболочки (и даже из командной строки), устаревший интерфейс по-прежнему используется некоторыми инструментами, а в некоторых ситуациях человекочитаемые файлы могут быть гораздо полезнее, чем только двоичные файлы интерфейс эфиварфс.
Мэтт Флеминг (Matt Fleming) — инженер-программист в Центре технологий открытого исходного кода Intel и специалист по сопровождению ядра Linux (U)EFI.