0

基本的な OS を作成しましたが、これはまだ実際には何もしていませんが、qemu でテストしたいと考えています。しかし、ld-linker の出力ファイルを qemu (iso か何か?) で動作させるには、何をしなければなりませんか?

これは私のリンカースクリプトです:

OUTPUT_FORMAT("binary")
ENTRY(start)
SECTIONS
{
    .text 0x00100000:
    {
        code = .; _code = .; __code = .;
        *(.text)
        . = ALIGN(4096);
    }
    textEnd = .;

    .data :
    {
        data = .; _data = .; __data = .;
        *(.data)
        . = ALIGN(4096);
    }
    dataEnd = .;

    .bss :
    {
        bss = .; _bss = .; __bss = .;
        *(.bss)
        . = ALIGN(4096);
    }
    bssEnd = .;

    end = .; _end = .; __end = .;
}

boot.s: (ASM)

[BITS 32]

MBOOT_PAGE_ALIGN    equ 1 << 0
MBOOT_MEM_INFO      equ 1 << 1
MBOOT_AOUT_KLUDGE   equ 1 << 16
MBOOT_MAGIC equ 0x1BADB002
MBOOT_FLAGS equ MBOOT_PAGE_ALIGN | MBOOT_MEM_INFO | MBOOT_AOUT_KLUDGE
CHECKSUM    equ -(MBOOT_MAGIC + MBOOT_FLAGS)
STACK_SIZE  equ 0x1000

[global start]
[extern main]
[extern textEnd]
[extern dataEnd]
[extern bssEnd]

entry:
    jmp start

align 4, db 0
mBootHeader:
    dd MBOOT_MAGIC
    dd MBOOT_FLAGS
    dd CHECKSUM
    dd mBootHeader
    dd entry
    dd dataEnd
    dd bssEnd
    dd entry

start:
    call main
    cli
    hlt

以下のように全体をまとめました。

$ nasm -f aout boot.s -o boot.o
$ gcc -c kernel.cpp -ffreestanding -nostdlib -fno-builtin -fno-rtti -fno-exceptions -m32
$ ld -T link.ld -o kernel.bin boot.o kernel.o -melf_i386

これはすべてエラーなしで機能しますが、問題はqemuで起動する方法だけですか? 出力ファイルは実行可能ですが、もちろんオペレーティング システムであるため Linux では実行できません。

4

1 に答える 1

0

qemu がある場合は、次を使用して起動できます。

qemu-system-i386 -kernel kernel.bin

于 2013-08-17T18:24:24.637 に答える