Я пытаюсь использовать gcc для компиляции и связи с ld86, чтобы я мог в конечном итоге запустить код на bochs.
В настоящее время он работает с bcc, но я хотел бы использовать gcc по понятным причинам..
Я пытался пути достижения этого.Сначала я попытался скомпилировать его с помощью gcc.Затем соберите его с as86, чтобы создать объектный файл.Наконец, связывание с ld86.Это дало мне много ошибок в процессе сборки.Это выглядело так:
00001 00000000> .file "kernel.c"
***** illegal label.............................................^
00004 00000000> .type main, @function
***** opcode expected...........................................^
***** illegal label.............................................^
00007 00000000> .cfi_startproc
***** illegal label...................................................^
(очень длинная ошибка)
Далее я попытался использовать gcc для создания объектных файлов.Однако при запуске ld86 я получаю
ld86: kernel.o has bad magic number
В настоящее время я использую сценарий оболочки для компиляции с bcc.Это выглядит так:
#!/bin/sh
# create empty disk image
dd if=/dev/zero of=floppya.img bs=512 count=2880
# assemble bootloader
nasm bootload.asm
# add bootloader to disk at sector 0
dd if=bootload of=floppya.img bs=512 count=1 conv=notrunc
# compile kernel
bcc -ansi -c -o kernel.o kernel.c
# assemble kernel
as86 kernel.asm -o kasm.o
# link kernel
ld86 -o kernel -d kernel.o kasm.o
# add kernel to disk at sector 259
dd if=kernel of=floppya.img bs=512 conv=notrunc seek=259
Моя цель - не использовать bcc, но иметь возможность работать на Bochs .
Пока самая многообещающая команда:
gcc -Os -std=gnu99 -nodefaultlibs -nostdlib -ffreestanding -m16 -march=i386 -c -o kernel.o kernel.c