UEFI一跟随打开对英特尔 开发的 原始的EFI规格在20世纪90年代末期。 UEFI比 2Tb 使用GPT (GUID分开表 ) 而不是MBR (主要引导记录)使能支持分开伟大。 许多生物活素可利用的今天支持GPT,而是没有UEFI支持的一个平台大于2TB不可能解雇一操作系统从GPT分开。 近来, UEFI限于高端服务器,但是现在变得普遍在商品服务器和桌面上。
我有一个 UEFI使能英特尔主板,并且可以通过UEFI解雇浅顶软呢帽12和微软景色和Windows 7的64位版本。 当仍有时与的有些问题在它运作的浅顶软呢帽12 UEFI支持,一般。 然而唯一的UEFI明白的公共事业我知道为浅顶软呢帽12是Linux用户空间应用可能创造的马特Domsch的efibootmgr,修改或毁坏UEFI全球性地被定义的可变物与孕穗相关。
然而浅顶软呢帽12仁比efibootmgr显示的那些和这些可以通过/sys/firmware/efi访问如下所示知道更多UEFI全球性被定义的可变物。
# 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
这什么在起动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
其他补充指南包含相似的词条。 其中一些补充指南(那些与8be4df61-93ca-11d2-aa0d-00e098032b8c GUID -下面看见)包含数据与全球性被定义的可变物相关(概念上类似对环境变量)被提供在UEFI规格。 这全球性地被定义的可变物的桌在UEFI规格的V3.2的。
| 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)属性集合的可变物横跨重新起动坚持。 与起动服务(BS)属性集合的可变物只是可利用的为使用在前起动环境。 与执行时间的(RT)属性集合的可变物对preboot环境和操作系统是可利用的。 所有总体定义的可变物使用EFI_GLOBAL_VARIABLE GUID 0x8BE4DF61, 0x93CA, 0x11D2, 0xAA, 0xOD, 0×00, 0XE0, 0×98, 0×03, 0x2B, 0x8C。
我决定写我叫uefivars列出关于所有全球性地被定义的可变物的细节的公共事业浅顶软呢帽12仁知道。 而不是重创轮子,我为efibootmgr使用了原始代码作为我的起点从它包含了许多惯例必要的那I解析在raw_var文件的二进制数据。 解析ConIn使用的EFI_DEVICE_PATH_PROTOCOL描述符, UEFI规格和他们的表兄弟被证明的更加有问题的,尽管有许多设备道路结定义的ConInDev和这些结是全部在所有字节界也许出现的字节被包装的数据结构。 幸运地,幼虫遗产 启动装载程序的 原始代码包含调试代码解析设备道路结。 顺便说一句, EFI和UEFI是相当得到您的头的困难的主题。 当前UEFI规格(版本2.3印刷错误A)长度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位浅顶软呢帽12输出。 注意我解雇了这个事例从USB钥匙的浅顶软呢帽12使用二重奏(开发商UEFI仿效)因此- Boot0000 USB词条。
# 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]#
我创造了 uefivars的 一个SourceForge项目。 那里您能下载和修造可执行您自己的系统的。 注意,这个岗位日期,我只测试了在64位浅顶软呢帽12的这发行。 也许有在原始代码的32位问题或它在32位建筑学可能不无论什么原因跑。 BTW,我最后做了大飞跃并且为原始代码控制使用了Git而不是颠覆。 我也许是在少数以我所见,但是Git句法不是直觉的并且我是慢的做转换。
当计算机推销商移动远离往分成的GPT和UEFI孕穗的BIOS和MBR分开,我相信将有对更多公共事业的需要象协助了解和修改的他们的UEFI配置用户的uefivars。
一如既往,享用!



























我是高兴的您发现efibootmgr很有用。 如果它将帮助,我建立efibootmgr这样大多数功能,除了实际前期命令行接口,使用作为图书馆。 图书馆零件可能被分裂成它自己的包裹(或分装),这样您可能然后叫入它如需要,而不是复制对您自己的节目的图书馆位。
马特,
好想法。 或许,然而,是时间开发更加通用的UEFI
将包括惯例走设备道路结和更的图书馆。
-芬兰人
[...] P.墨菲(fpmurphy)昨天张贴在他的博克关于他新的项目, uefivars,检索和显示关于UEFI [...]的信息