UEFIは90年代後期のIntelが開発する 元の EFIの指定への続ついている。 UEFIはMBR ( マスタブートレコード)の代りに2Tb より 大きい仕切りのためのサポートを可能にするのにGPT (GUIDの仕切りのテーブル)を使用する。 多くのビオスの利用できる今日サポートGPTしかしUEFIサポートのないプラットホームは2TBより大きいGPTの仕切りからのオペレーティングシステムを追い出すことができない。 最近まで、UEFIは上限サーバーに制限されたが、今商品のサーバーおよび卓上でより平凡になっている。
私にIntelの UEFI可能にされたマザーボードがあり、UEFIによってソフト帽12およびマイクロソフトヴィスタおよびWindows 7の64ビット版を追い出してもいい。 まだある間、のある問題は働かせる一般にソフト帽12で、UEFI支える。 私はソフト帽12のためにに気づいていること唯一のUEFIわかっている実用性が作成できる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を使用する。
私はソフト帽12の穀粒はわかっているをことすべての全体的に定義された変数についての細部をリストするために私がuefivarsを呼んだ実用性を書くことにした。 車輪を改革しなさいよりもむしろ、私はそれ以来の私の出発点としてefibootmgrのためにソースコードを含んでいたルーチンの多数をraw_varファイルのバイナリーデータを分析するのに必要とされたそのI使用した。 多数があるのでConInが使用するEFI_DEVICE_PATH_PROTOCOLのディスクリプターを分析してUEFIの指定によって定義されるConInDevおよびいとこによって証明されるより問題となる装置道ノードおよびこれらのノードはすべてあらゆるバイト境界で現われるかもしれないバイト詰められたデータ構造である。 幸いにも、地虫の遺産のブート・ローダ のための ソースコードは装置道ノードを分析するためにデバッギングコードを含んでいた。 ところで、EFIおよびUEFIはあなたの頭部を得るかなり困難な主題である。 現在のUEFIの指定(A)版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が64ビットのソフト帽12のために出力するものがある。 私がデュエット(開発者UEFIの模範化)を使用してUSBのキーからのソフト帽12のこの例を追い出したことに-それ故に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を開発する時間である
装置道歩くためにルーチンをノードおよびもっと含んでいる図書館。
-フィン
UEFI [...]についての情報を取り出し、表示するために彼の新しいプロジェクト、uefivarsについての彼のブログで昨日掲示される[...] P.マーフィー(fpmurphy)、