我正在尝试使用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
目前,我正在使用一个shell脚本来编译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
我的目标是不必使用密件抄送,但可以继续运行
Bochs
.
到目前为止,最有希望的命令是:
gcc -Os -std=gnu99 -nodefaultlibs -nostdlib -ffreestanding -m16 -march=i386 -c -o kernel.o kernel.c