【问题标题】:Testing own self-made os with qemu. asm/c++用qemu测试自己自制的操作系统。 asm/c++
【发布时间】:2013-08-19 21:37:23
【问题描述】:

我做了基本的操作系统,还没有真正做任何事情,但我想在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 上运行它,因为它是一个操作系统。

【问题讨论】:

  • 如果boot.asm 是引导加载程序(具有正确的签名),那么使用二进制文件作为磁盘映像就足够了。
  • 另外,我建议阅读教程on this wiki,也可能阅读these tutorials
  • 好的,它现在可以启动了,但是在 qemu 中,当我按下回车键时它会再次启动 grub。在真正的硬件上它会启动 grub,但随后什么也没有发生。
  • 你可以在这里得到帮助bravegnu.org/gnu-eprog/index.html

标签: c++ assembly operating-system ld qemu


【解决方案1】:

如果你有 qemu,你可以使用:

qemu-system-i386 -kernel kernel.bin

【讨论】:

  • 这在这种情况下不起作用,它用“pflash_write:未实现的闪存 cmd 序列(偏移量 0000000000000040,wcycle 0x0 cmd 0x0 值 0x100079)”填充终端,然后冻结。这是 qemu 的错误。
猜你喜欢
  • 2014-07-27
  • 2016-03-13
  • 2013-05-21
  • 2020-09-25
  • 1970-01-01
  • 2015-09-18
  • 2011-02-22
  • 2010-10-14
  • 2014-01-31
相关资源
最近更新 更多