首页 操作系统DIY手册(第六课)

操作系统DIY手册(第六课)

举报
开通vip

操作系统DIY手册(第六课)Write Your Own Operating System Tutorial Write Your Own Operating System Tutorial 操作系统DIY手册 © 2001 by Joel Gompert jgompert@cse.unl.edu Translated by Kasi kasicass@163.com 第六课:引导程序 (Lesson 6: Boot Loader) 之前的所有内容,我们都是在引导扇区(the boot sector)鼓捣鼓捣。仅仅512字节的大小,我们甚至不...

操作系统DIY手册(第六课)
Write Your Own Operating System Tutorial Write Your Own Operating System Tutorial 操作系统DIY手册 © 2001 by Joel Gompert jgompert@cse.unl.edu Translated by Kasi kasicass@163.com 第六课:引导程序 (Lesson 6: Boot Loader) 之前的所有内容,我们都是在引导扇区(the boot sector)鼓捣鼓捣。仅仅512字节的大小,我们甚至不能建立一个稍复杂些的程序,所以,唯一的方法便是突破一个扇区的限制。本课,我们将制作一个引导程序(Boot Loader)放入引导扇区,其会将软盘上的一个可执行文件(executable file)载入内存,并运行之。这个可执行文件可以任意大小,而不必限制于一个扇区(512字节)之内。 制作引导程序(Boot Loader),与前面的内容相比,还是挺复杂的。在此之前,我们必须先了解FAT文件系统(file system)的结构(这里我选用FAT文件系统,当然,你也可以选别的格式)。下面对引导过程(boot loading process)进行简单描述。 从软盘最最开始的地方算起,依次存储了:DOS启动记录(DOS Boot Record,也就是第一个扇区)、文件结构 关于同志近三年现实表现材料材料类招标技术评分表图表与交易pdf视力表打印pdf用图表说话 pdf (FAT,File Allocation Table)、根目录(Root Directory),接下来是其它的各种文件。(硬盘的结构要复杂许多,还包括主引导记录(MBR,Master Boot Record)和分区(multiple partitions))假设我们写了一个操作系统,编译为LOADER.BIN文件存于软盘,那引导程序(Boot Loader)将这样工作: 1.​ 载入DOS引导记录(DBR,DOS Boot Record),其中存有DBR、FAT、根目录所占的字节大小,这样,它们在软盘上的位置就知道了。 2.​ 接着载入根目录(Root Directory)信息。 3.​ 在根目录上查找名为LOADER.BIN的文件。如果找到,我们可在目录入口(directory entry)中找到文件的位置信息(文件起始于磁盘的哪个簇(cluster,文件存储的最小单位))。若没找到,显示错误信息。 4.​ 载入文件结构表(FAT, The File Allocation)。 5.​ 从FAT中,我们可知道LOADER.BIN文件的占用了几个簇(从文件“起始簇”算起)。然后将这些簇中的内容载入内存的特定位置,即将文件LOADER.BIN载入内存。 6.​ 跳转到所载入之位置,运行我们的操作系统。 从磁盘读取数据,用的也都是BIOS调用。若你想尝试一下,可自己弄清楚如何通过BIOS调用读取磁盘上的数据,并自己写一个引导程序(Boot Loader)。而本课中,为了简便,我使用John S. Fine写的引导程序(FAT12 bootstrap loader,文件BOOT12.ASM既是),并稍作修改。如果你能找到他的“partcopy”工具(BOOT12.ASM内有说明),可按他的方法编译安装(别忘了通知我,那个工具在哪可找到)。否则,就按我们原先所学之方法即可。 这个引导程序使用FAT12文件系统(FAT12 file system,专用于软盘)。对于其它的文件系统(如FAT16、FAT32、NTFS等等),这个引导程序便不适用了。在John Fine的引导程序中,你可进行许多设置,包括:操作系统与FAT数据载入到内存的什么位置、要载入哪个文件。 默认地,引导程序在根目录查找名为LOADER.BIN的文件,并将起载入内存的0x1000:0000的位置(在程序中通过这句定义其位置:#define IMAGE_SEG)。因此,你需要编写一个LOADER.BIN文件存于软盘。 还是用实例来演示。我们将使用第四课的“Hello, World”操作系统,但这里要做一些改动。因为这个文件将载入内存中0x1000:0000的位置,而不是0000:7C00。而且,也没有了DOS引导记录(DOS Boot Record)中关于磁盘的那些信息(0x02到0x3E间的数据)。 在程序的最开始,我们要对数据段(data segment)、堆栈段(stack segment)以及堆栈指针(stack pointer)的寄存器进行初始化。程序代码段(code segment)的位置存于寄存器CS中,而程序所用到的数据也存于代码段,所以数据段寄存器DS的值与CS相等。且对于现在的程序,堆栈段的地址也与CS相同,但以后的程序可能就不同了。下面的初始化的代码: mov ax, cs ; Get the current segment mov ds, ax ; The data is in this segment cli ; disable interrupts while changing stack mov ss, ax ; We'll use this segment for the stack too mov sp, 0xfffe ; Start the stack at the top of the segment sti ; Reenable interrupts 原来程序的最后几行可去掉了,这里无需将程序文件填充到正好一个扇区(sector)大小。其它的代码没什么变化。最后的文件为lesson6.asm。 将其编译并复制到软盘中: nasmw lesson6.asm –o lesson6.bin copy lesson6.bin a:\LOADER.BIN 假设你已安装了那个引导程序(boot loader),即将起写入软盘的第一个扇区,下面,重新启动吧。成功后,你也可将前面几课的程序改装改装,让其可通过现在的引导程序加载,作为练习吧。接下来的课程大部分都将用引导程序来载入我们的操作系统。 终于突破一个扇区的限制了,激动ing。 ~欲知后事,请听下回分解~ 2004.7.26 www.4ngel.net
本文档为【操作系统DIY手册(第六课)】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: 免费 已有0 人下载
最新资料
资料动态
专题动态
is_735939
暂无简介~
格式:doc
大小:31KB
软件:Word
页数:0
分类:互联网
上传时间:2011-03-17
浏览量:8