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

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

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

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

Настройка GRUB

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

Загрузчик Simple OS

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

>set timeout=5
set default=0

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

menuentry "Test" {
    multiboot2 /test
    boot
}

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

Загрузчик Simple OS

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

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

Загрузчик Simple OS

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