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)
Ответ на: комментарий от lenin386

Если бы так работал загрузчик мистера Билла Гейтса, он бы копался на помойках.

https://raw.githubusercontent.com/microsoft/MS-DOS/refs/heads/main/v4.0/src/BOOT/MSBOOT.ASM

Загрузчик мистера в своё время тоже много чего предполагал. И не всегда работал, как задумано, если предположения оказывались неверными.

; J.K. All we have to do is just read in sectors contiguously IBMLOADSIZE
; J.K. times.  We here assume that IBMLOAD module is contiguous.  Currently
; J.K. we estimate that IBMLOAD module will not be more than 3 sectors.
; We load in the first directory sector and examine it to make sure the the
; BIOS and DOS are the first two directory entries.  If they are not found,
; the user is prompted to insert a new disk.  The directory sector is loaded
; into 00500h
vM ★★
()
Ответ на: комментарий от lenin386

Он, кстати, не работает. Я его собрал, исправив синтаксические ошибки. И он - не работает.

Ну кривой значит ты какой-то, что в целом смыкается с тем, как ты тут полчаса теоретизируешь, а потом оказывается что ты всё наврал)

Ну и мы не наблюдаем видеопруфа о том, как оно там у тебя не работает, как ты взял дискету и что-то там попробовал на реальном нормальном железе 486 например.

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

Их нет, потому что вместить нормальную поддержку FAT в 446 байт - не возможно.

По предыдущему опыту общения с тобой, можем предполагать, что ты нам напе**дюнькать мог немного.

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

Не работать и неправильно собираться он может потому, что компилятор новый по-другому работает и обрабатывает директивы. Возможно. Возможно, ещё что-то. Может, какие ключи ему теперь стали нужны, лень разбираться. А теоретизирую я абсолютно правильно.

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

А чё там тестировать, он бинарь 390 байт собрал. Это не может работать.

Ну в общем чо, поздравляем с тестированием!

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

Не работать и неправильно собираться он может потому, что компилятор новый по-другому работает и обрабатывает директивы. Возможно. Возможно, ещё что-то. Может, какие ключи ему теперь стали нужны, лень разбираться. А теоретизирую я абсолютно правильно.

Возможно. Да правильно ты теоретизируешь, вопросов нет. Кластер не то же самое, что сектор и надо по-хорошему прочитать число секторов в кластере. В интернетах немного почитал, там утверждают что на дискетах 1.44 размер кластера был ВСЕГДА равен 1, потому что это самое оптимальное для такого объёма. Ну в общем-то я про дискеты эти изначально и рассказывал тут, на носителях с другим размером кластера я бы возможно и проиграл. Но сделано было под дискеты, да. Хрен знает, возможно пойти достать 1 дополнительный сектор и вычитать инфу о размере кластера так же бы влезло в эти 512 байт, не проверял. К демо-сцене отношения никакого не имею, я просто сказал, что если бы этот код писали демо-сценеры, а не какой-то рандомное быдло типа меня, которое вообще ни разу не элита, то они бы в эти 512 байт запихали и не такое ещё!

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

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

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

В интернетах немного почитал, там утверждают что на дискетах 1.44 размер кластера был ВСЕГДА равен 1

Херню в интернетах пишут. mkdosfs -F12 -s4 /dev/fd0. Абсолютно валидная система, под дисяточкой монтируется, работает.

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

Херню в интернетах пишут. mkdosfs -F12 -s4 /dev/fd0.

Валидная, но бессмысленная. Поэтому с вероятностью 1 её не будет в жизни никогда.

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

Смысл можно найти во всём. Например, при таком раскладе, на FAT приходится всего 3 сектора, и на дискете свободно целых 1.39Mb (1 462 272) вместо стандартных 1.38mB (1 457 664 ). Так то. Демосценеры оценят, сколько гритингс ввалить можно.

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

ну, FAT32 просто очень простой формат. я не думаю, что он прямо жёстко привязан именно к мелкософту. он много где используется именно из-за простоты. а вот Windows PE - это действительно именно мелкософтовский прикол, ни у кого подобного больше нет. и я бы не сказала, что это прямо удачное решение.

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

ну, FAT32 просто очень простой формат. я не думаю, что он прямо жёстко привязан именно к мелкософту. он много где используется именно из-за простоты. а вот Windows PE - это действительно именно мелкософтовский прикол, ни у кого подобного больше нет. и я бы не сказала, что это прямо удачное решение.

Много что много где используется. По факту в любом ноуте сейчас Windows PE используется как формат .efi. Так что, Win PE - тоже «много где». Аргументы про «много где» и «удачное» - про разное и «удачное решение» субьективное суждение. По факту обе сущности - чисто майкрософт. Кто придумал, того и сущность. Тут как на войне, кто раньше встал того и тапки, про удачность пишет победитель.

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

ну, тогда и колесо тоже чей-то «копирайт» :)

просто FAT появился довольно давно, гораздо раньше мелкософта. а они только придумали расширение FAT32. и оно использовалась в разных системах, не только в мелкософтовских.

а вот Windows PE использовался только у мелкософта. поэтому его выбор в UEFI странен.

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

а вот Windows PE использовался только у мелкософта. поэтому его выбор в UEFI странен.

А там не настоящий Windows PE причём. Там какой-то огрызок настоящего header, который типа даже винда не поймёт - что-то в таком духе, какой-то полукостыль. Типа формально настоящий Windows PE, но какое-то полукосое, настолько что там от Windows PE только формальное ему соответствие без кучи обязательных в винде полей.

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

просто FAT появился довольно давно, гораздо раньше мелкософта

Не неси чепухи. FAT, точнее, FAT8, придумал лично мистер Билл Гейтс.

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

ну, тогда это и не он, наверное. просто некий аналог.

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

ой! зайди в википедию и просветись. FAT придумали аж в 1977 году. и придумали его люди, которые к Гейтсу не имели ни малейшего отношения. и даже FAT16 придумал не мелкософт. как-то так. хотя в DOS он использовался.

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

Билл Гейс в 1977 году уже был директором фирмы и миллионером.

The original FAT file system (or FAT structure, as it was called initially) was designed and implemented by Marc McDonald,[17] based on a series of discussions between McDonald and Bill Gates.[17]

Это из твоей википедии, которую ты дальше первого абзаца не читала.

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

Это настоящий PE. Почему его Венда должна понимать, если там вендовых вызовов нет?

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

Работая в SCP над 86-DOS, первый вариант FAT12 придумал Тим Патерсон, под впечатлением от FAT для автономного Microsoft BASIC для 8086, который SCP по лицензии продавала вместе со своей S-100 платой на 8086.

Затем Microsoft и Тим Патерсон расширили FAT12 по хотелкам IBM в ходе разработки IBM PC DOS на основе 86-DOS.

FAT16 разрабатывалась в середине 1980-х для поддержки бОльших дисков в MS-DOS по многочисленным просьбам OEM.

vM ★★
()

изучайте UEFI

Дальше что, реестр виндошс предложишь изучать?
UEFI это оффтопик поделка майкрософта. Сервера с отсталым dos-bios предлагать было не вариант, интел с майкрософтом посмотрели на сановский OpenFirmware ну и сделали так же, но на виндовый лад - PE-MZ формат бинариев, файловая система фат32, петушиный шелл с обратными слэшами, официальный EDK только под винду итд итп.

Единственное что в нем своего это возможность запускать программы и программы-драйверы, по сути оно как дос с той лишь разницей что в досе командная строка была базовой, а здесь шелл сугубо опциональная программа производители его не включают, зато включают драйвер мышки (который захардкожен на работу с экраном 800x600) очень нужная вещь для фирмвари, как и gif-анимации и многоговорящие опции вроде:

«Функция ABV»
(предназначена для ОС не поддерживающих режим ABV)
Авто/Разрешить/Никогда

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

Хорошо, что на тот момент до копирайтинга не додумался никто, а по современному закону права на изобретение колеса уже давно протухли :)

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

Хорошо, что на тот момент до копирайтинга не додумался никто

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

Поэтому копирайтинг ещё никогда не являлся проблемой ни для кого из простых людей. Являлся для корпораций, которые в юридическом поле вынуждены биться в судах друг с другом, ну иногда бывают эксцессы задавливания в судах даже обычных людей, но это в рамках программы запугивания остальных, чтобы перестали воровать. Но это не работает, воруют всё равно: «ахаха неудачника засудили, не смог промолчать что винду украл дурачок».

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

И ОСь на таких машинах работает в ring1, ага. В ring0 крутится вот оно самое.

UEFI да, работает в ring0, но дальше он передаёт управление OS в том же ring0 и выходит из игры целиком. Игры между ring0 / ring1 нет, да и код OS не понял бы с какого хрена он ring1 и наверное бы просто попадал «по ассертам».

Если ты про гипервизоры, то там придумали ring -1 («root mode»).

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