Kernel 创建实模式elf文件并将其链接到我的内核

Kernel 创建实模式elf文件并将其链接到我的内核,kernel,interrupt,elf,bios,vga,Kernel,Interrupt,Elf,Bios,Vga,我正在尝试在VGA中打开图形模式(在我们的课程内核-JOS中)。 我发现要这样做,我需要从实模式(8086)调用中断10h。 然而,在进入保护模式后进入真实模式是一个问题,因此我尝试使用V86模式。 我发现为了使用V86模式,我需要将其作为任务运行,因此现在我正在努力添加对V86流程的支持。 我的内核是有限的,并且不包含适当的文件系统,因此为了加载实模式代码,我尝试编译并将其链接到一起(内核和v86任务) 那么有人知道如何为真实模式创建Elf吗? 另外,如果有人能给我一些关于如何将它与内核链接在

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

那么有人知道如何为真实模式创建Elf吗?
另外,如果有人能给我一些关于如何将它与内核链接在一起的建议,那就太好了

谢谢,

Shai.

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

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

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

    EnterRealMode:
        db    0b8h, 00h, 00h            ; mov ax, 00h
        db    0fe, 0ebh                 ; jmp $
        etc.
    
  • 此外,您可能希望实际切换到实模式,而不是使用虚拟8086模式。如果不这样做,BIOS调用的内存映射和中断可能都不可靠