我正在编写内核;在写这么复杂的东西之前,我认为对内核、引导加载程序、寄存器、BIOS 等进行一些理论阅读不仅会有所帮助,而且是必要的。
本文 http://lennartb.home.xs4all.nl/bootloaders/node3.html说(我引用):
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 中;现在,我的问题是:
- 由于机器正在启动,RAMhas为空,那么引导加载程序加载到 RAM 的 0x0000 处?
- (与此上下文无关)是否有任何方法可以获得 GRUB Legacy (v .9x) 引导加载程序的源代码解释?
- 最后,我应该阅读哪些文章/书籍来熟悉内核等?
我有6年的编程经验,但都是在由内核实现的系统上使用高级语言。
任何帮助表示赞赏。谢谢! :)
...引导扇区加载程序将位于内存地址 0x7C00(如果我是对的)的软盘数据加载到 RAM 中
...
由于机器正在启动,RAM 必须是空的,因此引导加载程序加载到 RAM 的 0x0000 处?
No. 0000:7C00
指的是内存地址。 RAM的意思是“随机存取存储器”,意味着内存中的每个位置都可以直接访问。没有什么比“空 RAM”更好的了。也可以参考INT13中断函数“从驱动器读取扇区” https://en.wikipedia.org/wiki/INT_13H#INT_13h_AH.3D02h:_Read_Sectors_From_Drive:参数之一(传入ES:BX
)需要指向存储扇区内容的目标地址。因此,BIOS 所做的就是从驱动器加载 512 字节并将其存储到0000:7C00
to 0000:7DFF
,然后跳转到0000:7C00
执行主引导加载程序代码。
我应该阅读哪些文章/书籍来熟悉内核等?
这个维基非常有用:http://wiki.osdev.org/Main_Page http://wiki.osdev.org/Main_Page。对于启动过程,请查看http://wiki.osdev.org/Boot_Sequence http://wiki.osdev.org/Boot_Sequence.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)