Μεταφράστε

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
Εικόνα των εννοιών λειτουργικών συστημάτων
Εικόνα επικυρωμένου του το Red Hat οδηγού μελέτης Linux μηχανικών RHCE (διαγωνισμός RH302) (Τύπος πιστοποίησης)
Εικόνα των σύγχρονων λειτουργικών συστημάτων (3$η έκδοση)
Εικόνα της ανάπτυξης πυρήνων Linux (3$η έκδοση)

Πρόσβαση των σφαιρικών μεταβλητών UEFI από το διάστημα χρηστών

UEFI είναι ακολουθεί προς την αρχική προδιαγραφή EFI που αναπτύσσεται από τη Intel προς το τέλος της δεκαετίας του '90. UEFI χρησιμοποιεί GPT (πίνακας χωρισμάτων GUID) αντί MBR (κύριο αρχείο μποτών) για να επιτρέψει την υποστήριξη για τα χωρίσματα μεγαλύτερα από 2Tb. Πολλά ζωντανά οντα διαθέσιμα σήμερα υποστηρίζουν GPT αλλά μια πλατφόρμα χωρίς υποστήριξη UEFI δεν μπορεί να αρχίσει ένα λειτουργικό σύστημα από ένα χώρισμα GPT μεγαλύτερο από 2TB. Μέχρι σήμερα, UEFI περιορίστηκε high-end στους κεντρικούς υπολογιστές αλλά γίνεται τώρα πιό κοινό στους κεντρικούς υπολογιστές και τους υπολογιστές γραφείου προϊόντων.

Έχω μια uEFI-μητρική κάρτα της Intel και μπορώ να αρχίσω Fedora 12 και τις εξηντατετράμπιτες εκδόσεις Vista και των παραθύρων 7 της Microsoft μέσω UEFI. Ενώ υπάρχουν ακόμα μερικά ζητήματα με την uEFI-υποστήριξη σε Fedora 12, γενικά λειτουργεί. Εντούτοις η μόνη uEFI-ενήμερη χρησιμότητα ότι γνωρίζω για Fedora 12 είναι ματ Domsch efibootmgr που είναι μια χρήστης-διαστημική εφαρμογή Linux που μπορεί να δημιουργήσει, να τροποποιήσει ή να καταστρέψει συνολικά καθορισμένος UEFI τις μεταβλητές σχετικά με την έναρξη.

Εντούτοις το 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 μπότα-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 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 για να απαριθμήσω τις λεπτομέρειες για όλες τις συνολικά καθορισμένες μεταβλητές ότι το Fedora 12 πυρήνας γνωρίζει. Παρά να εφευρεθεί εκ νέου η ρόδα, χρησιμοποίησα το κωδικό πηγής για το efibootmgr ως αφετηρία μου δεδομένου ότι περιείχε πολλές από τις ρουτίνες που έπρεπε να αναλύσω τα δυαδικά στοιχεία στα raw_var αρχεία. Αναλύοντας τον περιγραφέα EFI_DEVICE_PATH_PROTOCOL που χρησιμοποιήθηκε από ConIn, ConInDev και οι ξάδελφοί τους αποδείχθηκαν πιό προβληματικοί δεδομένου ότι υπάρχουν πολυάριθμοι κόμβοι πορειών συσκευών που καθορίζονται από την προδιαγραφή UEFI και αυτοί οι κόμβοι είναι όλοι ψηφιολέξη-συσκευασμένες δομές δεδομένων που μπορούν να εμφανιστούν σε οποιοδήποτε όριο ψηφιολέξεων. Ευτυχώς, ο κωδικός πηγής για το φορτωτή μποτών κληρονομιών ΠΡΟΝΥΜΦΩΝ περιείχε τον κώδικα διόρθωσης για να αναλύσει τους κόμβους πορειών συσκευών. Επ'ευκαιρία EFI και UEFI είναι αρκετά δύσκολα θέματα για να πάρουν το κεφάλι σας γύρω. Η τρέχουσα προδιαγραφή UEFI (τυπογραφικά λάθη Α έκδοσης 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 αποτελέσματα για εξηντατετράμπιτο Fedora 12. Σημειώστε ότι άρχισα αυτήν την περίπτωση Fedora 12 από ένα βασικό χρησιμοποιώντας cDuet USB (άμιλλα υπεύθυνων για την ανάπτυξη 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]#


Έχω δημιουργήσει ένα πρόγραμμα SourceForge για τα uefivars. Εκεί μπορείτε να μεταφορτώσετε και να χτίσετε τον εκτελέσιμο για το σύστημά σας. Σημειώστε ότι, της ημερομηνίας αυτής της θέσης, έχω εξετάσει μόνο αυτήν την απελευθέρωση σε εξηντατετράμπιτο Fedora 12. Μπορούν να υπάρξουν τριανταδυάμπιτα ζητήματα στο κωδικό πηγής ή μπορεί να μην τρέξει στις τριανταδυάμπιτες αρχιτεκτονικές για ο, τιδήποτε λόγο. BTW, έκανα τελικά το μεγάλο πήδημα και χρησιμοποίησα Git για τον έλεγχο κωδικού πηγής αντί της ανατροπής. Μπορώ να είμαι στη μειονότητα αλλά φαίνεται σε με ότι η σύνταξη Git δεν είναι διαισθητική και ως εκ τούτου είμαι αργός να κάνω τη μεταστροφή.

Δεδομένου ότι οι προμηθευτές υπολογιστών απομακρύνονται από το ΖΩΝΤΑΝΟ ΟΝ και τα χωρίσματα MBR προς το χωρισμό GPT και την έναρξη UEFI, πιστεύω ότι θα υπάρξει μια ανάγκη για περισσότερες χρησιμότητες όπως τα uefivars που βοηθούν τους χρήστες στην κατανόηση και την τροποποίηση της διαμόρφωσης UEFI τους.

Όπως πάντα, απολαύστε!
 

3 σχόλια της πρόσβασης των σφαιρικών μεταβλητών UEFI από το διάστημα χρηστών σε Fedora 12

  • Είμαι ευτυχής ότι βρήκατε efibootmgr τόσο χρήσιμος. Εάν θα βοηθούσε, έχτισα efibootmgr έτσι ώστε η μεγαλύτερη μέρος της λειτουργίας, εκτός από την πραγματική προηγούμενη διεπαφή γραμμών εντολής, που χρησιμοποιείται ως βιβλιοθήκη. Το μέρος βιβλιοθηκών θα μπορούσε να χωριστεί έξω στη συσκευασία του (ή το subpackage), έτσι ώστε να μπορείτε έπειτα απλά να καλέσετε σε το όπως απαιτείται, παρά την αντιγραφή των κομματιών βιβλιοθηκών στο πρόγραμμά σας.

    • Ματ,

      Καλή ιδέα. Ίσως, εντούτοις, είναι χρόνος να αναπτυχθεί ένας γενικότερος σκοπός UEFI
      βιβλιοθήκη που θα περιελάμβανε τις ρουτίνες για να περπατήσει τους κόμβους πορειών συσκευών και περισσότερο.

      - Φινλανδικά

  • [...] Σελ. Murphy (fpmurphy) ταχυδρόμησε στο blog του χθες για το νέο πρόγραμμά του, uefivars, για να ανακτήσει και να επιδείξει τις πληροφορίες για UEFI [...]