LINUX.ORG.RU
ФорумTalks

Читал про UEFI, много думал.

 , ,


4

3

Господа, читайте и изучайте UEFI, если всё ещё не. Это базовая база нынче!

Я когда-то писал на ассемблере в школе-универе для развлечения бут-сектора для дискет и HDD, MBR это называлось - это такой 512-байтный самый первый сектор диска, который автоматически считывался BIOS на x86 в память по фиксированному адресу и управление туда передавали. У меня был ThinkPad 755C для развлечений. Далее ты всё должен был делать сам. В 512-байтный код надо было запихнуть самодельный примитивный парсер корня FAT12/FAT32, чтобы он нашёл в корне ФС некий условный файл /kernel.bin и передал туда управление - это твой условной grub или вообще сразу же ядро самописной маленькой OS - я писал детскую OS, которая переводила cpu в protected mode и умела параллельные задачи запускать - мигание какой-то лампочкой клавиатуры и считывание каких-то байтиков с неё и какой-то крутящийся курсор. Это был мой kernel.bin бугага.

А нынче эти времена поменялись. Теперь нет никакого BIOS - точнее теперь эту сущность стали называть просто бездушно firmware и это firmware должно соответствовать спецификации UEFI. UEFI - это стандарт внешних и (где-то внутренних) признаков, которые этот BIOS должен проявлять. Раньше как было - BIOS на каждой матери был устроен как захотят, главное чтобы умел int 10h (видео), int 13h (диск), int 16h (клавиатура) и какие-то другие программные прерывания обрабатывать. Ну и ещё было выражение «зайти в BIOS» - это какая-то F1 клавиша и синий экран с менюшками и там можно было save changed and exit - но такой фигни могло и не быть и BIOS всё равно у тебя был. Внутри этих прерываний был чёрный ящик тащемта и работало оно только в 16-bit real mode. Теперь всё это выкинуто нахер. UEFI - это прям как маленькая OS, которая изначально работает в protected mode, там есть концепции драйверов, даже приложений. Есть разные фазы загрузки всего. Оно умеет парсить FAT32 и доставать оттуда загрузчики и приложения и исполнять всё это.

UEFI умеет парсить FAT32, в которой лежат файлики .efi в формате windows PE (MZ в начале файла, микрософт оставила свой след, бугага). В FAT32 есть разные папочки, в них разные .efi файлики, часть из которых имеет фиксированные имена и содержит дефолтные загрузчики и загрузчик этой вашей убунты оформлен как /boot/efi/EFI/ubuntu/grubx64.efi а сама /boot/efi есть точка монтирования vfat-раздела на диске, и этот раздел «осознаётся» UEFI firmware на старте системы.

Ещё у UEFI есть стандарт на хранение кучи key=value переменных - «efivars» которые открыты на чтение-запись, часть из которых имеет фиксированные имена и форматы, а часть пользовательские, можно даже туда телефон бабушки положить и он будет лежать во флешке на матери. Эти переменные можно в линуксах увидеть тут: ls -l /sys/firmware/efi/efivars - оно невозбранно смонтировано как type efivars. В этих переменных лежит и порядок загрузки с разных разделов и ещё всякой дофига фигни, а GUI вашего BIOS нынче просто просматривет эти переменные, а не хранит «настройки BIOS» в каком-то своём формате в чёрном ящике.

Вместо BIOS-прерываний типа int 16h теперь какая-то там системная таблица протоколов, в которой можно найти EFI_SIMPLE_TEXT_INPUT_PROTOCOL и поюзать клавиатуру.

UEFI стартует за несколько разных строго определённых «фаз», в UEFI есть свой шелл с фиксированными командами, в UEFI есть драйверы, есть приложения, есть спецификация на гуй и вообще дохрена всего, я охренел.

Короче господа, изучайте UEFI чтобы не быть чертилой. Это нечто неиллюзорно большое, куда АНБ конечно же напихала своих драйверов и приложений и пока ваш ноут грузится, он может успеть и в интернет сходить, но хорошая новость может быть в том, что UEFI позволяет вам там это выключить или поменять логотип вашего тынкпада на загрузке.



Последнее исправление: lesopilorama (всего исправлений: 4)
Ответ на: комментарий от Irma

Программист не может не уметь писать (его прямая обязанность писать прогреммы). Умение писать неизменно тянет за собой умение читать. Следовательно, программистов, не умеющих читать, не бывает.

Можно придумать какую-то воображаемую ситуацию с неким слепым программистом, который код надиктовывает автораспознавалке и т.д. Но в таком случае и «читать» он тоже может с помощью text-to-voice, так что это не проблема.

CrX ★★★★★
()
Последнее исправление: CrX (всего исправлений: 1)
Ответ на: комментарий от CrX

Почему нет тегов «я познаю мир» и «криокамера»?

Добавил.

lesopilorama
() автор топика
Ответ на: комментарий от Irma

Это не делает тех детей программистами. Точно так же как ребёнок, который написал «мама мыла раму», не стал от этого писателем.

CrX ★★★★★
()
Последнее исправление: CrX (всего исправлений: 1)
Ответ на: комментарий от CrX

Хорош субьективно сраться в моём треде. Писатель, не писатель. 21 век на дворе, постмодернизм, банан на скотчах к стене приклеивают, какие нахрен писатели, вы чё.

lesopilorama
() автор топика
Ответ на: комментарий от lesopilorama

Так а в чём он не прав?

Короче господа, изучайте UEFI чтобы не быть чертилой.

Вот вы когда соберёте TianoCore, зашьёте его в свой синкпад и запустите его так, чтобы всё оборудование заработало, тогда и приходите с пояснениями за чертил. А менять логотип – это деятельность уровня «пятилетний ребёнок осилил поменять обои на рабочем столе».

apt_install_lrzsz ★★★
()
Ответ на: комментарий от apt_install_lrzsz

Мы не поняли в чём я не прав. Я же не сказал, что я НЕ ЧЕРТИЛА.

lesopilorama
() автор топика
Ответ на: комментарий от CrX

Умение писать неизменно тянет за собой умение читать.

Умение может и есть, но вы, как модератор, должны знать, что не все, кто что-то написал на лорчике, читают, даже то что они только что написали)

goingUp ★★★★★
()

Пост хороший, мне понравился.

Но разбираться с UEFI откровенно лень. В моём NP300E5Z нет этой ихней UEFI, система грузится бут-сектором. А это до сих пор мой основной ноут для работы и таскания с собой везде.

wandrien ★★★
()

господа, изучайте UEFI чтобы не быть чертилой.

Поздравляю с разморозкой. Остальным на LOR об этом ещё 10 лет назад рассказали.

Saakx
()

в UEFI есть драйверы

Честно говоря - пока единственное, что оказалось на самом деле полезным - драйвер видеокарты AMD, как переключатель видеовхода по умолчанию (HDMI/DP/DVI) на уровне ниже ОС.

Toxo2 ★★★★
()
Ответ на: комментарий от no-dashi-v2

Расскажи это вайбкодерам

Рассказывал. Отвечают что-то в духе «ну не программист так не программист, зато за такими как мы будущее». Ну это если прям вот сильно к сути сокращать.

CrX ★★★★★
()

Пичаль только в том, что ничего полезного во всём этом нет. Дело в том, что при выходе из UEFI, эта вся муть перестаёт работать. А выходить из UEFI надо, потому что раскладка памяти не позволяет делать ничего полезного. Нет ни одного известного применения всей этой дряни. Максимум, что там можно написать - инсталлятор ОС какой-то. Может быть, прецедентов нет. Максимум - бут лоадеры. Сама ОС уже этими UEFI сервисами пользоваться не может. В отличие от BIOS Int services, которые работают всегда.

lenin386 ★★★★
()
Последнее исправление: lenin386 (всего исправлений: 7)

изучайте UEFI чтобы не быть чертилой

А зачем? Достаточно знать, что изучать если это действительно вдруг понадобится.

dmitry237 ★★★★★
()
Ответ на: комментарий от Irma

Игрушку «Луноход» могли программировать дети 5 лет, не умеющие читать.

Там не было программирования от слова совсем, емнип пульт с кнопками в которые тыкаешь шаги в виде «прямо, налево, направо, погудеть» и кол-во этих шагов было крайне ограничено.

anc ★★★★★
()
Ответ на: комментарий от alegz

runtime services - это бесполезные функции типа изменить значение переменной UEFI. Все драйверы, файловые системы - работать перестают. Фреймбуфер работает по случайности, не должен.

lenin386 ★★★★
()
Последнее исправление: lenin386 (всего исправлений: 1)
Ответ на: комментарий от lenin386

Учение ленина со временем потеряло новизну и актуальность. Возьми к примеру asus wmi используемый для мониторинга на оных досках

cobold ★★★★★
()
Ответ на: комментарий от cobold

Кто тебе сказал, что этот драйвер имеет какое-то отношение к UEFI? Там через ACPI работа. ACPI, как выражается автор выше - часть UEFI. Но нет. ACPI - старше UEFI и может без неё. Это вообще другой уровень абстракции.

lenin386 ★★★★
()
Последнее исправление: lenin386 (всего исправлений: 3)

Не понимаю, зачем оно. И не огорчусь, если так и не пойму.

piyavking ★★★★★
()
Ответ на: комментарий от mord0d

А thumbsup под твоим комментом наставили те, кто уже попробовали? (%

Для уверенности в чём-либо необязательно это пробовать самому, можно поставить мысленный эксперимент или прочитать чужой опыт просто.

lesopilorama
() автор топика
Ответ на: комментарий от lenin386

Под UEFI-ещё относительно низкоуровневые прошивалки оборудования, которым загруженность любых ОС-драйверов может быть вредна

GPFault ★★★
()

И зачем эту муть изучать?

поменять логотип вашего тынкпада на загрузке.

Очень полезно, конечно.

firkax ★★★★★
()
Ответ на: комментарий от GPFault

Не знаю, что за прошивалки и что за оборудование, но как уже говорил выше, раскладка памяти в UEFI ни для чего не годна. В частности, вся MMIO память устройств там вне доступа, до неё не дотянутся, никак. Как и что ты там собрался шыть - не знаю. Что касается загруженности ОС, скажу тебе, что современный x86 - нихрена не рилтайм оборудование, в принципе. Всё большее количество устройств просто тормозит процессоры, во имя скорости, ага, и даже вывести на экран буквы вызывает трудно прогнозируемые лагания. Казалось бы, это простая запись в память. Однако, нет.

lenin386 ★★★★
()
Последнее исправление: lenin386 (всего исправлений: 5)
Ответ на: комментарий от lenin386

Дело в том, что при выходе из UEFI, эта вся муть перестаёт работать.

«Выход из UEFI» - это у вас вызов ExitBootServices()?

Максимум - бут лоадеры.

А для чего, по вашему, вообще могут быть нужны бут сервисы? :) Как бы, очевидно.

Сама ОС уже этими UEFI сервисами пользоваться не может.

Бут сервисами не может. Она же не загрузчик, зачем бы ей? Если нужны какие-то экзотические драйвера, то для них есть ACPI.

В отличие от BIOS Int services, которые работают всегда.

Ну шо вы такое несёте, Сэр. :) Они в риалмоде только и работают. Да вдобавок ещё и ничего не умеют, даже для загрузчиков уже давно не подходят. Вот и сделали их переиздание, которое снова подходит для загрузчиков. Да, со всякими костылями, типа SMM-эмуляции легаси-девайсов поверх USB, ещё удавалось загрузчики через риалмоде-сервисы гонять, но теперь это всё не нужно, так как есть для них полноценные драйвера.

anonmyous ★★
()
Ответ на: комментарий от lenin386

и даже вывести на экран буквы вызывает трудно прогнозируемые лагания. Казалось бы, это простая запись в память. Однако, нет.

Настройте уже врайт-комбайнинг.

anonmyous ★★
()

неиллюзорно большое, куда АНБ конечно же напихала своих драйверов и приложений и пока ваш ноут грузится, он может успеть и в интернет сходить

Всё это и в BIOS можно было засунуть. Но в UEFI это приняло более структурированную форму. Можно драйверы перечислить/сдампить и т.д.. В BIOS я так понимаю лютый велосипед у каждого вендора.

X512 ★★★★★
()
Ответ на: комментарий от X512

Но в UEFI это приняло более структурированную форму.

Ну и в протмоду наконец перекочевало.

anonmyous ★★
()
Ответ на: комментарий от anonmyous

«Выход из UEFI» - это у вас вызов ExitBootServices()?

Да.

А для чего, по вашему, вообще могут быть нужны бут сервисы? :) Как бы, очевидно.

Для кого очевидно? Для ТС-а и некоторых ораторов - не очевидно. Сколько возможностей - и для чего? Для тупого бут лоадера, которому всегда хватало 448 байт. Это называется тупой оверинжиниринг ради оверинжиниринга больше оверинжиниринга.

lenin386 ★★★★
()
Последнее исправление: lenin386 (всего исправлений: 3)

В 512-байтный код надо было запихнуть самодельный примитивный парсер корня FAT12/FAT32, чтобы он нашёл в корне ФС некий условный файл /kernel.bin и передал туда управление

Надо было. Но не запихивалось. Все BIOS бут лоадеры либо прячут своё тело где-то (в неиспользуемых секторах, в файловой системе), и грузят его прямо с адреса на диске. Либо грузят прямо ядро прямо с адреса на диске. Отсюда и появились неперемещаемые недефрагментируемые файлы.

lenin386 ★★★★
()
Последнее исправление: lenin386 (всего исправлений: 2)

(да непривычно длинно) но хороший текст.

s-warus ★★★★
()
Ответ на: комментарий от lenin386

Это называется тупой оверинжиниринг ради оверинжиниринга больше оверинжиниринга.

Я вам ещё раз объясняю. Ровно такой же UEFI сидел в SMM-режиме, дабы обеспечить бутлоадеру доступ к усб-флешке через легаси протоколы риалмодового биоса. Но только ещё и требовалась аппаратная эмуляция легаси-интерфейсов, типа IDE, контроллеров клавы и мышки. Потом вендоры сказали «с нас хватит», и вынесли софтварную часть наружу. А от аппаратных костылей для эмуляции, постепенно избавляются и по сей день.

anonmyous ★★
()
Ответ на: комментарий от anonmyous

Никто ничего не сказал. Дело было так. Мистер Гейтс с Мистером Муром решили убить САН, Альфу и HP. Последних, правда, удалось подкупить. Для этого, был организован страшный проект - ИТАНИУМ. В него, было вложено всё, что было. А поскольку позиционировалась это хозяйство как убийца больших машин, PC BIOS туда тупо было не ко двору. Мужики привыкли к фирмварям, с диалоговым вводом. Вот было написано это EFI, как пародия на фирмвари, только больше плюшек, больше. Итаник никого не убил, сам помер. И померла бы вместе с ним и EFI, если бы не один случай. Мистер Баллмер кричал на каждом углу, что он выпустил Висту и Семёрку с дефендером, и наконец победил всю дрянь нахрен. В тут бац - и эпидемия бут вирусов-вымогателей, с стухнетом вкупе. Чтож, надо было что-то далать. А что у нас есть? А вот это у нас есть. Прикрутили подписывание и понесли бабки в Интел, которые это начали принуждать использовать. Вот и все вендоры.

lenin386 ★★★★
()
Ответ на: комментарий от lenin386

Для этого, был организован страшный проект - ИТАНИУМ.

И чем он намного страшнее нашего Эльбруса? Ну захотелось людям поисследовать влив.

PC BIOS туда тупо было не ко двору.

Да уж, риалмодовый 16битный биос много где не ко двору. Уефи-то хоть 32битная.

Итаник никого не убил, сам помер.

До 2021 аж дотянул. Однако да, помер.

И померла бы вместе с ним и EFI,

У вас машина времени в голове. УЕФИ распространился ещё когда итаник вполне себе выпускался.

Прикрутили подписывание и понесли бабки в Интел, которые это начали принуждать использовать. Вот и все вендоры.

Сэр, хорош воду лить. Я вам все технические проблемы обозначил: 16битный риалмодовый биос, та же УЕФИ в СММ + аппаратная эмуляция легаси. Если вам этого мало и охота на тему теорий заговоров поболтать - проблемы ваши. А в сухом остатке, биосы просто перешли в полноценный 32битный режим.

anonmyous ★★
()
Ответ на: комментарий от lenin386

В 64-х битный только. 32-х битный УЕФИ - нонсенс.

Почему нонсенс? ovmf-ia32 вполне себе существует и сейчас. А так-то да, согласен, в основном они уже все в 64битном.

Этим они убили 32-х битный x86, заодно.

Частично. 32битные проги всё ещё вполне себе работают в 64битных ОС. Да и зачем вам 32бит операционки сейчас, спустя более 20 лет после того, как 64битные процы прочно закрепились на рынке?

anonmyous ★★
()
Ответ на: комментарий от wandrien

Но разбираться с UEFI откровенно лень.

Я поразбирался. Обнаружил что если плата не умеет грузиться с nvme накопителя то uefi всё равно не поможет. Ну в смысле оно может помочь ровно также как и обычная загрузка с флешки каким-нибудь менеджером загрузки который уже умеет nvme. Кто кстати чем пользуется для таких случаев и как решает проблему неумения системных плат грузиться с nvme?

watchcat382
()
Ответ на: комментарий от X512

Всё это и в BIOS можно было засунуть. Но в UEFI это приняло более структурированную форму. Можно драйверы перечислить/сдампить и т.д.. В BIOS я так понимаю лютый велосипед у каждого вендора.

Да, это основная фишечка. Ну и спровоцировано это миниатюризацией электроники - нынче флешка биоса за копейки содержит много мегабайт, теперь тяжело отмазаться зачем мы пишем свой закрытый BIOS, оптимальный для нашей материнки, тяжело отмазаться от встраивания в стандарт.

lesopilorama
() автор топика
Ответ на: комментарий от anonmyous

Правда закрытым он быть не перестал.

Соответствие стандартам делает его во многом открытым. Теперь хотя-бы можно просматривать кучу разных внутренностей. Ясно, что ядро UEFI-компатибле firmware может быть закрытым на конкретной материнке и скорее всего будет, но начало всё равно хорошее. Да и в целом, важнее всего тут степень неуловимости джо.

lesopilorama
() автор топика
Последнее исправление: lesopilorama (всего исправлений: 1)
Ответ на: комментарий от lesopilorama

Соответствие стандартам делает его во многом открытым.

Это стандарты на внешние интерфейсы. Они и в легаси биосе были открытыми. Закрытость обеспечивается драйверами под недокументированное железо. И эта проблема никуда не девается и не денется в ближайшей перспективе.

anonmyous ★★
()
Ответ на: комментарий от anonmyous

Это стандарты на внешние интерфейсы. Они и в легаси биосе были открытыми.

Не было в старых биосах efivars и прочих там подобных штукарей и оформления загрузчиков по стандарту .efi в файловой системе…

И эта проблема никуда не девается и не денется в ближайшей перспективе.

Эта проблема не денется никуда ни в какое время никогда в будущем.

lesopilorama
() автор топика
Последнее исправление: lesopilorama (всего исправлений: 2)

Кто в сознательном возрасте застал конец нулевых, хорошо понимает, откуда взялся запрос на перекройку системы инициализации. В те времена BIOS-ы материнок (особенно серверных) превратились в такой переусложненный пипец, что страшно представить, каких усилий вендорам стоило их поддерживать.

Достаточно только представить, что творится внутри 4-мегабайтного бинарного блоба, написанного на ассемблере, и работающего прямо на bare metal без всяких HAL-ов.

UEFI более-менее привел в порядок этот хаос, попутно выбросив на мороз несколько набивших оскомину ограничений (типа таблицы разделов HDD).

quwy
()
Для того чтобы оставить комментарий войдите или зарегистрируйтесь.