UEFI is volgt op de originele specificatie EFI die door Intel in de recente jaren '90 wordt ontwikkeld. UEFI gebruikt GPT (De Lijst van de guid- Verdeling) in plaats van MBR (het HoofdVerslag van de Laars) om steun voor verdelingen toe te laten groter dan 2Tb. Vele beschikbare BIOSes steunen vandaag GPT maar een platform zonder steun UEFI kan geen werkend systeem van een verdeling initialiseren GPT groter dan 2TB. Tot onlangs, werd UEFI beperkt tot high-end servers maar nu wordt alledaagser op goederenservers en Desktops.
Ik heb uEFI-Toegelaten motherboard van Intel en kan Fedora 12 en versies met 64 bits van Uitzicht en Vensters 7 van Microsoft via UEFI initialiseren. Terwijl er nog sommige kwesties met de uEFI-Steun in Fedora 12 zijn, in algemeen werkt het. Nochtans is het enige uEFI-Bewuste nut dat ik van voor Fedora 12 me bewust ben Matte Domsch efibootmgr die een gebruiker-ruimtetoepassing is Linux die globaal bepaald UEFI variabelen tot stand brengen wijzigen of kan vernietigen met betrekking tot initialisering.
Nochtans is Fedora 12 pit zich bewust van meer UEFI globaal-bepaalde variabelen dan die getoond door efibootmgr en deze kunnen via /sys/firmware/efi worden betreden zoals hieronder getoond.
# 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
Hier is wat in subdirectory laars-0000 -8be4df61-93ca-11d2-aa0d-00e098032b8c is:
# 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
Andere subdirectories bevatten gelijkaardige ingangen. Sommige van deze subdirectories (die met een GUID van 8be4df61-93ca-11d2-aa0d-00e098032b8c - zie verder) bevatten gegevens met betrekking tot globale bepaalde variabelen (conceptueel gelijkend op milieuvariabelen) die in de specificatie UEFI worden gedocumenteerd. Hier is een lijst van de globaal bepaalde variabelen in V3.2 van de specificatie 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. |
In UEFI, hebben de globaal bepaalde variabelen architecturaal betekenissen bepaald. Evenals de bepaalde gegevensinhoud heeft elke globaal bepaalde variabele architecturaal bepaald
schrijf toe dat erop wijst wanneer de gegevensvariabele kan worden betreden.
#define EFI_VARIABLE_NON_VOLATILE 0x0000000000000001 #define EFI_VARIABLE_BOOTSERVICE_ACCESS 0x0000000000000002 #define EFI_VARIABLE_RUNTIME_ACCESS 0x0000000000000004
De variabelen met de niet-vluchtige de attributenreeks (van NV) duren over reboots voort. De variabelen met de de laars-dienst (BS) attributenreeks zijn slechts beschikbaar voor gebruik in het pre-laarsmilieu. De variabelen met de run-time (rechts) attributenreeks zijn beschikbaar aan zowel het prebootmilieu als het werkende systeem. Alle architecturaal bepaalde variabelen gebruiken EFI_GLOBAL_VARIABLE GUID 0x8BE4DF61, 0x93CA, 0x11D2, 0xAA, 0xOD, 0×00, 0XE0, 0×98, 0×03, 0x2B, 0x8C.
Ik besliste een nut te schrijven dat ik uefivars riep om van details over alle globaal bepaalde variabelen een lijst te maken dat Fedora 12 pit van zich bewust is. Eerder dan om het wiel opnieuw uit te vinden, gebruikte ik de broncode voor efibootmgr als mijn uitgangspunt aangezien het veel van de routines bevatte die ik de binaire gegevens in de raw_var dossiers moest ontleden. Ontledend de beschrijver EFI_DEVICE_PATH_PROTOCOL die door ConIn wordt gebruikt, bleken ConInDev en hun neven problematischer aangezien er talrijke knopen van de Weg van het Apparaat die door de specificatie zijn UEFI worden bepaald en deze knopen allen byte-ingepakte gegevensstructuren zijn die op om het even welke bytegrens kunnen verschijnen. Gelukkig, bevatte de broncode voor de lader van de de erfenislaars van de RUPS het zuiveren code om de knopen van de apparatenweg te ontleden. Door de manier, zijn EFI en UEFI vrij moeilijke onderwerpen om uw hoofd rond te worden. De huidige specificatie UEFI (de Errata A van Versie 2.3) is meer dan 2100 A4 pagina's in lengte. De concepten zijn vrij eenvoudig maar de implementatiedetails zijn vrij complex.
Hier is de broncode voor 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);
}
Hier is wat uefivars output voor Fedora met 64 bits 12. Merk op dat ik deze instantie van Fedora 12 van een zeer belangrijk gebruikend DUET USB (de Wedijver van Ontwikkelaars UEFI) - vandaar de ingang Boot0000 USB initialiseerde.
# 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]#
Ik heb een project SourceForge voor uefivars gecreërd. Daar kunt u uitvoerbaar voor uw eigen systeem downloaden en bouwen. Merk op dat, van de datum van deze post, ik slechts deze versie op Fedora met 64 bits 12 heb getest. Er kunnen kwesties met 32 bits in de broncode zijn of het kan niet op architectuur met 32 bits om de reden lopen. BTW, maakte ik definitief de grote sprong en gebruikte Git voor broncodecontrole in plaats van Ontwrichting. Ik kan in de minderheid zijn maar het schijnt aan me dat de syntaxis Git niet intuïtief is en vandaar ben ik langzaam geweest om de omschakeling te maken.
Aangezien de computerverkopers zich van BIOS en verdelingen MBR naar het verdelen van GPT en initialisering UEFI verwijderen, geloof ik dat er een behoefte aan meer nut zoals uefivars zal zijn die gebruikers bij het begrip van en het wijzigen van hun configuratie UEFI helpen.
Zoals altijd, geniet van!



























Ik ben blij u efibootmgr zo nuttig vond. Als het zou helpen, ik efibootmgr dusdanig dat het grootste deel van de functionaliteit, behalve de daadwerkelijke front-end interface van de bevellijn, bouwde die als bibliotheek moet worden gebruikt. Het bibliotheekdeel zou uit in zijn eigen pakket (of subpackage) kunnen worden verdeeld, dusdanig dat u dan eenvoudig in het kon roepen zoals nodig, eerder dan het kopiëren van de bibliotheekbeetjes aan uw eigen programma.
Mat,
Goed idee. Misschien, echter, is het tijd om een meer algemeen doel UEFI te ontwikkelen
bibliotheek die routines zou omvatten om de knopen van de apparatenweg te lopen en meer.
- Fin
[...] P. (fpmurphy) postte Murphy gisteren op zijn blog over zijn nieuw project, uefivars, om informatie over UEFI [...] terug te winnen en te tonen