Выполнить действие при обнаружении вторжения шасси.

вы можете бесплатно подписаться на «Red Hat Enterprise Linux Developer Suite», а затем получить доступ к обновлению. Но в вашем случае вам просто нужно использовать CentOS, который полностью совместим.

2
31.03.2017, 17:09
1 ответ

ниже цитата из: 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 с GUID 12345678-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.

1
27.01.2020, 22:10

Теги

Похожие вопросы