Как скомпилировать простой исполняемый файл multiboot2 для «голого железа»?

Я хочу начать писать ядро ​​ОС, а потом нашел документ введение спецификации multboot2.

Есть три примера файлов кода с именами boot.S, kernel.c и multiboot2.h, принадлежащие ветке multiboot2 проекта grub.

Во-первых, я попытался скомпилировать и связать код с некоторыми параметрами (используя i686-elf-gcc), такими как -nostartfiles, -nodefaultlibs и -ffreestanding, но qemu показал мне, что формат был ошибочным.

А потом я нашел файл с именем Makefile.am, и параметр компилятора в этом файле — -fno-builtin -nostdinc -O -g -Wall, а параметр компоновщика в этом файле — -nostdlib -Wl,-N -Wl,-Ttext -Wl,80100000 -Wl,--build-id=none.

Итак, я собрал ядро ​​с указанными выше параметрами, и qemu начал загрузку ядра (qemu-system-i386 -kernel kernel). Но ядро ​​тут же попало в бесконечный цикл.

Итак, я клонировал ветку проекта и использовал gnulib для создания некоторых файлов и запустил make, но получил несколько ошибок.

Я не показываю здесь сообщение об ошибке, потому что, читая документ, я вижу, что мне нужно просто преобразовать boot.S в двоичный файл и вставить его перед скомпилированным и несвязанным файлом ядра (kernel.o), не так ли? это? Как это сделать?


person linux40    schedule 21.11.2016    source источник


Ответы (1)


Это тривиально. Вот как настроить исполняемый файл multiboot2 на «голом железе» с помощью grub.

https://os.phil-opp.com/multiboot-kernel/

Попробуйте запустить пустой исполняемый файл с помощью -kernel, и он потерпит неудачу.

Попробуйте запустить ISO-образ, содержащий grub, и он будет работать.

person Community    schedule 22.09.2017