用qemu测试自己自制的操作系统.asm/c++
Testing own self-made os with qemu. asm/c++
我已经制作了基本的os,它还没有真正做任何事情,但我想在qemu上测试它。但是,我必须为ld链接器的输出文件做些什么才能使其与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上运行它,因为它是一个操作系统。
如果你有qemu,你可以使用:启动它
qemu-system-i386 -kernel kernel.bin
相关文章:
- 在C++中设置基于操作系统的文件路径
- 使用C++获取程序的 ASM
- 如何在工厂方法中返回指向基于基础操作系统的派生类的有效指针
- WideCharToMultiByte在英语操作系统上不转换日语
- 在 c++ 中使用 x86 DIV 的这个 asm 块有什么用?
- 如何在 Windows 操作系统中在 geany 中安装插件
- 操作系统平台支持宏和提升库
- 从utsname找出Linux操作系统名称
- 为什么 free() 函数不将内存返回给操作系统?
- 我可以让编译器忽略特定于操作系统的方法吗?
- 有没有办法获取用户操作系统的ANSI转义码?
- g++ -O3 为 loop 创建了奇怪的指令 - 两个具有相同 asm 的版本
- 测试操作系统时执行程序集"sti"时虚拟框崩溃
- 如何应用 printers.py 修改?(Linux操作系统)
- LINUX 操作系统上的错误:令牌之前预期的构造函数、析构函数或类型转换'('?
- Extern "C"错误在'int'之前'asm'或'__attribute__'
- 了解 C/C++ 中 Windows / MSVC 的一些反调试内联 asm
- 尝试使用 x86 asm SSSE3 将大端转换为小端序
- 如何使用"asm volatile"编写 btr 指令
- 用qemu测试自己自制的操作系统.asm/c++