UEFI est un suit sur à l'original EFI La spécification développée par Intel dans les dernières années 90. UEFI utilise GPT (La Table de Cloison de GUID) au lieu de MBR (La Botte de maître Enregistre) rendre capable le soutien pour les cloisons plus grandes que 2Tb. BEAUCOUP DE BIOSes GPT de soutien d'aujourd'hui disponible mais une plateforme sans le soutien d'UEFI ne peuvent pas charger un système d'exploitation d'une cloison de GPT plus grande que 2TB. Jusqu' à récemment, UEFI a été limité les serveurs d'haut-fin mais devient maintenant plus commun sur les serveurs de denrée et les bureaux.
J'ai un UEFI-La carte mère rendue capable d'Intel et peut charger Fedora 12 et versions de 64 peu de Vista de Microsoft et de Windows 7 via UEFI. Pendant qu'il y a toujours quelques problèmes avec l'UEFI-SOUTIEN dans Fedora 12, en général il travaille. Cependant la seule utilité UEFI-CONSCIENT que je suis conscient de pour Fedora 12 sont Matt Domsch’s efibootmgr qui est une application d'utilisateur-espace de Linux qui peut créer, peut modifier ou peut détruire UEFI a défini mondialement des variables qui relatent à charger.
Cependant le Fedora 12 noyau est conscient de variables de mondialement-défini de plus d'UEFI que ces affiché par efibootmgr et ceux-ci peuvent être accédés à via /sys/firmware/efi comme indiqué au dessous.
# 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
Voici quel est dans la Botte-0000 -8be4df61-93ca-11d2-aa0d-00e098032b8c sous-répertoire :
# 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
Les autres sous-répertoires contiennent des entrées similaires. Certains de ces sous-répertoires (ceux-là avec un GUID de 8be4df61-93ca-11d2-aa0d-00e098032b8c – voit au dessous) contient des données qui relatent aux variables définies globales (dans la conception similaire aux variables écologiques) a documenté dans la spécification d'UEFI. Voici une table des variables mondialement définies dans V3.2 de la spécification d'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. |
Dans UEFI, les variables mondialement définies ont défini du point de vue de l'architecture des sens. De même que les données définies contentent chacun a défini mondialement la variable a un du point de vue de l'architecture défini
Attribuer qui indique quand la variable de données pourrait être accédée à.
#define EFI_VARIABLE_NON_VOLATILE 0x0000000000000001 #define EFI_VARIABLE_BOOTSERVICE_ACCESS 0x0000000000000002 #define EFI_VARIABLE_RUNTIME_ACCESS 0x0000000000000004
Les variables avec le rémanent (NV) l'attribut a réglé persiste à travers les redémarrages. Les variables avec le botte-service (B) l'attribut a réglé est seulement disponible pour l'usage dans l'environnement de pré-botte. Les variables avec l'exécution (RT) l'attribut a réglé est disponible à l'environnement de preboot et le système d'exploitation. Toutes variables du point de vue de l'architecture définies utilisent l'EFI_GLOBAL_LA VARIABLE GUID 0x8BE4DF61, 0x93CA, 0x11D2, 0xAA, 0xOD, 0×00, 0XE0, 0×98, 0×03, 0x2B, 0x8C.
J'ai décidé d'écrire une utilité que j'ai appelée uefivars pour énumérer des détails de toutes les variables mondialement définies qui le Fedora 12 noyau est conscient de. Au lieu de réinventer la roue, j'ai utilisé le code source pour efibootmgr comme mon point de départ puisque il a contenu beaucoup des routines que j'ai eu besoin d'analyser les données binaires dans le raw_var dossiers. Analyser l'EFI_L'APPAREIL_LE CHEMIN_le descripteur de PROTOCOLE utilisé par ConIn, ConInDev et leurs cousins ont prouvé plus problématique comme il y a les noeuds de Chemin d'Appareil nombreux définis par la spécification d'UEFI et ces noeuds sont toutes les structures de données octet-emballés qui peuvent apparaître sur n'importe quelle frontière d'octet. Heureusement, le code source pour le LARVE Le chargeur hérité de botte a contenu déboguant le code pour analyser les noeuds de chemin d'appareil. A propos, EFI et UEFI sont sujets assez des difficiles pour contourner votre tête. La spécification actuelle d'UEFI (la Version 2,3 Errata UN) est plus de 2100 A4 pages dans la longueur. Les concepts sont assez simples mais les détails d'implémentation sont tout à fait complexes.
Voici le code source pour 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);
}
Voici quel uefivars sort pour Fedora de 64 peu 12. Noter que j'ai chargé cet exemple de Fedora 12 d'un DUO d'utilisation de clé USB (les Entrepreneurs UEFI Emulation) – donc le Boot0000 entrée 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]#
J'ai créé un SourceForge Projeter pour uefivars. Là vous pouvez télécharger et pouvez construire l'exécutable pour votre propre système. Noter cela, de la date de cette poste, j'ai essayé seulement ce relâchement sur Fedora de 64 peu 12. Il peut y avoir problèmes de 32 peu dans le code source ou il ne peut pas courir sur architectures de 32 peu pour quoi que la raison. BTW, j'ai fait enfin le grand saut et Idiot utilisé pour le contrôle de code source au lieu de la Subversion. Je peux être dans la minorité mais il me semble que la syntaxe d'Idiot n'est pas intuitive et donc j'ai été lent à faire le changement.
Comme les vendeurs informatiques éloignent des cloisons de BIOS et MBR vers la division de GPT et UEFI chargent, je crois qu'il y aura un besoin pour plus d'utilités comme uefivars ces utilisateurs d'aide dans la compréhension et modifier leur configuration d'UEFI.
Comme toujours, apprécier !



























Je’m content vous avez trouvé efibootmgr si utile. S'il aiderait, j'ai construit efibootmgr tel que la plupart du caractère fonctionnel, sauf la véritable interface de ligne d'ordre frontale, être utilisé comme une bibliothèque. La partie de bibliothèque pourrait être fractionnée hors dans son propre packet (ou subpackage), tel que vous simplement pourriez appeler alors dans lui comme nécessaire, au lieu de copier les bits de bibliothèque à votre propre programme.
Matt,
Bonne idée. Peut-être cependant c'est le temps pour développer un UEFI de but général plus
La bibliothèque qui inclurait des routines marcher les noeuds de chemin d'appareil et plus.
- Le Finlandais
[...] P. Murphy (fpmurphy) a posté sur son blog hier de son nouveau projet, uefivars, rapporter et afficher des informations d'UEFI [...]