代码之家  ›  专栏  ›  技术社区  ›  Brandon

连接gcc和ld86

  •  0
  • Brandon  · 技术社区  · 6 年前

    我正在尝试使用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
    
    0 回复  |  直到 6 年前