Вторичен Boot Loader, dev64

Програмиране

Вторичен Boot Loader

Съдържание

Отговор. Boot Loader е с размер само 512 байта. В 512 байта можете да поберете прехода към защитен режим. В защитен режим функциите на BIOS за работа с хардуер вече не са налични. Преминаването към Boot Loader-e в защитен режим и зареждането на ядрото от диска няма да успее. Следователно за зареждане на големи ядра се използва допълнителен междинен bootloader, който работи в защитен режим. Boot Loader не зарежда ядрото, а междинен loader. Средният софтуер преминава в защитен режим, зарежда желаното ядро ​​от файловата система и прехвърля контрола върху него. Тъй като междинният товарач не е ограничен по размер до 512 байта, той може да бъде много по-функционален. В този случай ядрото на операционната система може да не е обикновен двоичен файл, а преместваем elf файл. В същото време междинният товарач може да бъде доста сложна програма с много възможности. Включително, той може да поддържа редица видове устройства за зареждане и файлови системи. И дори може да се добави поддръжка на графичен режим за красота. Наред с други неща, междинният товарач може да осигури средство за конфигуриране на ядрото или конфигуриране на режима на зареждане на операционната система.

Подобна схема с междинен буутлоудър е реализирана от GNU GRUB буутлоудъра. GNU GRUB се използва от GNU Linux, FreeBSD, NetBSD. Windows също използва многостепенна система за зареждане. Вижте ntldr.

В същото време има операционни системи с малко ядро, които не изискват двустепенно зареждане. 512-байтов Boot Loader е заобиколен, например QNX4 и Menuet OS. Очевидно това обяснява ограничението на размера на ядрото QNX4.

KolibriOS има много различни опции за зареждане, включително mtldr, което ви позволява да конфигурирате зареждане на KolibriOS в конфигурационните файлове на Windows ntldr.

Къде се съхранява междинният товарач? GRUB използва термина „зона за зареждане“ за това. Търсенето на този термин не даде полезна информация. За да намерите отговора на този въпрос, трябва да изровите GRUB документацията и източниците.

Друга възможност за зареждане на голямо ядро ​​е използването на опаковки. Ядрото е внедрено като саморазархивиращ се код. Не е необходимо да се разопакова изцяло. Частта може да бъде разопакована. Използвах опаковки, за да преодолея проблема с размера на ядрото в QNX4. В QNX4 ядрото съдържа виртуална файлова система, която е коренът на всички останали системи. В тази виртуална система можете да поставите обичайните изпълними програми, които ще бъдат стартирани при зареждане на ядрото. Ядрото съдържа в себе си и най-простата обвивка, която позволява изпълнението на най-простите скриптове. Това позволява да се добавят допълнителни драйвери към ядрото и т.н. В моя случай внедрих QNX4 стартиране от CD за последващо изтегляне на архивни данни от ftp. За целта добавих към ядрото драйвер за CD устройство, мрежови драйвери и други помощни програми. Но тъй като нямах достатъчно място за всички помощни програми, трябваше да опаковам всичко в един голям архив и да го разопаковам със собствения си разархиватор, също записан в ядрото. Разархивателят използва gzip библиотеката, за да разопакова архивните данни, компилирани в него като обикновена константа.

GRUB

Основната идея, популяризирана от GRUB, е да се приложи универсален буутлоудър за множество операционни системи, който поддържа спецификацията MultiBoot:

Спецификация на много зареждане

описва 3 конвенции:

1. Формат на ядрото на операционната система. Това е a.out или още по-добре формат на елфи. Първите 8 килобайта на ядрото трябва да съдържат специална структура, която описва редица флагове. Тази структура просто фигурира в горния пример. За повече информация относно структурата вижте примера.