Warm tip: This article is reproduced from serverfault.com, please click

linux-BIOS 是否将 512 字节的引导加载程序复制到 0x7c00

(linux - Does the BIOS copy the 512-byte bootloader to 0x7c00)

发布于 2015-08-24 05:09:56

我正在编写内核;在写这么复杂的东西之前,我认为对内核、引导加载程序、寄存器、BIOS 等进行一些理论阅读不仅有帮助,而且也是必不可少的。

这篇文章说(我引用):

The boot sector loader. 
This loads the first 512-byte sector from the boot disk into RAM and jumps to it.

然后接着说:

The first sector of a diskette can be loaded at address 0000:7C00. 

因此,引导扇区加载程序将位于内存地址 0x7C00(如果我是对的)的软盘的 512 字节数据加载到 RAM 中;现在,我的问题是:

  • 由于机器正在启动,RAM必须是空的,所以它加载在 RAM 的 0x0000 处的引导加载程序?
  • (与此上下文并不真正相关)有没有办法获得 GRUB Legacy (v .9x) 引导加载程序的源代码解释?
  • 最后,我应该阅读哪些文章/书籍来熟悉内核等?

我有 6 年的编程经验,但他们都在系统上使用高级语言,这是由内核实现的。

任何帮助表示赞赏。谢谢!:)

Questioner
weirdpanda
Viewed
0
2020-06-20 17:12:55

...引导扇区加载程序将位于内存地址 0x7C00(如果我是对的)的软盘数据的 512 字节加载到 RAM 中

...

由于机器正在启动,RAM 必须是空的,所以它加载在 RAM 的 0x0000 处的引导加载程序?

编号0000:7C00是指一个RAM 地址RAM 的意思是“随机存取存储器”,意思是可以直接访问存储器中的每个位置。没有什么像“空 RAM”这样的东西。也可以参考INT13中断函数“Read Sectors From Drive”:其中一个参数(传入ES:BX)需要指向存储扇区内容的目的地址。因此,BIOS 所做的是从驱动器加载 512 字节并将其存储到0000:7C000000:7DFF,然后跳转0000:7C00到执行主引导加载程序代码。

我应该阅读任何文章/书籍以熟悉内核等?

这个 Wiki 非常有用:http : //wiki.osdev.org/Main_Page对于引导过程,请查看http://wiki.osdev.org/Boot_Sequence