Uefi legacy что это: В чем разница между UEFI и Legacy BIOS
Содержание
Глава 2, Часть 1 — Да зачем нам этот Legacy / Хабр
Введение
Пару месяцев назад я решил начать серию статей про написание своей ОС с нуля. Описал написание Legacy MBR загрузчика и переход в защищенный режим (без прерываний) и ещё пару мелочей. Сегодня я решил, что попытаюсь «перезапустить» эту серию (сохранив нумерацию частей). Суть в том, что теперь будут использоваться актуальные на август 2022 года материалы, и разработанное ПО можно будет легко протестировать на своей (U)EFI-машине.
Ассемблер — всему голова!
Не знаю как с этим у других людей, но лично я влюблен в ассемблер. При этом, переходил я на него, предварительно изучив Python, а не С или Фортран. В общем, программировать я буду всё ещё на ассемблере, конкретно — fasm, так как у него очень мощный препроцессор и компоновщик встроен в компилятор.
Загрузчики бывают разные…
Я назову 2 основных: это Legacy, или же MBR, и Secure, или же EFI-загрузчики (надеюсь, с терминами не напутал). В первой части я писал двух-ступенчатый загрузчик: MBR и фиксированно-расположенный SSB (Second-Stage Bootloader, загрузчик 2 стадии). В этот раз будем писать EFI-загрузчик.
Как загружаются UEFI-загрузчики?
Ну, примерно так: запускается биос (вроде с F000:FFFF или где-то там), производит POST (Power On Self Test), если все ОК, то запускает (U)EFI. UEFI в свою очередь ищет диски с известными файловыми системами (ntfs, brtfs, extFAT, FAT32, isofs, cdfs, ext2/3/4, есть ещё, но это уже опционально), ищет на них по адрессу /EFI/BOOT/
файл с расширениет *.efi
, который называется bootX.efi
где Х это платформа, для которой написан загрузчик. В целом, это всё. (ах, да, чуть не забыл: UEFI32 запускают bootia32.efi
в защищенном режиме, а UEFI64 запускают bootx64.efi
в долгом режиме).
Что вообще такое efi-приложение?
Технически, это тот же самый PE (Portable Excutable, формат исполняемых файлов для Microsoft Windows, *. exe, *.msi, *.dll, *.sys, *.mui), он даже разбирается с помощью IDA!
Приступим!
Для начала, просто exe-шник не подойдет. в строку с format нужно писать нечто подобное:
format PE64 DLL EFI
Потом, будет ну прям ОЧЕНЬ (на самом деле не ПРЯМ очень, но будет) сложно писать efi-app без библиотек. поэтому я набросал свою (листинг 1, 2, 3).
Листинг 1 (sysuefi.inc) — некоторые структуры, макросы и функции, без которых жизнь медом не покажется.
Листинг 2 (libuefi.inc) — некоторые полезные функции, начинаются с __, потому, что будут обернуты в Листинге 3
Листинг 3 (macroefi.inc) — обертка над Листингами 1 и 2, полностью из макросов и структур.
Также рекомендую использование такой вещи как struct.inc, гуляющей по всем интернетам. В библиотечках я её не использовал, но в будущем будет удобно свои структурки определять.
В итоге, получается вот-такая файловая система у нашего «проекта» (рис. 1)
рис. 1: Файловая система проекталистинг 1
; sysuefi. inc for fasm assembly ; struc int8 { align 1 . db ? } struc int16 { align 2 . dw ? align 1 } struc int32 { align 4 . dd ? align 1 } struc int64 { align 8 . dq ? align 1 } struc intn { align 8 . dq ? align 1 } struc dptr { align 8 . dq ? align 1 } ;symbols EFIERR = 0x8000000000000000 EFI_SUCCESS = 0 EFI_LOAD_ERROR = EFIERR or 1 EFI_INVALID_PARAMETER = EFIERR or 2 EFI_UNSUPPORTED = EFIERR or 3 EFI_BAD_BUFFER_SIZE = EFIERR or 4 EFI_BUFFER_TOO_SMALL = EFIERR or 5 EFI_NOT_READY = EFIERR or 6 EFI_DEVICE_ERROR = EFIERR or 7 EFI_WRITE_PROTECTED = EFIERR or 8 EFI_OUT_OF_RESOURCES = EFIERR or 9 EFI_VOLUME_CORRUPTED = EFIERR or 10 EFI_VOLUME_FULL = EFIERR or 11 EFI_NO_MEDIA = EFIERR or 12 EFI_MEDIA_CHANGED = EFIERR or 13 EFI_NOT_FOUND = EFIERR or 14 EFI_ACCESS_DENIED = EFIERR or 15 EFI_NO_RESPONSE = EFIERR or 16 EFI_NO_MAPPING = EFIERR or 17 EFI_TIMEOUT = EFIERR or 18 EFI_NOT_STARTED = EFIERR or 19 EFI_ALREADY_STARTED = EFIERR or 20 EFI_ABORTED = EFIERR or 21 EFI_ICMP_ERROR = EFIERR or 22 EFI_TFTP_ERROR = EFIERR or 23 EFI_PROTOCOL_ERROR = EFIERR or 24 macro structure name { virtual at 0 name name end virtual } ;structureures EFI_SYSTEM_TABLE_SIGNATURE equ 49h,42h,49h,20h,53h,59h,53h,54h struc EFI_TABLE_HEADER { . Signature int64 .Revision int32 .HeaderSize int32 .CRC32 int32 .Reserved int32 } structure EFI_TABLE_HEADER struc EFI_SYSTEM_TABLE { .Hdr EFI_TABLE_HEADER .FirmwareVendor dptr .FirmwareRevision int32 .ConsoleInHandle dptr .ConIn dptr .ConsoleOutHandle dptr .ConOut dptr .StandardErrorHandle dptr .StdErr dptr .RuntimeServices dptr .BootServices dptr .NumberOfTableEntries intn .ConfigurationTable dptr } structure EFI_SYSTEM_TABLE struc SIMPLE_TEXT_OUTPUT_INTERFACE { .Reset dptr .OutputString dptr .TestString dptr .QueryMode dptr .SetMode dptr .SetAttribute dptr .ClearScreen dptr .SetCursorPosition dptr .EnableCursor dptr .Mode dptr } structure SIMPLE_TEXT_OUTPUT_INTERFACE ;---include ends struc SIMPLE_INPUT_INTERFACE { .Reset dptr .ReadKeyStroke dptr .WaitForKey dptr } structure SIMPLE_INPUT_INTERFACE struc EFI_BOOT_SERVICES_TABLE { . Hdr EFI_TABLE_HEADER .RaisePriority dptr .RestorePriority dptr .AllocatePages dptr .FreePages dptr .GetMemoryMap dptr .AllocatePool dptr .FreePool dptr .CreateEvent dptr .SetTimer dptr .WaitForEvent dptr .SignalEvent dptr .CloseEvent dptr .CheckEvent dptr .InstallProtocolInterface dptr .ReInstallProtocolInterface dptr .UnInstallProtocolInterface dptr .HandleProtocol dptr .Void dptr .RegisterProtocolNotify dptr .LocateHandle dptr .LocateDevicePath dptr .InstallConfigurationTable dptr .ImageLoad dptr .ImageStart dptr .Exit dptr .ImageUnLoad dptr .ExitBootServices dptr .GetNextMonotonicCount dptr .Stall dptr .SetWatchdogTimer dptr .ConnectController dptr .DisConnectController dptr .OpenProtocol dptr .CloseProtocol dptr .OpenProtocolInformation dptr .ProtocolsPerHandle dptr .LocateHandleBuffer dptr .LocateProtocol dptr .InstallMultipleProtocolInterfaces dptr .UnInstallMultipleProtocolInterfaces dptr .CalculateCrc32 dptr . CopyMem dptr .SetMem dptr } structure EFI_BOOT_SERVICES_TABLE struc EFI_RUNTIME_SERVICES_TABLE { .Hdr EFI_TABLE_HEADER .GetTime dptr .SetTime dptr .GetWakeUpTime dptr .SetWakeUpTime dptr .SetVirtualAddressMap dptr .ConvertPointer dptr .GetVariable dptr .GetNextVariableName dptr .SetVariable dptr .GetNextHighMonoCount dptr .ResetSystem dptr } structure EFI_RUNTIME_SERVICES_TABLE struc EFI_TIME { .Year int16 .Month int8 .Day int8 .Hour int8 .Minute int8 .Second int8 .Pad1 int8 .Nanosecond int32 .TimeZone int16 .Daylight int8 .Pad2 int8 .sizeof rb 1 } structure EFI_TIME EFI_LOADED_IMAGE_PROTOCOL_UUID equ 0A1h,31h,1bh,5bh,62h,95h,0d2h,11h,8Eh,3Fh,0h,0A0h,0C9h,69h,72h,3Bh struc EFI_LOADED_IMAGE_PROTOCOL { .Revision int32 .ParentHandle int64 .SystemTable dptr .DeviceHandle int64 .FilePath dptr .Reserved int64 .LoadOptionsSize int32 .ImageBase dptr .ImageSize int64 .ImageCodeType int32 .ImageDataType int32 . UnLoad dptr } structure EFI_LOADED_IMAGE_PROTOCOL EFI_BLOCK_IO_PROTOCOL_UUID equ 21h,5bh,4eh,96h,59h,64h,0d2h,11h,8eh,39h,00h,0a0h,0c9h,69h,72h,3bh struc EFI_BLOCK_IO_PROTOCOL { .Revision int64 .Media dptr .Reset dptr .ReadBlocks dptr .WriteBlocks dptr .FlushBlocks dptr } structure EFI_BLOCK_IO_PROTOCOL struc EFI_BLOCK_IO_MEDIA { .MediaId int32 .RemovableMedia int8 .MediaPresent int8 .LogicalPartition int8 .ReadOnly int8 .WriteCaching int8 .BlockSize int32 .IoAlign int32 .LastBlock int64 } structure EFI_BLOCK_IO_MEDIA EFI_GRAPHICS_OUTPUT_PROTOCOL_UUID equ 0deh, 0a9h, 42h,90h,0dch,023h,38h,04ah,96h,0fbh,7ah,0deh,0d0h,80h,51h,6ah struc EFI_GRAPHICS_OUTPUT_PROTOCOL { .QueryMode dptr .SetMode dptr .Blt dptr .Mode dptr } structure EFI_GRAPHICS_OUTPUT_PROTOCOL struc EFI_GRAPHICS_OUTPUT_PROTOCOL_MODE { .MaxMode int32 .CurrentMode int32 .ModeInfo dptr .SizeOfModeInfo intn .FrameBufferBase dptr .FrameBufferSize intn } structure EFI_GRAPHICS_OUTPUT_PROTOCOL_MODE struc EFI_GRAPHICS_OUTPUT_MODE_INFORMATION { . Version int32 .HorizontalResolution int32 .VerticalResolution int32 .PixelFormat int32 .RedMask int32 .GreenMask int32 .BlueMask int32 .Reserved int32 .PixelsPerScanline int32 } structure EFI_GRAPHICS_OUTPUT_MODE_INFORMATION macro InitializeLib { clc or rdx, rdx jz .badout cmp dword [rdx], 20494249h je @f .badout: xor rcx, rcx xor rdx, rdx stc @@: mov [efi_handler], rcx mov [efi_ptr], rdx } macro uefi_call_wrapper interface,function,arg1,arg2,arg3,arg4,arg5,arg6,arg7,arg8,arg9,arg10,arg11 { numarg = 0 if ~ arg11 eq numarg = numarg + 1 if ~ arg11 eq rdi mov rdi, arg11 end if end if if ~ arg10 eq numarg = numarg + 1 if ~ arg10 eq rsi mov rsi, arg10 end if end if if ~ arg9 eq numarg = numarg + 1 if ~ arg9 eq r14 mov r14, arg9 end if end if if ~ arg8 eq numarg = numarg + 1 if ~ arg8 eq r13 mov r13, arg8 end if end if if ~ arg7 eq numarg = numarg + 1 if ~ arg7 eq r12 mov r12, arg7 end if end if if ~ arg6 eq numarg = numarg + 1 if ~ arg6 eq r11 mov r11, arg6 end if end if if ~ arg5 eq numarg = numarg + 1 if ~ arg5 eq r10 mov r10, arg5 end if end if if ~ arg4 eq numarg = numarg + 1 if ~ arg4 eq r9 mov r9, arg4 end if end if if ~ arg3 eq numarg = numarg + 1 if ~ arg3 eq r8 mov r8, arg3 end if end if if ~ arg2 eq numarg = numarg + 1 if ~ arg2 eq rdx mov rdx, arg2 end if end if if ~ arg1 eq numarg = numarg + 1 if ~ arg1 eq rcx if ~ arg1 in <ConsoleInHandle,ConIn,ConsoleOutHandle,ConOut,StandardErrorHandle,StdErr,RuntimeServices,BootServices> mov rcx, arg1 end if end if end if xor rax, rax mov al, numarg if interface in <ConsoleInHandle,ConIn,ConsoleOutHandle,ConOut,StandardErrorHandle,StdErr,RuntimeServices,BootServices> mov rbx, [efi_ptr] mov rbx, [rbx + EFI_SYSTEM_TABLE. #interface] else if ~ interface eq rbx mov rbx, interface end if end if if arg1 in <ConsoleInHandle,ConIn,ConsoleOutHandle,ConOut,StandardErrorHandle,StdErr,RuntimeServices,BootServices> mov rcx, rbx end if if defined SIMPLE_INPUT_INTERFACE.#function mov rbx, [rbx + SIMPLE_INPUT_INTERFACE.#function] else if defined SIMPLE_TEXT_OUTPUT_INTERFACE.#function mov rbx, [rbx + SIMPLE_TEXT_OUTPUT_INTERFACE.#function] else if defined EFI_BOOT_SERVICES_TABLE.#function mov rbx, [rbx + EFI_BOOT_SERVICES_TABLE.#function] else if defined EFI_RUNTIME_SERVICES_TABLE.#function mov rbx, [rbx + EFI_RUNTIME_SERVICES_TABLE.#function] else if defined EFI_GRAPHICS_OUTPUT_PROTOCOL.#function mov rbx, [rbx + EFI_GRAPHICS_OUTPUT_PROTOCOL.#function] else if defined EFI_GRAPHICS_OUTPUT_PROTOCOL_MODE.#function mov rbx, [rbx + EFI_GRAPHICS_OUTPUT_PROTOCOL_MODE.#function] else mov rbx, [rbx + function] end if end if end if end if end if end if call uefifunc } section '. text' code executable readable uefifunc: mov qword [uefi_rsptmp], rsp and esp, 0FFFFFFF0h bt eax, 0 jnc @f push rax @@: cmp al, 11 jb @f push rdi @@: cmp al, 10 jb @f push rsi @@: cmp al, 9 jb @f push r14 @@: cmp al, 8 jb @f push r13 @@: cmp al, 7 jb @f push r12 @@: cmp al, 6 jb @f push r11 @@: cmp al, 5 jb @f push r10 @@: sub rsp, 4*8 call rbx mov rsp, qword [uefi_rsptmp] ret section '.data' data readable writeable efi_handler: dq 0 efi_ptr: dq 0 uefi_rsptmp: dq 0
листинг 2
пока что пуст, но по мере надобности начнет расти!
if ~ defined __EFICODE__ __EFICODE__ EQU 0 end if
листинг 3
if ~ defined __MACROEFI__ __MACROEFI__ EQU 0 ;; --- constants --- ;; true EQU 1 false EQU 0 null EQU 0 nl EQU 13,10 via EQU , ;; --- structures --- ;; struc sString [value] { common if ~ value eq . du value, null else . du null end if } struc sStrbuf _len { if ~ len eq . len dq _len*2 .val rw _len else .len dq 1024*2 .val rw 1024 end if } struc sKey scan, utf { if ~ scan eq .scancode dw scan else .scancode dw null end if if ~ utf eq .unicode du utf else .unicode: end if du null } ;; --- macros --- ;; macro mEntry _ofs { format pe64 dll efi entry _ofs } macro mInit { InitializeLib jnc @f mExit EFI_SUCCESS @@: } macro mPrint _str { if ~_str eq uefi_call_wrapper ConOut, OutputString, ConOut, _str end if } macro mPrintln _str { if ~ _str eq mPrint _str end if mPrint _crlf } macro mReturn [data] { if ~ data eq forward push data end if common ret } macro mInvoke func, [arg] { if ~ arg eq reverse push arg end if call func }; vacuum example: mInvoke fSend via message macro mEfidata { common mSect data __crlf sString nl __key_buf sKey null, null } macro mScankey _key { if ~ _key eq mov [_key], dword 0 @@: uefi_call_wrapper ConIn, ReadKeyStroke, ConIn, _key cmp dword [_key], 0 jz @b end if } macro mExit status { if status eq mov eax, EFI_SUCCESS else mov eax, status end if retn } macro mSect name, type { if type eq data section '. #name' data readable writable else if type eq code section '.#name' code executable readable else if type eq text section '.#name' code executable readable else if type eq fixup section '.#name' fixups data discardable end if } end if
Традиции… Привет, мир!
Напишем helloworld для uefi используя мои листинги. Код получился до смешного коротким и интуитивно понятным. Имхо, под Windows консольную писалку создать сложнее!
; импортируем макросы include "include/macroefi.inc" ; назначаем точку входа mEntry main ; импортируем вторую часть библиотеки (обязательно после mEntry!) include "include/sysuefi.inc" ; секция '.text' code executable readable mSect text, code ; главная функция main: ; инициализируем библеотеку mInit ; печатаем хеловорлд mPrint hello ; аналог _getch из msvcrt.dll, ; ждем клавиши и сохраняем в key mScankey key ; возвращаемся в UEFI shell ; со статусом ОК mExit EFI_SUCCESS ; импортируем третью часть библиотеки (желательно посте основного кода) include "include/libuefi. inc" ; секция '.bsdata' data readable writable mSect bsdata, data ; utf-8 строка для хеловорлда hello sString 'Hello UEFI World!' ; ячейка для клавиши key sKey ; финальный макрос библиотеки. ВСЕГДА в конце всего кода mEfidata
Как это собрать?
Я создал для этого простенький Makefile. напишите make build и найдете в рабочей папке файл bootx64.efi. Makefile (подсветка от перл потому, что от нее все подсветилось):
build: fasm BOOTX64.asm image: build mkdir tmp mkdir tmp/efi mkdir tmp/efi/boot cp BOOTX64.efi tmp/efi/boot/BOOTX64.efi genisoimage -o ./image.iso -V BACKUP -R -J ./tmp rm tmp/efi/boot/* rmdir tmp/efi/boot tmp/efi tmp cls dump: build hd BOOTX64.efi
Как это запустить?
Создаете FAT32 флешку или GPT раздел, кидаете в /efi/boot файл под названием bootx64.efi и перезагружаете ПК. При запуске откройте меню выбора загрузочного носителя и там найдите свой файл/флешку/раздел. Грузитесь с него и видите сообщение. Чтобы вернуться, нажмите любую клавишу.
Итоги
В течении статьи я изложил вам все преимущества Secure boot над Legacy, рассказал как все это работает и написал helloworld-загрузчик.
Поддержка
Всегда непротив конструктивной критики. Принимаю идеи по улучшению статьи и проекта в целом. Всегда буду рад полезным ссылкам. Спасибо за прочтение!
BIOS UEFI — возможности и отличия
Главная » Windows » BIOS UEFI – возможности и отличия от Legacy BIOS
На чтение: 3 минОпубликовано: Рубрика: WindowsАвтор: EvilSin225
Сегодня мы поговорим о новом интерфейсе BIOS UEFI, который на сегодняшний день неплохо вытесняет обычный BIOS. Эта технология все чаще появляется в новых компьютерах и ноутбуках. Но есть одна маленькая загвоздочка. Если Ваш компьютер или ноутбук на BIOS UEFI, то кроме Windows 8 вы на него ничего установить не сможете. Но все же есть способы, как установить, например, Windows 7. А также сейчас мы поговорим о преимуществе перед обычным БИОС.
БИОС UEFI – это новый интерфейс, который управляет низкоуровневыми функциями оборудования. Разработала его компания Intel.
Что такое вообще BIOS, наверное, знают все. Это микропрограмма, встроенная в материнскую плату. Данная технология сообщает системе, как использовать внутренние комплектующие компьютера: процессор, видеокарту и т. д. BIOS запускается раньше Windows и производит проверку всех внутренних составляющих. Если какое-то устройство неисправно, БИОС должен издать сигнал через встроенный динамик.
Но на сегодняшний момент на смену BIOS пришла более совершенная технология UEFI.
Так, какие же преимущества у BIOS UEFI перед обычным BIOS. Ну во первых полностью переработанный механизм. Во вторых UEFI много взял от своего предшественника. Он также проверяет комплектующие компьютера, а после идет загрузка операционной системы.
- Удобный графический интерфейс. Поддерживает управление мышью. Также, есть поддержка русского языка.
- Работает с жесткими дисками, которые имеют таблицу разделов GPT. Данные винчестеры можно разбить на 128 разделов. А в MBR можно было создать только 4 раздела.
- Так как, обычный BIOS не видел диски объемом более 2 Тбайт, в UEFI эту проблему исправили. UEFI поддерживает объем 18 Экзабайт.
- Винчестеры MBR работали со старой адресацией CHS, теперь жесткие диски GPT работают с адресацией LBA.
- Происходит быстрая загрузка с жесткого диска. Windows 8 загружается за 5 сек.
- На винчестерах GPT, легче восстановить удаленные данные.
- BIOS UEFI имеет собственный менеджер загрузки, это удобно, если вы используете несколько операционных систем.
- Легко обновить в отличие от обычного BIOS. Как обновить BIOS HP Pavilion.
Есть еще одна особенность в BIOS UEFI. Из-за нее и невозможно установить другие операционные системы кроме Windows 8.
Технология эта называется Secure Boot – протокол безопасной загрузки. Он основан на сертифицированных ключах, которые имеются только в Windows 8. Более старые операционные системы, в том числе и Linux, таких ключей не имеют, и установить их не удастся. Выход, конечно, есть, можно отключить Secure Boot, но тогда установка windows будет происходить на диск MBR, и теряется много преимуществ.
Рейтинг
( 1 оценка, среднее 5 из 5 )
1 18 969 просмотров bios Secure Boot UEFI uefi bios
EvilSin225/ автор статьи
Понравилась статья? Поделиться с друзьями:
Что вам нужно знать
Перейти к содержимому
Автор Дарек Фэнтон · Категории: Техническое объяснение · Опубликовано: 30 июля 2021 г. · Чтение: 3,3 мин. ·
С выпуском Windows 11 в октябре 2021 года требования к оборудованию стали популярной темой. Список минимальных требований для Windows 11 можно найти в нашем блоге о требованиях к оборудованию для Windows 11, но в этом блоге мы сосредоточимся на использовании UEFI для Windows 11.
Требуется ли для Windows 11 UEFI?
Корпорация Майкрософт решила использовать преимущества UEFI в Windows 11, чтобы предложить пользователям повышенную безопасность. Это означает, что Windows 11 ДОЛЖНА работать с UEFI и несовместима с BIOS или устаревшим режимом совместимости. При проверке того, поддерживает ли ваш компьютер Windows 11, вы также должны включить безопасную загрузку, которая является функцией только UEFI.
Поддержка TPM 2.0 также является требованием для Windows 11. Большинство современных процессоров будут иметь встроенный элемент безопасности, поддерживающий спецификацию TPM 2.0 (для Intel это называется «PTT», а для AMD — «fTPM»). Эти функции также может потребоваться включить в меню UEFI, прежде чем система сможет загрузить Windows 11.
Как проверить, используете ли вы UEFI
Вы можете проверить режим установки Windows, прежде чем включать безопасную загрузку, выполнив поиск приложения «Информация о системе» в строке поиска и проверив настройки режима BIOS. Если ваша система сообщает, что она находится в режиме UEFI, значит, все в порядке. Однако, если он не сообщает о том, что находится в режиме UEFI, значит, вы находитесь в режиме, не поддерживаемом Windows 11.
Если вы переключитесь на UEFI на этом этапе, ваша операционная система, скорее всего, не загрузится из-за жесткого диска с использованием таблицы разделов MBR, которая не поддерживается Windows при загрузке в режиме только UEFI. Всегда полезно задокументировать настройки BIOS или UEFI, прежде чем изменять их, на случай, если позже вам понадобится восстановить эти настройки.
Если вы не задокументировали изменения настроек и ваш компьютер больше не загружается, не паникуйте; вы все еще можете сбросить систему обратно в режим Legacy. Если вы используете компьютер OnLogic, вы можете обратиться к нашему сайту поддержки, чтобы найти подходящее руководство по материнской плате для вашей системы и следовать приведенным там инструкциям.
Microsoft также предоставляет приложение для проверки работоспособности ПК, которое можно использовать для проверки готовности системы к Windows 11.
Разница между BIOS и UEFI
Термины BIOS и UEFI часто используются взаимозаменяемо, но на самом деле это два разных поколения компьютерных инструкций на основе встроенного ПО. BIOS, что означает базовую систему ввода-вывода, является старшим из двух наборов инструкций. В 2007 году BIOS был в значительной степени заменен на UEFI, что означает Unified Extensible Firmware Interface. UEFI предлагает несколько важных преимуществ по сравнению с BIOS, включая расширенные функции безопасности, но многие материнские платы UEFI по-прежнему предлагают поддержку BIOS в устаревшем режиме. Это называется «UEFI с CSM» (модуль поддержки совместимости). Сначала вам может потребоваться отключить CSM, чтобы поддерживать функции безопасной загрузки.
В нашем видеоролике Tech Edge ниже мы разбираем разницу между BIOS и UEFI.
Ключевой вывод об UEFI для Windows 11
Главный вывод здесь заключается в том, что для установки Windows 11 в вашей системе должен быть установлен режим UEFI. Если вы использовали устаревший режим в Windows 10, вам необходимо переключиться в UEFI, а затем выполните новую установку перед попыткой обновления до Windows 11.
Если у вас есть какие-либо вопросы о UEFI для Windows 11, свяжитесь с нашей командой для получения помощи сегодня.
Первоначально этот блог был опубликован 30 июля 2021 г. Он был обновлен для содержания 10 сентября 2022 г. hub/what-are-the-windows-11-hardware-requirements/
https://www.onlogic.com/company/io-hub/uefi-building-better-bios/
https://www.onlogic.com/support/
https://nerdschalk.com/why-windows-11-needs-secure-boot/
https://nerdschalk.com/windows-11- без-UEFI-все-вам-нужно-знать/
Получайте последние технические обновления
Подпишитесь на наши информационные бюллетени, чтобы получать обновления от OnLogic прямо на ваш почтовый ящик. Новости и идеи от нашей команды экспертов находятся на расстоянии одного клика. Нажмите кнопку, чтобы перейти на нашу страницу подписки.
Об авторе: Дарек Фэнтон
Дарек — менеджер по коммуникациям в OnLogic. Его страсть как к журналистике, так и к технологиям привела его из отделов новостей местных газет в производственный цех IBM. Благодаря своему опыту сбора новостей он всегда находится в поиске новейших технологий и лучших способов поделиться этой информацией с читателями. В дополнение к своей любви к словам, Дарек — меломан, жонглер и большой любитель ужасных шуток.
Следите за OnLogic на LinkedIn
Дополнительные статьи
ТЕХНИЧЕСКАЯ ИНФОРМАЦИЯ
Узнайте, как безвентиляторные компьютеры могут помочь вашему бизнесу 5 способов
Получить технический документ
Просмотреть все статьи
5
Откройте для себя множество промышленных компьютеров OnLogic
Магазин OnLogic
Узнайте больше на OnLogic.
com
Промышленные ПК OnLogic: рассчитаны на долгую службу. Построен на заказ. Доставлено в днях. Посетите наш интернет-магазин по адресу OnLogic.com
Ссылка для загрузки страницы Перейти к началу
Загрузка PXE как в устаревшем BIOS, так и в UEFI | Мэтт Воланте | arpcache
Мы находимся на стадии планирования проекта обновления до Windows 10. В то же время мы рассматриваем возможность обновления аппаратного обеспечения настольных компьютеров во всей компании. Как бы мне ни хотелось запускать тонкие клиенты, обслуживаемые из сверхизбыточного-блестящего-облачного-защищенного-перегруженного-центра обработки данных… реальность такова, что у нас слишком много зависимостей, чтобы сделать что-то подобное жизнеспособным, учитывая наши ресурсы в области ИТ. Таким образом, мы устанавливаем цены на новые настольные системы, чтобы заменить старые (хорошо, что настольные системы становятся все меньше и меньше).
Новые настольные системы теперь поставляются с UEFI вместо традиционного BIOS. Мы предоставляем и управляем нашими настольными системами с помощью Microsoft SCCM. Мы также используем сетевую загрузку, а именно загрузку PXE, чтобы запустить процесс создания образа рабочего стола.
Во время перехода на новое оборудование для настольных ПК нам придется поддерживать в нашей среде как старые настольные компьютеры с устаревшей версией BIOS, так и новые настольные компьютеры с UEFI. Одна из проблем заключается в том, что сетевые загрузочные файлы для UEFI и BIOS отличаются. Так как же клиент PXE узнает, какой загрузочный файл нужно получить?
Есть несколько способов выполнить эту задачу. В нашей среде клиенты PXE обращаются к нашим DHCP-серверам, чтобы указать им, куда идти. Как DHCP узнает, какой загрузочный файл обслуживать? Ответ содержится в широковещательном пакете DHCPDISCOVER от PXE-клиента. Давайте заглянем внутрь, любезно предоставлено Wireshark:
Обнаружение широковещательной рассылки от PXE-клиента Legacy BIOS:
Опция 93 показывает x86-архитектуру, а Опция 60 Vendor Class показывает идентификатор клиентской архитектуры
И обнаружение широковещательного пакета от клиента UEFI:
Опция 93 показывает арку EFI, а Option 60 Vendor Class показывает идентификатор клиентской арки
Как мы видим здесь, мы узнали, что PXE-клиент идентифицирует себя для DHCP-сервера на этапе обнаружения, перенося свою архитектуру в параметры. Теперь DHCP-сервер должен что-то сделать с этой информацией.
Когда все было в устаревшем биосе, на эти опции не нужно было обращать внимание. С сервера SCCM обслуживался один загрузочный файл, который все конечные точки получали во время загрузки PXE. Теперь, когда у нас есть требование обслуживать 2 разных загрузочных файла, мы можем использовать параметр 60 для определения архитектуры PXE-клиента. Но как с этим справляется DHCP-сервер? С помощью Политик.
Сначала мы должны создать пользовательские классы поставщиков на DHCP-сервере (в этом примере Microsoft DHCP):
щелкните правой кнопкой мыши родительский контейнер IPv4 под именем вашего сервера
Теперь мы создаем 2 пользовательских класса поставщиков для идентификации каждой архитектуры PXE, которую мы будем использовать. ожидание (в нашем случае BIOS и EFI, как показано в пакетах выше). Для EFI добавляем в поле описания «PXEClient:Arch:00007», а для BIOS определяем «PXEClient:Arch:00000».
Добавьте свое значение в поле «Описание».