创建真实模式精灵文件并将其链接到我的内核

时间:2013-06-11 23:21:40

标签: kernel interrupt elf bios vga

我正在尝试在VGA中打开图形模式(在我们的课程内核中 - JOS) 我发现要这样做,我需要从实模式调用中断10h(8086)。 但是,在进入保护模式后进入实模式是一个问题所以我正在尝试使用V86模式 我发现为了使用V86模式,我需要将其作为一项任务运行,所以现在我正在努力增加对V86进程的支持。
我的内核是有限的,并且不包含正确的文件系统,因此为了加载实模式代码,我正在尝试编译并将它们全部链接在一起(内核和v86任务)。

那么有谁知道如何为真实模式创建精灵? 另外,如果有人能给我提示如何将它与内核链接起来那就太棒了!

谢谢,
晒。

1 个答案:

答案 0 :(得分:1)

这必须是一个快速回答,但是:

我不知道如何/如何直接将实模式和保护模式代码链接在一起。但是,您可以尝试两件事:

  1. 您可以将实模式代码编译为平面二进制文件(删除所有元数据)并将其打包到内核中(可能将其附加到内核映像的末尾或其他方式)。然后,您需要在运行时找到它,将其加载到内存中,然后jmp /调用它。由于我不知道你的内核是如何打包或运行的,所以这可能非常困难。
  2. 直接将机器代码添加到与内核链接的程序集文件中。我没有一个真实的例子,但它可能看起来像这样:

    EnterRealMode:
        db    0b8h, 00h, 00h            ; mov ax, 00h
        db    0fe, 0ebh                 ; jmp $
        etc.
    
  3. 此外,您可能希望实际上沉入真实模式而不是使用虚拟8086模式。如果你不这样做,BIOS调用的内存映射和中断可能都会很糟糕。 Advice on thunking down to real mode.