【问题标题】:create real mode elf file and link it to my kernel创建实模式精灵文件并将其链接到我的内核
【发布时间】:2013-06-07 23:18:16
【问题描述】:
我正在尝试在 VGA 中打开图形模式(在我们的课程内核 - JOS 中)。
我发现要这样做,我需要从实模式(8086)调用中断 10h。
但是,进入保护模式后进入实模式是个问题,所以我尝试使用 V86 模式。
我发现为了使用 V86 模式,我需要将其作为任务运行,所以现在我正在努力添加对 V86 进程的支持。
我的内核是有限的并且不包含适当的文件系统,所以为了加载实模式代码,我试图将它们编译并链接在一起(内核和 v86 任务)。
那么有人知道如何为实模式创建精灵吗?
另外,如果有人能给我关于如何将它与内核链接在一起的提示,那就太好了!
谢谢,
谢。
【问题讨论】:
标签:
kernel
interrupt
elf
bios
vga
【解决方案1】:
这必须是一个快速的答案,但是:
我不知道如何/是否可以直接将实模式和保护模式代码链接在一起。但是,您可以尝试以下两件事:
- 您可以将实模式代码编译为平面二进制文件(剥离所有元数据)并将其与内核一起打包(可能通过将其附加到内核映像的末尾或其他方式)。然后,您需要在运行时找到它,将其加载到内存中,然后 jmp/call 调用它。由于我不知道您的内核是如何打包或运行的,所以这可能非常困难。
-
直接将机器代码添加到与内核链接的汇编文件中。我没有一个真实的例子,但它可能看起来像这样:
EnterRealMode:
db 0b8h, 00h, 00h ; mov ax, 00h
db 0fe, 0ebh ; jmp $
etc.
另外,您可能希望真正降低到实模式,而不是使用虚拟 8086 模式。如果您不这样做,BIOS 调用的内存映射和中断可能会很不稳定。 Advice on thunking down to real mode.