翻译

Translate to EnglishÜbersetzen Sie zum Deutsch/GermanΜεταφράστε στα ελληνικά/GreekПереведите к русскому/RussianOversetter til Norsk/NorwegianÖversätta till Svensk/Swedishहिन्दी अनुवाद करने के लिए/Hindi
Tradueix al català/CatalanTulkot uz latviešu/LatvianPreložiť do slovenčiny/SlovakVertaal aan het Nederlands/Dutchترجمة الى العربية/ArabicTraduzca al Español/SpanishTraduisez au Français/French
Traduca ad Italiano/ItalianTraduza ao Português/Portuguese日本語に翻訳しなさい /Japanese한국어에게 번역하십시오/Korean中文翻译/Chinese Simplified中文翻译/Chinese TraditionalПереклад на українську/Ukrainian
开始Google Maps的图象API 3
先进编程在UNIX环境,再版(阿狄森-维斯利专家计算的系列)的图象
RHCE红色帽子的图象证明了工程师Linux研究指南(检查RH302) (证明新闻)
机器人无线应用开发的图象

从用户空间的访问的UEFI全局变量

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 NameAttributeDescription
LangCodesBS, RTThe language codes that the firmware supports.(Deprecated)
LangNV, BS, RTThe language code that the system is configured for. (Deprecated)
TimeoutNV, BS, RTThe firmware’s boot managers timeout, in seconds,
before initiating the default boot selection.
PlatformLangCodesBS, RTThe language codes that the firmware supports.
PlatformLangNV, BS, RTThe language code that the system is configured for.
ConInNV, BS, RTThe device path of the default input console.
ConOutNV, BS, RTThe device path of the default output console.
ErrOut NV, BS, RTThe device path of the default error output device.
ConInDevBS, RTThe device path of all possible console input devices.
ConOutDevBS, RTThe device path of all possible console output devices.
ErrOutDevBS, RTThe device path of all possible error output devices.
Boot####NV, BS, RTA boot load option. #### is a printed hex value. No 0x is included in the hex value.
BootOrderNV, BS, RTThe ordered boot option load list.
BootNextNV, BS, RTThe boot option for the next boot only.
BootCurrentBS, RTThe boot option that was selected for the current boot.
BootOptionSupportBS,RT,ROThe types of boot options supported by the boot manager.
Driver####NV, BS, RTA driver load option. #### is a printed hex value.
DriverOrderNV, BS, RTThe ordered driver load option list.
Key####NV, BS, RTDescribes hot key relationship with a Boot#### load option.
HwErrRecSupportNV, BS, RTIdentifies 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.
SetupModeRT (RO)Whether the system is operating in setup mode (1) or not (0). All other values are reserved.
KEKNV, RTThe Key Exchange Key Signature Database.
PKNV, RTThe public Platform Key.
SignatureSupportRT (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

一如既往,享用!
 

对访问UEFI全局变量的3个评论从在浅顶软呢帽12的用户空间