Rambler's
Top100

Разработка операционных систем. Выпуск 21

Автор: lonesome [TSH/Digital Daemons]
Дата: 23.10.2003
Раздел: Разработка ОС

ПРЕДЫДУЩИЙ ВЫПУСК      СЛЕДУЮЩИЙ ВЫПУСК

Разработка операционных систем

Выпуск 21 от 2003-10-23

Сегодня в номере:

Intro

Здравствуйте, уважаемые подписчики!
Главная новость: вестник низкоуровневого программирования
lowlevel.ru, вопреки проискам недоброжелателей, жив, а значит и рассылка - тоже (судя по вашим письмам, немногие надеялись на наш выход из состояния комы :))

GRUB или Для Тех Кто Ищет Легких Путей

Сегодня, уважаемые подписчики, речь пойдет о творении ребят из обожаемого нами проекта 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, который может быть примерно такого содержания:


default 0
timeout 10
title MyMegaOS
kernel megaos.elf

После этого запускается утилита grub-install в качестве параметра которой указывается нужный дисковод, например: grub-install /dev/fd0.
Дискета готова!

Осталось разобраться с тем, что это за файл megaos.elf. Судя по названию, это файл ядра нашей ОС в формате ELF. Но это не просто ELF: для того, чтобы GRUB мог загрузить ядро системы, оно должно содержать так называемый multiboot-заголовок помимо обычного ELF-заголовка, который должен находиться в первых 8 килобайтах ядра и быть выровнен на границу двойного слова (4 байта).

Простой способ создать заголовок - разместить его прямо в секции кода. Это может выглядеть примерно вот так:

/* main.c */

/* Заголовок multiboot */
asm("...");
asm("...");
  ...


/* Эта функция выполняется при старте ядра */
void main () 
{
  ...
}


За форматом multiboot-заголовка отсылаю интересующихся к Multiboot Specification, которую можно просмотреть, к примеру, набрав info multiboot

P.S. Один из промежуточных снапшотов Tyros/Neutronix имел в качестве загрузчика GRUB, но от него пришлось отказаться в связи с необходимостью при загрузке выполнить некоторые действия в реальном режиме (напомню, что GRUB "выбрасывает" нас сразу в защищенный).


На этом, уважаемые подписчики, я прощаюсь, и как всегда напоминаю, что:

lonesome AT lowlevel DOT ru - мой почтовый ящик, который с нетерпением ждет ваших писем в любое время дня и ночи
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



[Главная] [Другие статьи] [Обсудить в форуме]
©2003-2004 Lowlevel.RU

Rambler's Top100