
Загрузчик Simple OS
Доброго дня, уважаемые читатели. Начинаем ваять загрузчик для нашей Simple OS.
Последние приготовления
В этой статье мы будем использовать пакет о котором я еще не рассказывал. Этот пакет называется - xorriso. Предназначено данное ПО для создания iso образов. Конечно, его богатый функционал, в рамках специализации, я не буду задействовать полностью. Мне достаточно лишь возможности создавать CD-диск с GRUB.
Для создания загрузочного диска нужно подготовить файлы, создать структуру папок и собрать iso образ.
Настройка GRUB
Структура диска должна быть следующая:

Корневая директория называется - boot. Внутри располагается собранный файл ядра операционной системы и папка - grub, которая содержит специальный конфигурационный файл.
>set timeout=5
set default=0
menuentry "Simple OS" {
multiboot2 /boot/kernel.bin
boot
}
menuentry "Test" {
multiboot2 /test
boot
}
Выше показан простейший файл конфигурации grub. Я добавил второй пункт для того, чтобы продемонстрировать работу загрузчика. После сборки iso, перед запуском ядра, на экране отобразится картинка похожая на этот скриншот.

Подготовка загрузчика
Теперь я постараюсь применить те знания, которые получил в предыдущей статье - GRUB и Multiboot. Сначала нужно изменить загрузчик Simple OS так, чтобы он соответствовал спецификации.
section .multiboot_header
header_start:
dd 0xe85250d6
dd 0
dd header_end - header_start
dd 0x100000000 - (0xe85250d6 + 0 + (header_end - header_start))
dw 0
dw 0
dd 8
header_end:
section .text
bits 32
global start
start:
cli
mov esp, stack_space
done:
hlt
section .bss
resb 8192
stack_space:
Изменения необходимо прокомментировать. Теперь код загрузчика разбит на секции:
- .multiboot_header
- .text
- .bss
В первой секции располагаются данные для инициализации, так называемый заголовок загрузчика. Магическое число - 0xe85250d6- свидетельствует о приверженности спецификации multiboot 2. (Опять магия!!!). Следующий байт равен 0 и это показывает, что ядро будет запущено в защищенном режиме. О режимах адресации можно прочитать в статье: Бит, байт, адресация. Далее следует размер заголовка и контрольное число. Два этих параметра рассчитываются с помощью адресов меток.
Завершающий тег заголовка - это два слова(16 бит) означающих тип и флаги. В самом конце указан размер завершающего тега тоже в атрибуте размером в машинное слово.
Секция text содержит код старта ядра. В начале указано что теперь ядро работает в 32-битном режиме и отмечена его точка старта директивой - global.
Сборка образа и запуск Simple OS
Проведя все необходимые манипуляции связанные с компиляцией и копированием файлов в необходимые папки заранее подготовленной структуры, необходимо собрать образ. В терминале следует набрать такую команду:
grub-mkrescue -o ./simpleos.iso ./isofiles
На выходе я получил файл simpleos.iso. Команда grub-mkrescue входит в пакет xorriso. Образ готов. Теперь запустим его в эмуляторе с параметром -cdrom
qemu-system-i386 -cdrom simpleos.iso
После выбора операционной системы, ядро запускается в защищенном 32-битном режиме.

Картинки найдены в интернете или являются скриншотами процесса разработки.
Комментарии
Комментариев пока нет
Войдите, чтобы оставить комментарий