ulteam8

Загрузчик Simple OS

ПрактикаRusFjord

Доброго дня, уважаемые читатели. Начинаем ваять загрузчик для нашей Simple OS.

Последние приготовления

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

Для создания загрузочного диска нужно подготовить файлы, создать структуру папок и собрать iso образ.

Настройка GRUB

Структура диска должна быть следующая:

iso_files.png

Корневая директория называется - boot. Внутри располагается собранный файл ядра операционной системы и папка - grub, которая содержит специальный конфигурационный файл.

>set timeout=5
set default=0

menuentry "Simple OS" {
    multiboot2 /boot/kernel.bin
    boot
}

menuentry "Test" {
    multiboot2 /test
    boot
}

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

grub_menu.png

Подготовка загрузчика

Теперь я постараюсь применить те знания, которые получил в предыдущей статье - 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-битном режиме.

clean_screen.png

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

Комментарии

Комментариев пока нет

Войдите, чтобы оставить комментарий