Для сборки нужны migw gcc (я компилирую gcc 4.2.1) fasm, binutils , make и 7z если нужна упаковка в .gz. Сборка простая - открывается консоль cmd и в ней выполняется make. Или простой батник
@erase lang.inc
@echo lang fix ru >lang.inc
@make
@pause
если все нормально то получится примерно такой лог
Код:
as -o bin/export.obj core/export.asm
gcc -c -O2 -I include/ -fomit-frame-pointer -fno-builtin -o bin/init.obj core/init.c
gcc -c -O2 -I include/ -fomit-frame-pointer -fno-builtin -o bin/mm.obj core/mm.c
gcc -c -O2 -I include/ -fomit-frame-pointer -fno-builtin -o bin/slab.obj core/slab.c
gcc -c -O2 -I include/ -fomit-frame-pointer -fno-builtin -o bin/heap.obj core/heap.c
gcc -c -O2 -I include/ -fomit-frame-pointer -fno-builtin -o bin/dll.obj core/dll.c
gcc -c -O2 -I include/ -fomit-frame-pointer -fno-builtin -o bin/spinlock.obj core/spinlock.c
fasm.exe boot/boot.asm bin/boot/boot.obj
flat assembler version 1.67.15 (1373667 kilobytes memory)
3 passes, 7240 bytes.
fasm.exe boot/start.asm bin/boot/start.obj
flat assembler version 1.67.15 (1373667 kilobytes memory)
4 passes, 851 bytes.
ld -shared -s -Map kernel.map --image-base 0x100000 --file-alignment 32 -T ld.x -o kernel.mnt kernel.obj bin/export.obj bin/init.obj bin/mm.obj bin/slab.obj bin/heap.obj bin/dll.obj bin/spinlock.obj bin/boot/boot.obj bin/boot/start.obj
7z a -tgzip kernel.gz kernel.mnt
7-Zip 4.42 Copyright (c) 1999-2006 Igor Pavlov 2006-05-14
Scanning
Updating archive kernel.gz
Compressing kernel.mnt
Everything is Ok
Ядро может выводить отладочный лог в COM1. Это очень удобно если запускать в эмуляторе. Для этого надо открыть makefile и добавить -DCONFIG_DEBUG в строку "CFLAGS =" и перекомпилировать ядро. Для запуска в qemu указать ключ -serial file:путь_к_лог_файлу. Для bochs отредактировать строку в bochsrc.txt "com1: enabled=1, mode=file, dev=путь_к_лог_файлу". На реальном железе такое ядро будет грузиться очень медлено потому что вывод в СОМ занимает много времени.
P.S. Я выложу новую сборку когда доделаю загрузку PE программ. Примерно через неделю.