UEFI следовать за дальше к первоначально спецификации EFI начатой Intel в конец 90-х годов. UEFI использует GPT (таблицу перегородки GUID) вместо MBR (показателя мастерского ботинка) для того чтобы включить поддержку для перегородок более больших чем 2Tb. Поддержка GPT сегодня много биоз имеющаяся а платформа без поддержки UEFI не могут boot операционная система от перегородки GPT более большой чем 2TB. До недавно, UEFI не будет ограничено к лидирующий серверам а теперь будет более банальным на серверах и настольных компьютерах товара.
Я имею UEFI-позволенную материнскую плату Intel и могу boot Fedora 12 и 64ые-разрядн версии перспективы Майкрософт и Windows 7 через UEFI. Пока там все еще некоторые вопросы с UEFI-поддерживают в Fedora 12, вообще оно работают. Тем ме менее единственное UEFI-осведомленное общее назначение что я осведомлен на Fedora 12 efibootmgr Matt Domsch которое применение потребител-космоса Линукс которое может создаться, доработать или разрушить перемеююые UEFI глобально определенные касаясь booting.
Однако стержень Fedora 12 осведомлен больше перемеююых гловальн-определенных UEFI чем тех показанных efibootmgr и этих можно достигнуть через /sys/firmware/efi как показан ниже.
# ls -al /sys/firmware/efi/vars drwxr-xr-x. 2 root root 0 2010-01-22 16:25 Boot0000-8be4df61-93ca-11d2-aa0d-00e098032b8c drwxr-xr-x. 2 root root 0 2010-01-22 16:25 Boot0001-8be4df61-93ca-11d2-aa0d-00e098032b8c drwxr-xr-x. 2 root root 0 2010-01-22 16:25 BootCurrent-8be4df61-93ca-11d2-aa0d-00e098032b8c drwxr-xr-x. 2 root root 0 2010-01-22 23:59 BootOptionSupport-8be4df61-93ca-11d2-aa0d-00e098032b8c drwxr-xr-x. 2 root root 0 2010-01-22 16:25 BootOrder-8be4df61-93ca-11d2-aa0d-00e098032b8c drwxr-xr-x. 2 root root 0 2010-01-22 23:59 ConIn-8be4df61-93ca-11d2-aa0d-00e098032b8c drwxr-xr-x. 2 root root 0 2010-01-22 23:59 ConInDev-8be4df61-93ca-11d2-aa0d-00e098032b8c drwxr-xr-x. 2 root root 0 2010-01-22 23:59 ConOut-8be4df61-93ca-11d2-aa0d-00e098032b8c drwxr-xr-x. 2 root root 0 2010-01-22 23:59 ConOutDev-8be4df61-93ca-11d2-aa0d-00e098032b8c --w-------. 1 root root 0 2010-01-22 23:59 del_var drwxr-xr-x. 2 root root 0 2010-01-22 23:59 ErrOut-8be4df61-93ca-11d2-aa0d-00e098032b8c drwxr-xr-x. 2 root root 0 2010-01-22 23:59 ErrOutDev-8be4df61-93ca-11d2-aa0d-00e098032b8c drwxr-xr-x. 2 root root 0 2010-01-22 23:59 Lang-8be4df61-93ca-11d2-aa0d-00e098032b8c drwxr-xr-x. 2 root root 0 2010-01-22 23:59 LangCodes-8be4df61-93ca-11d2-aa0d-00e098032b8c drwxr-xr-x. 2 root root 0 2010-01-22 23:59 MTC-eb704011-1402-11d3-8e77-00a0c969723b --w-------. 1 root root 0 2010-01-22 23:59 new_var drwxr-xr-x. 2 root root 0 2010-01-22 23:59 PerfDataMemAddr-59d1c24f-50f1-401a-b101-f33e0daed443 drwxr-xr-x. 2 root root 0 2010-01-22 23:59 PlatformLang-8be4df61-93ca-11d2-aa0d-00e098032b8c drwxr-xr-x. 2 root root 0 2010-01-22 23:59 PlatformLangCodes-8be4df61-93ca-11d2-aa0d-00e098032b8c drwxr-xr-x. 2 root root 0 2010-01-22 16:25 Timeout-8be4df61-93ca-11d2-aa0d-00e098032b8c
Здесь что в subdirectory Boot-0000 -8be4df61-93ca-11d2-aa0d-00e098032b8c:
# ls -al /sys/firmware/efi/vars/Boot0000-8be4df61-93ca-11d2-aa0d-00e098032b8c]# ls -al -r--------. 1 root root 4096 2010-01-23 00:02 attributes -r--------. 1 root root 4096 2010-01-23 00:02 data -r--------. 1 root root 4096 2010-01-23 00:02 guid -rw-------. 1 root root 4096 2010-01-22 16:25 raw_var -r--------. 1 root root 4096 2010-01-23 00:02 size
Другие subdirectories содержат подобные входы. Некоторые из этих subdirectories (тех с GUID 8be4df61-93ca-11d2-aa0d-00e098032b8c - см. ниже) содержать данные касаясь глобальных определенных документированных перемеююых (схематически подобных к относящим к окружающей среде перемеююым) в спецификации UEFI. Здесь таблица глобально определенных перемеююых в V3.2 спецификации UEFI.
| Variable Name | Attribute | Description |
|---|---|---|
| LangCodes | BS, RT | The language codes that the firmware supports.(Deprecated) |
| Lang | NV, BS, RT | The language code that the system is configured for. (Deprecated) |
| Timeout | NV, BS, RT | The firmware’s boot managers timeout, in seconds, before initiating the default boot selection. |
| PlatformLangCodes | BS, RT | The language codes that the firmware supports. |
| PlatformLang | NV, BS, RT | The language code that the system is configured for. |
| ConIn | NV, BS, RT | The device path of the default input console. |
| ConOut | NV, BS, RT | The device path of the default output console. |
| ErrOut | NV, BS, RT | The device path of the default error output device. |
| ConInDev | BS, RT | The device path of all possible console input devices. |
| ConOutDev | BS, RT | The device path of all possible console output devices. |
| ErrOutDev | BS, RT | The device path of all possible error output devices. |
| Boot#### | NV, BS, RT | A boot load option. #### is a printed hex value. No 0x is included in the hex value. |
| BootOrder | NV, BS, RT | The ordered boot option load list. |
| BootNext | NV, BS, RT | The boot option for the next boot only. |
| BootCurrent | BS, RT | The boot option that was selected for the current boot. |
| BootOptionSupport | BS,RT,RO | The types of boot options supported by the boot manager. |
| Driver#### | NV, BS, RT | A driver load option. #### is a printed hex value. |
| DriverOrder | NV, BS, RT | The ordered driver load option list. |
| Key#### | NV, BS, RT | Describes hot key relationship with a Boot#### load option. |
| HwErrRecSupport | NV, BS, RT | Identifies the level of hardware error record persistence support implemented by the platform. This variable is only modified by firmware and is read-only to the OS. |
| SetupMode | RT (RO) | Whether the system is operating in setup mode (1) or not (0). All other values are reserved. |
| KEK | NV, RT | The Key Exchange Key Signature Database. |
| PK | NV, RT | The public Platform Key. |
| SignatureSupport | RT (RO) | Array of GUIDs representing the type of signatures supported by the platform firmware. |
В UEFI, глобально определенные перемеююые архитектурноакустически определяли смысли. Также, как определенное содержание данных каждая глобально определенная архитектурноакустически определенная перемеююый имеет
припишите которое показывает когда перемеююый данных может быть достигана.
#define EFI_VARIABLE_NON_VOLATILE 0x0000000000000001 #define EFI_VARIABLE_BOOTSERVICE_ACCESS 0x0000000000000002 #define EFI_VARIABLE_RUNTIME_ACCESS 0x0000000000000004
Перемеююые с слаболетучим комплектом атрибута (NV) упорствуют через reboots. Перемеююые с комплектом атрибута ботинк-обслуживания (BS) только имеющиеся для пользы в окружающей среде pre-ботинка. Перемеююые с комплектом продолжитеным по времени атрибута (RT) имел в распоряжении и окружающая среда preboot и операционная система. Все архитектурноакустически определенные перемеююые используют EFI_GLOBAL_VARIABLE GUID 0x8BE4DF61, 0x93CA, 0x11D2, 0xAA, 0xOD, 0×00, 0XE0, 0×98, 0×03, 0x2B, 0x8C.
Я решил написать общее назначение которому я вызвал uefivars для того чтобы перечислить детали о всех глобально определенных перемеююых что стержень Fedora 12 осведомлен. Довольно чем reinvent колесо, я использовал исходный код для efibootmgr как моя отправная точка с ее содержал много из режимов то I нужное для того чтобы parse бинарные данные в raw_var архивах. Parsing дискриптор EFI_DEVICE_PATH_PROTOCOL используемый ConIn, ConInDev и их доказанные кузенами более проблемные по мере того как многочисленнnSs узлы путя прибора определенные спецификацией UEFI и эти узлы все байт-упакованные структуры данных которые могут появиться на любую границу байта. К радости, исходный код для затяжелителя ботинка наследия ХАРЧА содержал Код доводки для того чтобы parse узлы путя прибора. Кстати, EFI и UEFI подлеубежал справедливо трудные для того чтобы получить вашу головку вокруг. Настоящая спецификация UEFI (Errata a версии 2.3) над 2100 страницами A4 в длине. Принципиальные схемы справедливо просто но детали вставкы довольно сложны.
Здесь исходный код для uefivars.c
#include <ctype.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <errno.h>
#include <unistd.h>
#include <getopt.h>
#include "list.h"
#include "efi.h"
#include "efichar.h"
#include "unparse_path.h"
#include "efibootmgr.h"
typedef struct _var_entry {
struct dirent *name;
uint16_t num;
efi_variable_t var_data;
list_t list;
} var_entry_t;
static LIST_HEAD(list_head);
void
free_vars(list_t *head)
{
list_t *pos, *n;
var_entry_t *boot;
list_for_each_safe(pos, n, head) {
boot = list_entry(pos, var_entry_t, list);
list_del(&(boot->list));
free(boot);
}
}
void
read_vars(struct dirent **namelist,
int num_boot_names,
list_t *head)
{
efi_status_t status;
var_entry_t *entry;
int i;
if (!namelist) return;
for (i=0; i < num_boot_names; i++) {
if (namelist[i]) {
entry = malloc(sizeof(var_entry_t));
if (!entry) return;
memset(entry, 0, sizeof(var_entry_t));
status = read_variable(namelist[i]->d_name, &entry->var_data);
if (status == EFI_SUCCESS) {
entry->name = namelist[i];
list_add_tail(&entry->list, head);
} else free(entry);
}
}
}
void
free_dirents(struct dirent **ptr,
int num_dirents)
{
int i;
if (!ptr) return;
for (i=0; i < num_dirents; i++) {
if (ptr[i]) {
free(ptr[i]);
ptr[i] = NULL;
}
}
free(ptr);
}
void
usage()
{
printf("usage: uefivars [-v | --version]\n");
printf(" uefivars [-u | --unknown]\n");
}
int
main(int argc,
char **argv)
{
int c, i, first, unknownvar = 0;
int option_index = 0;
int num_all = 0;
list_t *pos;
var_entry_t *var;
char desc[1032];
char attributes[12];
struct dirent **all = NULL;
static struct option long_options[] = {
{"help", no_argument, 0, 'h'},
{"unknown", no_argument, 0, 'u'},
{"version", no_argument, 0, 'v'},
{0, 0, 0, 0}
};
while ((c = getopt_long(argc, argv, "huv", long_options, &option_index)) != -1) {
switch (c) {
case 'h':
usage();
exit(EXIT_SUCCESS);
case 'u':
unknownvar = 1;
break;
case 'v':
fprintf(stdout, "version %s\n", EFIVARS_VERSION);
exit(EXIT_SUCCESS);
default: /* '?' */
usage();
exit(EXIT_FAILURE);
}
}
set_fs_kernel_calls();
/* retrieve all entries */
num_all = read_all_var_names(&all);
read_vars(all, num_all, &list_head);
/* loop through each entry and parse */
list_for_each(pos, &list_head) {
var = list_entry(pos, var_entry_t, list);
efichar_to_char(desc, var->var_data.VariableName , sizeof(desc));
/* parse attributes and build attributes text string */
memset(attributes,0,12);
first = 1;
if (var->var_data.Attributes & EFI_VARIABLE_NON_VOLATILE) {
if (first) {
strcpy(attributes, "(");
first = 0;
} else strcat(attributes, ",");
strcat(attributes, "NV");
}
if (var->var_data.Attributes & EFI_VARIABLE_BOOTSERVICE_ACCESS) {
if (first) {
strcpy(attributes, "(");
first = 0;
} else strcat(attributes, ",");
strcat(attributes, "BS");
}
if (var->var_data.Attributes & EFI_VARIABLE_RUNTIME_ACCESS) {
if (first) {
strcpy(attributes, "(");
first = 0;
} else strcat(attributes, ",");
strcat(attributes, "RT");
}
if (!first) strcat(attributes, ")");
/* parse boot entries - only handles first 4 at present */
if (!strcmp(desc, "Boot0000") || !strcmp(desc, "Boot0001") ||
!strcmp(desc, "Boot0002") || !strcmp(desc, "Boot0003")) {
char description[80];
EFI_LOAD_OPTION *load_option;
EFI_DEVICE_PATH *path;
char text_path[1024], *p;
unsigned long optional_data_len=0;
load_option = (EFI_LOAD_OPTION *) var->var_data.Data;
efichar_to_char(description, load_option->description, sizeof(description));
memset(text_path, 0, sizeof(text_path));
path = load_option_path(load_option);
if (var->name)
printf("%.8s %s:", var->name->d_name, attributes);
else printf("Boot%04X %s:", var->num, attributes);
if (load_option->attributes & LOAD_OPTION_ACTIVE)
printf("* ");
else printf(" ");
printf("%s", description);
unparse_path(text_path, path, load_option->file_path_list_length);
optional_data_len = var->var_data.DataSize - load_option->file_path_list_length -
((char *)path - (char *)load_option);
if (optional_data_len) {
p = text_path;
p += strlen(text_path);
unparse_raw_text(p, ((uint8_t *)path) + load_option->file_path_list_length, optional_data_len);
}
printf("\t%s\n", text_path);
} else if (!strcmp(desc, "BootCurrent")) {
uint16_t *n = (uint16_t *)(var->var_data.Data);
printf("BootCurrent %s: %04X\n", attributes, (unsigned int)*n);
} else if (!strcmp(desc, "BootNext")) {
uint16_t *n = (uint16_t *)(var->var_data.Data);
printf("BootNext %s: %04X\n", attributes, (unsigned int)*n);
} else if (!strcmp(desc, "BootOptionSupport")) {
uint16_t *n = (uint16_t *)(var->var_data.Data);
printf("BootOptionSupport %s: %04X\n", attributes, (unsigned int)*n);
} else if (!strcmp(desc, "BootOrder")) {
uint16_t *data = (uint16_t *)&(var->var_data.Data);
int *datasize = (int *)&(var->var_data.DataSize);
int len = *datasize/sizeof(uint16_t);
printf("BootOrder %s: ", attributes);
for (i = 0; i < len; i++) {
printf("%04X", data[i]);
if (i < ( len - 1)) printf(",");
}
printf("\n");
} else if (!strcmp(desc, "ConIn")) {
printf("ConIn %s:\n", attributes);
efi_print_device_path(var->var_data.Data);
} else if (!strcmp(desc, "ConInDev")) {
printf("ConInDev %s:\n", attributes);
efi_print_device_path(var->var_data.Data);
} else if (!strcmp(desc, "ConOut")) {
printf("ConOut %s:\n", attributes);
efi_print_device_path(var->var_data.Data);
} else if (!strcmp(desc, "ConOutDev")) {
printf("ConOutDev %s:\n", attributes);
efi_print_device_path(var->var_data.Data);
} else if (!strcmp(desc, "ErrOut")) {
printf("ErrOut %s:\n", attributes);
efi_print_device_path(var->var_data.Data);
} else if (!strcmp(desc, "ErrOutDev")) {
printf("ErrOutDev %s:\n", attributes);
efi_print_device_path(var->var_data.Data);
} else if (!strcmp(desc, "Lang")) {
uint8_t *data = (uint8_t *)&(var->var_data.Data);
printf("Lang %s: ", attributes);
for (i = 0; i < 3; i++)
printf("%c", data[i]);
printf("\n");
} else if (!strcmp(desc, "LangCodes")) {
uint8_t *data = (uint8_t *)&(var->var_data.Data);
printf("LangCodes %s: ", attributes);
while (1) {
for (i = 0; i < 3; i++)
printf("%c", *data++);
if (*data < 32) break;
printf(",");
}
printf("\n");
} else if (!strcmp(desc, "PlatformLang")) {
uint8_t *data = (uint8_t *)&(var->var_data.Data);
printf("PlatformLang %s: ", attributes);
for (i = 0; i < 5; i++)
printf("%c", data[i]);
printf("\n");
} else if (!strcmp(desc, "PlatformLangCodes")) {
uint8_t *data = (uint8_t *)&(var->var_data.Data);
printf("PlatformLangCodes %s: ", attributes);
while (1) {
for (i = 0; i < 5; i++)
printf("%c", *data++);
if (*data < 32) break;
if (*data == ';') {
printf(",");
data++;
}
}
printf("\n");
} else if (!strcmp(desc, "Timeout")) {
uint16_t *n = (uint16_t *)(var->var_data.Data);
printf("Timeout %s: %d secs\n", attributes, (int)*n);
} else if (unknownvar) {
printf("%s %s: UNKNOWN\n", desc, attributes);
}
}
free_dirents(all, num_all);
free_vars(&list_head);
exit(EXIT_SUCCESS);
}
Здесь что uefivars выводят наружу на 64ый-разрядн Fedora 12. Заметьте что я booted этот пример Fedora 12 от ключа USB используя ДУЭТ (эмулирование проявителей UEFI) - следовательно вход USB Boot0000.
# uefivars Boot0000 (NV,BS,RT):* EFI USB Device ACPI(a0841d0,0)PCI(1d,7)USB(2,0) Boot0001 (NV,BS,RT):* EFI DVD/CDROM ACPI(a0841d0,0)PCI(1f,2)ATAPI(0,0,0) BootCurrent (BS,RT): 003D BootOptionSupport (BS,RT): 0303 BootOrder (NV,BS,RT): 0000,0001 ConIn (NV,BS,RT): /ACPI(a0841d0,0)/PCI(0,1f)/ACPI(30341d0,0) /ACPI(a0841d0,0)/PCI(0,1f)/ACPI(50141d0,1)/UART(115200,8,1,1)/Vendor(11d2f9be-0c9a-9000-273f-c14d7f010400) /USBClass(ffff,ffff,3,1,1) ConInDev (BS,RT): /USBClass(ffff,ffff,3,1,1) /ACPI(a0841d0,0)/PCI(0,1f)/ACPI(50141d0,1)/UART(115200,8,1,1)/Vendor(11d2f9be-0c9a-9000-273f-c14d7f010400) /ACPI(a0841d0,0)/PCI(0,1f)/ACPI(50141d0,1)/UART(115200,8,1,1)/Vendor(11d3b419-2d9a-9000-273f-c14d7f010400) /ACPI(a0841d0,0)/PCI(0,1f)/ACPI(50141d0,1)/UART(115200,8,1,1)/Vendor(4c7657e0-878e-9e2f-2808-83437f010400) /ACPI(a0841d0,0)/PCI(0,1f)/ACPI(50141d0,1)/UART(115200,8,1,1)/Vendor(4acf8bec-73a0-1dd0-e77e-2d887f010400) /ACPI(a0841d0,0)/PCI(0,1f)/ACPI(30341d0,0) ConOut (NV,BS,RT): /ACPI(a0841d0,0)/PCI(0,1)/PCI(0,0) /ACPI(a0841d0,0)/PCI(0,1f)/ACPI(50141d0,1)/UART(115200,8,1,1)/Vendor(11d2f9be-0c9a-9000-273f-c14d7fff0400) ConOutDev (BS,RT): /ACPI(a0841d0,0)/PCI(0,1)/PCI(0,0) /ACPI(a0841d0,0)/PCI(0,1f)/ACPI(50141d0,1)/UART(115200,8,1,1)/Vendor(11d2f9be-0c9a-9000-273f-c14d7f010400) /ACPI(a0841d0,0)/PCI(0,1f)/ACPI(50141d0,1)/UART(115200,8,1,1)/Vendor(11d3b419-2d9a-9000-273f-c14d7f010400) /ACPI(a0841d0,0)/PCI(0,1f)/ACPI(50141d0,1)/UART(115200,8,1,1)/Vendor(4c7657e0-878e-9e2f-2808-83437f010400) /ACPI(a0841d0,0)/PCI(0,1f)/ACPI(50141d0,1)/UART(115200,8,1,1)/Vendor(4acf8bec-73a0-1dd0-e77e-2d887fff0400) ErrOut (NV,BS,RT): /ACPI(a0841d0,0)/PCI(0,1f)/ACPI(50141d0,1)/UART(115200,8,1,1)/Vendor(11d2f9be-0c9a-9000-273f-c14d7fff0400) ErrOutDev (BS,RT): /ACPI(a0841d0,0)/PCI(0,1)/PCI(0,0) /ACPI(a0841d0,0)/PCI(0,1f)/ACPI(50141d0,1)/UART(115200,8,1,1)/Vendor(11d2f9be-0c9a-9000-273f-c14d7f010400) /ACPI(a0841d0,0)/PCI(0,1f)/ACPI(50141d0,1)/UART(115200,8,1,1)/Vendor(11d3b419-2d9a-9000-273f-c14d7f010400) /ACPI(a0841d0,0)/PCI(0,1f)/ACPI(50141d0,1)/UART(115200,8,1,1)/Vendor(4c7657e0-878e-9e2f-2808-83437f010400) /ACPI(a0841d0,0)/PCI(0,1f)/ACPI(50141d0,1)/UART(115200,8,1,1)/Vendor(4acf8bec-73a0-1dd0-e77e-2d887fff0400) Lang (NV,BS,RT): eng LangCodes (BS,RT): eng,fra PlatformLang (NV,BS,RT): en-US PlatformLangCodes (BS,RT): en-US,fr-FR Timeout (NV,BS,RT): 3 secs # root@ultra uefivars]# ./uefivars Boot0000 (NV,BS,RT):* EFI USB Device ACPI(a0841d0,0)PCI(1d,7)USB(2,0) Boot0001 (NV,BS,RT):* EFI DVD/CDROM ACPI(a0841d0,0)PCI(1f,2)ATAPI(0,0,0) BootCurrent (BS,RT): 003D BootOptionSupport (BS,RT): 0303 BootOrder (NV,BS,RT): 0000,0001 ConIn (NV,BS,RT): /ACPI(a0841d0,0)/PCI(0,1f)/ACPI(30341d0,0) /ACPI(a0841d0,0)/PCI(0,1f)/ACPI(50141d0,1)/UART(115200,8,1,1)/Vendor(11d2f9be-0c9a-9000-273f-c14d7f010400) /USBClass(ffff,ffff,3,1,1) ConInDev (BS,RT): /USBClass(ffff,ffff,3,1,1) /ACPI(a0841d0,0)/PCI(0,1f)/ACPI(50141d0,1)/UART(115200,8,1,1)/Vendor(11d2f9be-0c9a-9000-273f-c14d7f010400) /ACPI(a0841d0,0)/PCI(0,1f)/ACPI(50141d0,1)/UART(115200,8,1,1)/Vendor(11d3b419-2d9a-9000-273f-c14d7f010400) /ACPI(a0841d0,0)/PCI(0,1f)/ACPI(50141d0,1)/UART(115200,8,1,1)/Vendor(4c7657e0-878e-9e2f-2808-83437f010400) /ACPI(a0841d0,0)/PCI(0,1f)/ACPI(50141d0,1)/UART(115200,8,1,1)/Vendor(4acf8bec-73a0-1dd0-e77e-2d887f010400) /ACPI(a0841d0,0)/PCI(0,1f)/ACPI(30341d0,0) ConOut (NV,BS,RT): /ACPI(a0841d0,0)/PCI(0,1)/PCI(0,0) /ACPI(a0841d0,0)/PCI(0,1f)/ACPI(50141d0,1)/UART(115200,8,1,1)/Vendor(11d2f9be-0c9a-9000-273f-c14d7fff0400) ConOutDev (BS,RT): /ACPI(a0841d0,0)/PCI(0,1)/PCI(0,0) /ACPI(a0841d0,0)/PCI(0,1f)/ACPI(50141d0,1)/UART(115200,8,1,1)/Vendor(11d2f9be-0c9a-9000-273f-c14d7f010400) /ACPI(a0841d0,0)/PCI(0,1f)/ACPI(50141d0,1)/UART(115200,8,1,1)/Vendor(11d3b419-2d9a-9000-273f-c14d7f010400) /ACPI(a0841d0,0)/PCI(0,1f)/ACPI(50141d0,1)/UART(115200,8,1,1)/Vendor(4c7657e0-878e-9e2f-2808-83437f010400) /ACPI(a0841d0,0)/PCI(0,1f)/ACPI(50141d0,1)/UART(115200,8,1,1)/Vendor(4acf8bec-73a0-1dd0-e77e-2d887fff0400) ErrOut (NV,BS,RT): /ACPI(a0841d0,0)/PCI(0,1f)/ACPI(50141d0,1)/UART(115200,8,1,1)/Vendor(11d2f9be-0c9a-9000-273f-c14d7fff0400) ErrOutDev (BS,RT): /ACPI(a0841d0,0)/PCI(0,1)/PCI(0,0) /ACPI(a0841d0,0)/PCI(0,1f)/ACPI(50141d0,1)/UART(115200,8,1,1)/Vendor(11d2f9be-0c9a-9000-273f-c14d7f010400) /ACPI(a0841d0,0)/PCI(0,1f)/ACPI(50141d0,1)/UART(115200,8,1,1)/Vendor(11d3b419-2d9a-9000-273f-c14d7f010400) /ACPI(a0841d0,0)/PCI(0,1f)/ACPI(50141d0,1)/UART(115200,8,1,1)/Vendor(4c7657e0-878e-9e2f-2808-83437f010400) /ACPI(a0841d0,0)/PCI(0,1f)/ACPI(50141d0,1)/UART(115200,8,1,1)/Vendor(4acf8bec-73a0-1dd0-e77e-2d887fff0400) Lang (NV,BS,RT): eng LangCodes (BS,RT): eng,fra PlatformLang (NV,BS,RT): en-US PlatformLangCodes (BS,RT): en-US,fr-FR Timeout (NV,BS,RT): 3 secs [root@ultra uefivars]#
Я создал проект SourceForge для uefivars. Там вы можете загружать и построить исполнительное для вашей собственной системы. Заметьте что, даты этого столба, я только испытывал этот отпуск на 64ом-разрядн Fedora 12. Могут быть трицатидвухразрядные вопросы в исходном коде или он не может побежать на трицатидвухразрядных зодчеств для любая причина. BTW, я окончательно сделал большое перескакивание и использовал Git для управления исходного кода вместо диверсии. Я могу находиться в несовершеннолетии но он кажется к мне что синтаксис Git не интуитивн и следовательно я медленн для того чтобы сделать перестроение.
По мере того как поставщики компьютера двигают далеко от перегородок BIOS и MBR к GPT разделяя и booting UEFI, я верю что будет потребность для больше общих назначений как uefivars которые помогают потребителям в понимать и дорабатывать их конфигурацию UEFI.
Как всегда, насладитесь!


























Я радостен вы считал efibootmgr настолько полезным. Если оно помогл бы, то я построил efibootmgr такие что большая часть из функциональности, за исключением фактической front-end линии передачи команд интерфейса, быть использованным как архив. Часть архива смогла быть разделена вне в свой собственный пакет (или subpackage), такое что вы смогли после этого просто вызвать в его как нужно, довольно чем копирующ биты архива к вашей собственной программе.
Matt,
Хорошая идея. Возможно, однако, давно пора для того чтобы начать более общецелевое UEFI
архив который включил бы режимы для того чтобы погулять узлы путя прибора и больше.
- Finn
P. Murphy [...] (fpmurphy) вывешенный на его блог вчера о его новом проекте, uefivars, для того чтобы восстановить и показать информацию о UEFI [...]