Я продолжал изучение языка assembly (nasm) и низкоуровнего программирования на языке C, пока не дописал простейший загрузчик, который работал на прерываниях BIOS и переводил процессор в защищенный режим. После этого я написал простое ядро на си и nasm, которое умело читать порт клавы (60h) и кидать значения оттуда в функцию си. Рассказывать, что было реализовано далее, нет смысла. Скажу только то, что работала моя ось без особых проблем и на qemu и на реальной машине с BIOS. И тут я познал боль. После попытки загрузки моего bootloader'a с ядром на моем новом ноутбуке с UEFI он не только отказвался работать с моей ос, но и даже не видел флешку. В данный момент расклад такой: я могу скомпилировать и загрузить простейшую efi-программу, типа:
#include <efi.h>
#include <efilib.h>
EFI_STATUS
EFIAPI
efi_main (EFI_HANDLE ImageHandle, EFI_SYSTEM_TABLE *SystemTable) {
InitializeLib(ImageHandle, SystemTable);
while(1);
return EFI_SUCCESS;
}
а так же примерно понимаю, что такое GPT и MBR. Есть ли возможность загрузить мой плоский bin-файл, или я все же потерял время зря, разрабатывая его?
P.S. бинарник компилиовался так:
nasm -f elf32 kernel.asm -o kasm.o
gcc -m32 -c kernel.c -o kc.o -fno-pie -fstack-protector
ld -m elf_i386 -T link.ld -o kernel kasm.o kc.o
objcopy -O binary kernel kernel.bin
nasm -f bin boot.asm -o boot.bin