如何告诉我的自定义引导加载程序运行我的内核

时间:2017-07-21 04:27:28

标签: assembly kernel bootloader

我对汇编编码非常陌生,并且一直很难用谷歌搜索我需要知道的东西,我只想知道

1)我在哪里以及如何将我的内核放在我的引导程序旁边的软盘文件(.flp)中

2)如何告诉我的bootloader运行内核

我写了所有内容我似乎无法附加文件并告诉我的引导程序运行内核

编辑:我使用nasm制作.bin文件,然后将.bin文件重命名为.flp,然后使用rufus将我的.flp图像加载到带有DD选项的USB闪存盘

1 个答案:

答案 0 :(得分:0)

您可能认为Basile的评论有点不屑一顾,但事实是,即使您的问题非常具体,解决方案的组合和排列也不是。首先要知道的是,你的内核期望什么。就我而言,我的启动加载器;

  • 在EBDA下方创建堆栈框架
  • 阅读E820地图
  • 启用A20
  • 读取1000H和SS之间适合的扇区:0
  • 进入保护模式

所以在引导扇区编码的最后一件事是

        cli                     ; No more interrupts
        lgdt     [cs:GDTR]      ; Load GDT register
        mov      eax, cr0
         or      al, 0x01       ; Set protected mode bit
        mov      cr0, eax
        jmp      8:0x8060

和内核中的第一件事

      mov   ecx, ss     ; Get stack segment
      shl   ecx, 4  
      add   ebp, ecx    ; SS:BP becomes EBP
      add   esp, ecx    ; SS:SP becomes ESP

; Initialize segments to point to data area

      mov   eax, 16
      mov    es, ax
      mov    ds, ax
      mov    ss, ax
      mov    fs, ax
      mov    gs, ax

这个解决方案是根据我的设计标准进行的,我会冒昧地说,你不会找到另外一个像这样做得很好的编码器。最终,我已经像你一样做得很好,创建了一个图像并使用dd if=Proto of=/dev/sdc将其复制到USB。名为Proto的文件是Bochs中使用的二进制图像。

要获得任何人的任何有意义的输入,您需要非常具体地了解期望和需求,这一切都始于查看自定义引导加载程序的外观。