x01.os.8: 加载内核

王朝学院·作者佚名  2016-05-27
窄屏简体版  字體: 小  |  中  |  大  |  超大  

x01.os.8: 加载内核在 x01.os.7 中,借助 freedos,学习了保护模式。但操作系统必须完成引导:boot, 加载内核:loader,kernel,进而管理PRocess,memory,file等。

引导比较简单,开机启动时,CPU采取硬的方式,直接把 BIOS 载入内存某处运行。这就是电脑启动时按 DEL 键可以看到的画面。此时,无硬盘可以,无内存则不可以。BIOS 是一个只读芯片,但我认为它仍有可写的部分,否则,启动盘设置的保存,就说不通。BIOS 退出时,它会检测启动盘 0 扇区的最后两个字节,是否为 0xAA55。如果是的,便把该扇区的 512 字节载入内存 0x7C00 处。以后的控制权,就交给了0x7C00 处。所谓的引导扇区,不过如此。这些设置,都是硬指标,没有讨价还价的余地。进入 0x7C00时,虽然只有512字节,但这并不妨碍构建FAT12格式的文件。方法如下:

org 0x7C00

jmp short l_start

nop

%include"fat12.s"

包含文件“fat12.s”中,是一个引导参数块的定义。以此来完成a.img 的FAT12格式化。将 loader, kernel 等文件复制到 a.img 中,即可使用。512字节实在太少,所以只能完成寻找加载 loader 的工作。进入 loader 后,虽可以多做一些事情,但没有必要,只需进行一些简单必要的设置,作为跳板,跳入 kernel 即可。必要设置,主要是对 kernel 内存地址 sel:entry_point 的一个整理。kernel 是 elf 格式,可与 C 交互。

让我们跟着于渊的脚步,看看进入 C 的运行效果图吧。

按下键盘,会产生一个中断,最后一行即是。

完整代码,可到 x01.Lab.download 中下载。

 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
 
© 2005- 王朝網路 版權所有 導航