Автор: lonesome [TSH/Digital Daemons]
Дата: 23.10.2003
Раздел: Разработка ОС
Сегодня в номере:
Здравствуйте, уважаемые подписчики! Сегодня, уважаемые подписчики, речь пойдет о творении ребят из обожаемого нами проекта GNU - загрузчике GRUB. GRUB, или Grand Unified Bootloader, способен загружать операционную систему с дискеты или жесткого диска, причем поддерживаются файловые системы ext2fs, ReiserFS, JFS, XFS, UFS, VSTa, MinixFS и старый добрый FAT (скажу по секрету - у меня систему(ы) грузит именно GRUB). Ну. насчет загрузки Linux, *BSD, HURD и т.п. - все понятно, а вот каким образом GRUB может быть полезен разработчикам операционных систем вообще и нам в частности? Посмотрев на название выпуска, вы догадаетесь, что GRUB - очень легкий способ создать загрузчик для своей собственной операционной системы (в отличие от "ручной" загрузки, а точнее загрузки "с нуля", чем мы занимались в выпуске номер 8). Очевидно, при использовании GRUB наша задача сводится к тому, чтобы создать исполняемый файл ядра операционной системы в подходящем формате (наилучший вариант - это ELF) и записать в загрузочный сектор дискеты загрузчик GRUB (разумеется, если мы хотим создать загрузочную дискету для нашей ОС). По точно такой же схеме можно осуществлять загрузку с жесткого диска и даже по сети (поддержка нужного сетевого адаптера встраивается в загрузчик при компиляции GRUB из исходников). В чем же выгода? Все дело в том, что мы, как разработчики операционной системы, можем предполагать, что изначально уже находимся в очень дружественной обстановке, что выражается в 32-битном защищенном режиме, 4-гигабайтном flat-адресном пространстве, нужном видеорежиме и прочих прелестях (и все это за нас сделал GRUB!). Нам не придется сталкиваться с ужасами реального режима, функциями BIOS, сложнейшей процедурой (:)) перехода в защищенный режим etc. Алгоритм создания загрузочной дискеты с GRUB'ом таков: дискета форматируется под нужную файловую систему, на ней создается директория /boot/grub, в которую помещаются файлы stage1 и stage2, а кроме того - файл загрузочного меню menu.lst, который может быть примерно такого содержания: Осталось разобраться с тем, что это за файл megaos.elf. Судя по названию, это файл ядра нашей ОС в формате ELF. Но это не просто ELF: для того, чтобы GRUB мог загрузить ядро системы, оно должно содержать так называемый multiboot-заголовок помимо обычного ELF-заголовка, который должен находиться в первых 8 килобайтах ядра и быть выровнен на границу двойного слова (4 байта).
За форматом multiboot-заголовка отсылаю интересующихся к Multiboot Specification, которую можно просмотреть, к примеру, набрав info multiboot
P.S. Один из промежуточных снапшотов Tyros/Neutronix имел в качестве загрузчика GRUB, но от него пришлось отказаться в связи с необходимостью при загрузке выполнить некоторые действия в реальном режиме (напомню, что GRUB "выбрасывает" нас сразу в защищенный). На этом, уважаемые подписчики, я прощаюсь, и как всегда напоминаю, что:
Главная новость: вестник низкоуровневого программирования lowlevel.ru, вопреки проискам недоброжелателей, жив, а значит и рассылка - тоже (судя по вашим письмам, немногие надеялись на наш выход из состояния комы :))
GRUB или Для Тех Кто Ищет Легких Путей
После этого запускается утилита grub-install в качестве параметра которой указывается нужный дисковод, например: grub-install /dev/fd0.
default 0
timeout 10
title MyMegaOS
kernel megaos.elf
Дискета готова!
/* main.c */
/* Заголовок multiboot */
asm("...");
asm("...");
...
/* Эта функция выполняется при старте ядра */
void main ()
{
...
}
http://www.lowlevel.ru - Сайт. Наш сайт :)
http://www.lowlevel.ru/articles/ - Архив всех выпусков рассылки (кроме того, его можно найти здесь)
http://www.lowlevel.ru/cgi-bin/yabb/YaBB.cgi?board=programming - Форум, в котором вы можете задавать любые вопросы, касающиеся низкоуровнего программирования
http://sf.net/projects/tyros/ - Открытая операционная система Tyros/Neutronix, разрабатываемая по материалам нашей рассылки
Желаю удачи!
Lonesome