Я хочу начать писать ядро ОС, а потом нашел документ введение спецификации 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
), не так ли? это? Как это сделать?