Ако архитектурата на вашата собствена ОС е същата като тази на работещата ви ОС, тогава не се нуждаете от нов компилатор, същото, което вече имате, ще свърши работа. Все пак може да имате нужда от персонализиран binutils
, но това зависи от формата на изпълнимите файлове, от които вашата собствена ОС се нуждае.
Това, което направих за моята собствена операционна система играчка, е да я накарам да разбира двоичните файлове на ELF: това е абсурдно лесен формат за зареждане и стартиране. И по този начин можете да използвате стандартния binutils
на вашата ОС. Просто трябва да свържете вашите изпълними файлове с персонализиран скрипт за свързване, а не да се свържете с която и да е библиотека на Linux.
Но имайте предвид, че много хора считайте това за не толкова добра идея, но може да ви задържи известно време.
Моята команда за компилатор изглежда така:
%.o: %.c
gcc -c -o $@ -ffreestanding -fno-stack-protector -mpreferred-stack-boundary=2 -Os -g -Wall $<
И моята команда за свързване:
%.myexe: %.o
ld -o $@ -T myexe.ld $^ `gcc -print-libgcc-file-name`
За справка, скриптът за свързване е myexe.ld
:
ENTRY(main)
SECTIONS
{
.text :
{
*(.text)
}
.data :
{
*(.data)
}
.rodata :
{
*(.rodata)
}
.bss :
{
*(.bss)
}
}
person
rodrigo
schedule
16.07.2013