LINUX.ORG.RU

Хорошая документация по EFI/UEFI/MBR/GPT/CSM и Grub

 , ,


1

2

Посоветуйте пожалуйста, чтобы по полочкам было разложено, а то какой-то сумбур вокруг всего этого в голове. Кажется в до-uefi-ные времена примерно представлял себе все, а теперь, честно признаться каша какая-то в голове.

Почитаешь и вроде понятно, а к примеру, через некоторое время уже не очень понимаю, куда надо ставить Grub при установке Linux Mint на внешний носитель (при наличии внутренних), чтобы система загружалась после этого (и как оно зависит от legacy или не legacy при этом), а то ведь почему-то тупо не хочет, пока не перебрал кучу вариантов, еще и с флагом boot и отдельным разделом на диске и каким-то шаманством оно заработало у меня, отдал человеку, а теперь точно вспомнить не могу.

★★★★★

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

Ответ на: комментарий от anonymous

Спасибр. Это для собственно груба кое-что. Но видимо надо, чтобы еще и предельно ясно было расписано как работает uefi, куда и как и почему суются при этом загрузчики и почему оно важно даже в режиме совместимости.

Вообще в идеале хотелось бы увидеть описание как современный комп загружается. Вот буквально по пунктам.

1. Процессор после включения питания находится в таком-то режиме. Оттуда-то считывается код.

2. Процессор переводится в какой-то другой режим.

xx. Считывается код загрузчика с флеш-памяти.

xx2. Считывается код с области на диске

и все такое. Раньше было проще http://www.about-pc.narod.ru/part5/bios2.html

После включения питания или нажатия кнопки Reset у компьютера на адресной шине системной платы аппаратно устанавливается адрес точки входа в программу BIOS, которая в момент старта находится в самых старших ячейках адресуемой памяти. Например, в процессорах 8086/8088 по возникновении сигнала RESET прекращаются все текущие процедуры, а по окончании действия этого сигнала управление передается инструкции по адресу 0FFFF0h, в процессорах 386 — по адресу OFFFFFFOh и т. д.

Частично это вроде и сейчас в принципе так.

В итоге, чтобы скрупулезненько повествование дошло до считывания загрузчика (grub2, хотя бы) с диска с объяснением почему и откуда и как работает и на что это влияет и почему так влияет, а не иначе. Разумеется, для современных систем с этим всем uefi.

Такие доки вообще в принципе есть?

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

Может показаться нытьем, но реально проблема: я обнаружил, что на самом деле НЕ ПОНИМАЮ, как современный комп загружается и что делает при этом. Какие-то обрывки сведений при этом.

Вот в доuefi-шные времена с традиционной MS-DOS партитицией, хотя оно и тоже временами было запутано, но по крайней мере у меня была полная ясность, совсем уже мелкие частности мог и не знать, но в общем и целом все понятно было.

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

Тебе нужны доки о том, как прошивка устроена внутри или о том, как прошивка взаимодействует с ОС?

После включения питания или нажатия кнопки Reset у компьютера на адресной шине системной платы аппаратно устанавливается адрес точки входа в программу BIOS, которая в момент старта находится в самых старших ячейках адресуемой памяти. Например, в процессорах 8086/8088 по возникновении сигнала RESET прекращаются все текущие процедуры, а по окончании действия этого сигнала управление передается инструкции по адресу 0FFFF0h, в процессорах 386 — по адресу OFFFFFFOh и т. д.

Вот это вот никуда не делось, хоть BIOS, хоть UEFI.

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

Тебе нужны доки о том, как прошивка устроена внутри или о том, как прошивка взаимодействует с ОС?

В общих чертах как внутри и как с ОС взаимодействует. Просто, чтобы не шаманить, не пользоваться слепо «заклинаниями» пропиши то туда-то, а четко понимать, что происходит с загрузкой в каких случаях.

Вот это вот никуда не делось, хоть BIOS, хоть UEFI.

Наверное да, по крайней мере, пока процессоры не откажутся совсем от x86 real mode, вроде уже планируется со следующего года.

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

Да кстати забавно, xp уже на новом железе не завести, а они для загрузчика и каких то там мифических банковских дововых программ тянут real mode до сих пор.

anonymous
()

Если знаешь английский, то Генту в зубы и вперёд. На мой взгляд, это единственный «быстрый» и качественный способ изучения. Они очень общительные ребята, по крайне мере были пару лет назад, могут поделиться корректной информацией, а если ты умеешь спрашивать, то это уж наверняка случится. Насчёт остального, то официальная документация от Интел тебе в помощь, сам найдешь.

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

Попробую конечно. Просто надеялся, может уже есть такое описание. По объему, чтобы по полочкам разложить, это наверное должно быть небольшой книгой или брошюрой страниц на 100.

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

Конечно я этого не сделаю: и компетенции не хватит и трата времени лично для меня наверное почти зряшной будет, но этак небольшая мечта, что похулиганить бы и используя инфу из свободных драйверов для линукса написать драйверах на XP, чтобы поставить на современное железо. XP интересна, что еще не требовалось подписи драйверов, а с некоторыми хаками она видит и использует в PAE режиме и более 4Гб памяти.

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

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

Вообще, как-то пусто стало с нормальной такой литературой. В 90-х была, в 2000-х еще была, хотя и мало, сейчас такое ощущение, что или совсем для хомячком книжки или суконным языком (и на английском конечно) скучные доки по отдельным аспектам от производителей и куски по форумам.

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

Просто

В общих чертах как внутри

и

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

— две большие разницы.

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

Вообще, как-то пусто стало с нормальной такой литературой. В 90-х была, в 2000-х еще была, хотя и мало, сейчас такое ощущение, что или совсем для хомячком книжки или суконным языком (и на английском конечно) скучные доки по отдельным аспектам от производителей и куски по форумам.

Да.

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

Мне кажется, что такой книги/брошюры нет. А если бы и была, то это точно не сто страниц. А была ли такая книга востребована? Не проще читать код и документацию?

anonymous
()
Ответ на: комментарий от praseodim

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

Это тебе к разработчикам ReactOS, им как раз такое надо. Но инфа из драйверов для линукса пригодится только косвенно: слишком разные среды.

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

Я думал второе логически из первого вытекает.

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

Это тебе к разработчикам ReactOS, им как раз такое надо.

А у них уже можно на реальном железе ставить драйвера для WinXP и они будут работать?

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

Не все, увы. Там сейчас главный затык — с USB, из-за которого просто доустановить на развёрнутый на реальном железе реактос любой файл это отдельное веселье (в виртуалке проще). Если будет желание, пообщайся с ними, затея-то интересная.

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

0. Современный ПиСи - это не одна, сразу несколько параллельно работающих вычислительных систем. Основная - x86 intel cpu, а вокруг него всякая embedded обслуга. Всё, что не x86 - огорожено от тебя подписанными прошивками.
1. Процессор x86 включает процессор Intel ME на чипсете. Прочитывается ROM, колдует с электрикой, загружает встроенный ROM микрокода. Примерно что из себя представляет микрокод можно послушать тут. После этого наступает x86.
2. Процессор загружает прошивку UEFI с SPI - отдельная флешка на материнке. Проверяется её подпись и передаётся управление. Микрокод заменяется апдейтом, прошитым в UEFI. Происходит POST проверки, инициализация периферии и запуск встроенных приложений. Приложения имеют тот же формат, что и файлы в папке EFI загрузчика, но просто записаны на встроенную флешку. Позволяют читать разные ФС, например. UEFI и приложения написан на обычном C/C++ и скомпилирован в x86_64, обычно на базе полуотрытых исходников TianoCore. Про структуру прошивки можно послушать тут.
3. Когда все девайсы проинициализированы, запускается поиск загрузочный партиций. Ищется FAT32 с типом партиции «UEFI System», внутри него ищут приложения внутри папки EFI. Приложение - это просто статический x86_64 бинарь в нужном формате, который вместо сисколов может использовать UEFI API, втч предоставляемые другими UEFI приложениями. Помимо автонайденных приложений обычно можно ещё указать имя + путь к файлу руками в Bios Setup или через UEFI variables (тулзой efivar). Они сохраняются в NVRAM на материнке.
4. Ну а дальше читается ядро, initramfs, ещё раз апдейтится микрокод и наступает ring 3. Это если на десктопе, на сервере перед этим обычно ещё type-1 гипервизор загружается.

Как то так я себе понимаю.

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

Если расписывать всю инициализацию, то это очень долго. Статья в wiki.gentoo не очень. Для uefi достаточно знать про загрузочные записи, ESP, efifs(или как там её). Grub сам находит параметры установки, или явно задать. Но для стационарной системы промежуточный загрузчик даже не так нужен. Когда сам искал, то быстро нашёл всё. В теории всё просто было, но тогда были сырые инструменты и прошивки. Сейчас лучшие, и доступ к переменным стабилизировался, и параметры проще передаются.

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

Огромное спасибо!

Как-то существенно более понятно стало, по крайней мере, заданы направления в которых порыться для большей понятности по отдельным вопросам.

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

Когда все девайсы проинициализированы, запускается поиск загрузочный партиций. Ищется FAT32 с типом партиции «UEFI System»,

Это если UEFI-режим? Меня смущает, что даже в Legacy, такое ощущение, что не просто первому подходящему (с флагом boot у раздела) MBR передается управление, а какого-то хрена нужно еще наличие короткого Bios boot раздела . Или нужно только для GPT, чтобы с больших дисков стартовать?

И правильно я понял, что приложения на флешке (внутри материнки которая) uefi стартуют в любом случае legacy там или не legacy.

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

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

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

BIOS boot раздел нужен на GPT для legacy загрузчиков, которые не влазят в нулевой сектор(почти все). Т.е. Это не про UEFI. Они обычно пытались влезть в зазор между нулевым сектором и первым разделом, который появлялся из-за выравнивания.

В GPT нет boot флагов, а если видишь, то это тебе программа для совместимости показывает.

UEFI ищет по стандартным путям, но это сделано больше для переносных носителей. Там не нужно указывать ничего. Лишь бы был загрузчик на, вроде, первом разделе, с читаемой ФС, по стандартному пути. Но обычно загрузчики прописываются в переменные, где указывается guid esp, путь и параметры. Но эти записи могут терятся, поэтому и по дефолтному пути стоит что-то положить.

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

с флагом boot у раздела)

Флаг нужен только для windows / dos загрузчиков в МБР, т.к. в первых 466 байт у загрузчиков microsoft находится код, который умеет искать активный раздел на загрузочном диске и далее считывать с этого раздела основной загрузчик.

Так же некоторые кривые bios тоже хотят этот флаг и даже не будут искать загрузчики, обычно это lenovo и hp.

хрена нужно еще наличие короткого Bios boot раздела

Вы ссылку на Gentoo wiki открывать и читать пробовали? Этот раздел нужен только для загрузчика grub в случае если вы на gpt разметку ставите legacy версию загрузчика grub. В случае mbr разметки вторая часть загрузчика (stage2) встраивается в сектора с 1 по 2047, а в случае gpt разметки нужен как раз таки этот раздел, что бы загрузчик туда встроил вторую часть своего кода.

В случае же efi версии grub2 все уже находится в efi образе загрузчика.

Объясните как вы так через одно место читаете нормально изложенный материал?

anonymous
()
Ответ на: комментарий от praseodim

Legacy это просто надстройка над UEFI, которая иным способом ищет точку входа на диске (MBR) и перед передачей управления переводит процессор в 16-битный режим с DOS-like стандартами прерываний.
UEFI режим ищет GPT разделы FAT32, а далее просто передаёт управление бинарю EFI/BOOT/BOOTX64.EFI, который линкуется как обычный PE32 бинарь по стандарту UEFI application. Можно даже вообще грузить без загрузчика, если ядро собрать в режиме EFISTUB (образ ядра, запакованный в PE32 бинарь).
Через EFI shell или EFI vars (редактируются через bios setup или операционную систему тулзой efivar) можно указать явно - с какого партишна какой бинарь грузить. Автоматика иногда капризничает и не находит автоматом, да.
Ах, да. На FAT32 раздел с загрузчиком ещё советуют навешивать GPT Type: EFI System. GPT partition type - это тип ФС, в данном случае означает «FAT с загрузчиком».

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

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

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

ESP, вроде, и с другой фс может быть. Но да, обычно только драйвер для FAT есть.

Вот с этим типом раздела обыно и ассоциируется boot флаг, для совместимости.

В gentoo сейчас нужно перемонтировать efifs в rw для изменений. А если никак записи не меняються, то только по стандартным путям ложить.

Для изменения записей я использую efibootmgr, но systemd что-то свой мутит.

Явное указание ещё правильнее тем, что можно явно указать параметры и initrd.

ASUS'у у меня, кстати, крышу сносит от дуалбута с win7. Получается какой-то bootloop, пришлось загрузчик линукса аж на флешку тогда переносить.

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

Например, при установке системы на внешний, подключенный к usb диск, при наличии нескольких систем на основном hdd.

В этом случае при установке debian вообще не ставьте загрузчик, а потом загрузитесь с LiveCD / LiveUSB в efi режиме, сделайте chroot и руками поставьте efi версию загрузчика без прописывания её в память efi и переименуйте efi файл загрузчика в bootx64.efi.

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

bootx64.efi

Вредные советы. Можно как запасной вариант.

А донастроить стоит сразу из установщика, если там выход в шелл не порезали.

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

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

Спасибо, буду читать дальше. Может еще вопросы появятся.

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

Чем это он вредный? Установщик debian положит файл grub.efi или как-то так. С внешнего накопителя без создания соответствующей записи в efivars или вызове этого efi файла из другого efi загрузчика загрузиться не получится.

Вот и нужно, что бы гарантированно грузиться в efi режиме со съёмного накопителя нужно переименовать efi файл в bootx64.efi или bootia32.efi.

А лучше взять efishim и уже его efi файл соответствующей архитектуры переименовать а bootx64.efi или bootia32.efi, а efi файл grub оставить как есть.

А по поводуч, что на переносном нужно использовать старый загрузчик, ну это тоже уже по желанию. В случае переименовывания файл загрузчика или efishim все будет нормально грузиться и в efi режиме.

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

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

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

boowai ★★★★
()

литературу вам будет найти не просто но думаю она есть

KlubanSasha
()
Ответ на: комментарий от praseodim

К слову, для будущих поколений, пожалуйста, не поленитесь собрать все ссылки в кучу, и написать хотя бы краткий внятный итог своим изысканиям. Здорово, если со ссылками на какую-то документацию/литературу в какой-нибудь Mega, например.

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.