从磁盘/ cd / usb启动

时间:2010-03-03 08:13:19

标签: c assembly operating-system

如何从磁盘/ cd / usb启动我的小型控制台,具有以下配置:

  1. 我想要使用的媒体将是完全原始的,即没有文件系统。
  2. 当我在我的系统中插入媒体或假设它已经插入时,我想让它启动我自己的小操作系统。
  3. 我想要使用的程序是,当我的系统启动时,它从磁盘/ cd / usb启动,然后启动我的操作系统。现在想象一下,操作系统将成为一个hello world程序。我实际上想看看现实世界操作系统如何实现自己。

2 个答案:

答案 0 :(得分:3)

引导加载程序必须为512字节。不能再少了。 它必须以标准的PC启动签名结束:0xAA55。

另请注意,PC以16位模式启动。 您需要将内核或二级引导加载程序从该代码加载到内存中,然后跳转到该代码(并可能将CPU切换到32位保护模式)。

例如(nasm):

BITS 16

; Your assembly code here (510 bytes max)...
jmp $

; Fills the remaining space with 0
times 510 - ( $ - $$ ) db  0

; Boot signature
dw 0xAA55

答案 1 :(得分:2)

执行启动加载程序。引导加载程序应存在于HardDisk的前512个字节中。此位置称为MBR(主引导记录)

  1. 当bios加载时,它会检查媒体是否包含MBR。它验证MBR签名0xAA55,它应该作为MBR的最后2个字节出现。

  2. 然后Bios将BootLoader加载到地址为0x7C00的RAM中

  3. 然后,通过读取文件系统,引导加载程序实际上将内核加载到内存中。

  4. 通常你不能用512字节的所有代码,所以会有一个辅助启动加载器。

  5. 辅助引导加载程序将由主引导加载程序加载。

  6. 辅助引导加载程序加载IDT和GDT(中断向量表和全局描述符表)。使A20门进入保护模式。

  7. 辅助引导加载程序将32位内核从磁盘加载到内存中,然后跳转到内核代码

  8. 有关更多信息,您可以下载Linux kernel v0.01(第一版)。看看它是如何完成的。令我惊讶的是,读取文件系统的代码+进入保护模式的代码适合512字节的代码。