您好,游客 登录 注册 站内搜索
背景颜色:
阅读论文

U盘操作系统引导和内核加载器设计

来源:论文联盟  作者:薛凯 [字体: ]

U盘操作系统引导和内核加载器设计

1 MBR引导程序
  MBR引导程序代码开始运行于org 0x7c00代码处,代码大小为512字节,引导扇区的标志为扇区最后两个字节为0xAA55,所以MBR引导程序代码最后两个字节为0xAA55。引导程序代码首先自迁移至0x600内存处并跳转执行。调取MBR主引导扇区中的分区表项至内存,从内存相应位置取出分区表项中的DBR扇区位置以及总扇区数存至内存以备DBR和内核加载器使用。通过0x13扩展中断判断是否支持读取大硬盘数据以便我们可以读取U盘扇区数据。方法是通过ah=0x41,bx=0x55AA 调用int 0x13 调用结束后bx内容为0xAA55,则表示支持扩展中断。读取U盘扇区内容的方法为调用BIOS的0x42号中断,入口参数:ah=0x42,dl=0x80,ds:si=调用参数列表。参数列表内容从低字节到高字节顺序为:2个字节的列表大小(固定为0x10),2个字节大小的读取扇区数,2个字节大小的读取至内存段地址,2个字节的读取至内存偏移地址,8个字节的线性扇区数。通过BIOS扩展int 0x13扩展中断ah=0x42,将DBR活动分区启动代码加载至0x7c00代码,并跳转执行。
  2 DBR活动分区启动代码
  活动分区DBR扇区代码从org 0x7C5A地址处运行,原因是0x7C00~0x7C59之间为BPB(BIOS参数块)格式文件信息,里面存放着文件系统的信息等。我们默认将内核加载器写入到从MBR扇区后的第一个扇区开始的扇区位置,大小为10个扇区,线性扇区数为1,读至内存的0x8000地址处。读取内核加载程序之后,我们需要利用之前保存在0x7c00处的DBR中的BPB信息来找到根目录开始扇区。根目录开始扇区数=保留扇区数+FAT表大小*FAT表个数+隐藏扇区数。DBR开始偏移地址0x20处为总共扇区数,偏移地址0x0e处为保留扇区数,偏移地址处0x24地址处为FAT大小,偏移地址0x10地址处为FAT表的个数。同时,我们后续我们还将用到偏移地址为0x0d处的每簇扇区数。DBR扇区大小为512字节,同时程序最后以0xAA55结尾,以表示活动分区。获取以上信息之后,存至内存中,默认将我们有用的信息存至0x600内存开始处,因为该地址处的MBR代码对于我们已经没有用处了,所以覆盖掉。最后跳转至0x8000地址处的内存加载器程序并执行。
  3 内核加载器程序Loader
  内核加载器代码是本文的设计重点,内核加载程序Loader将实现画面显示,所以要操作显存地址,显存地址为0xB8000,同时设置ah寄存器为0x1F,表示蓝底白字,显示字符调用int 0x10中断,ah=0xE的方法显示。Loader程序将打印在屏幕上U盘的大小以及磁盘的一些信息,同时打印出CPU的相关信息。取得CPU信息的方法是利用cpuid 汇编命令获取。同时,需要获取扩展内存大小,以便于传给内核,检测方法是调用BIOS int 0x15中断,设置eax=0xE801,调用无溢出则表示成功,成功后,eax寄存器存放16M以下大小,单位为K,ebx寄存器存放大于16M以上内存,单位为64K,两者最后相加为最终扩展内存大小。通过int 0x10,ax=0x4F00中断功能,获取VBE(VESA BIOS EXTENSION)512字节信息,在VBE信息中存有显存模式号的列表,通过int 0x10, ax=0x4F01,cx=模式号,可以获取该模式下的信息并存放到es:di内存处,在es:di处可获取该模式的显存地址和分辨率等信息。接下来需要从FAT32文件系统的U盘根目录下获取文件的开始扇区号以及文件大小,并加载到内存1M地址处。从DRB程序中获取根目录扇区号,并读取一个簇的扇区数,加载至内存0xD000地址处,该地址为Loader程序的数据加载地址,存放临时数据的位置。从0xD000位置处查找内核文件的名字,目录项大小为32字节,目录项中存放着根目录下的文件名称和该文件的开始簇号和文件大小,通过簇号转换得到开始扇区数,并通过扩展int 0x13号中断从U盘加载至内存运行。同时,需要强调一下,目前程序还处在实模式下,不能访问1M内存地址,本文采用加载内核文件的一个扇区之后,通过BIOS 扩展int 0x15中断,ax=0x8700,ecx=拷贝字节数,ds:si为临时的gdt表,实现从内存的低地址拷贝到扩展内存地址,直到完本文由论文联盟http://www.LWlm.COM收集整理成加载内核文件的最后一个扇区才结束加载。加载完内核文件之后,需要加载提供给内核文件使用的GDT表。GDT格式不在详谈。通过汇编命令LGDT加载GDT表后,使能A20地址线,并设置CR0寄存器的PE位,以便进入保护模式,进入保护模式之后,重新使用GDT表提供的段选择子,设置好之后便跳转至1M地址内存处开始执行内核代码。

欢迎浏览更多论文联盟首页计算机文操作系统论文文章
收藏 & 分享 推荐 打印 | 录入:yjiemm

相关文章       U盘操作系统  内核加载器 
本文评论   查看全部评论 (0)
表情: 评论表情符号选择 姓名: 字数
点评:
       
评论声明
  • 尊重网上道德,遵守中华人民共和国的各项有关法律法规
  • 承担一切因您的行为而直接或间接导致的民事或刑事法律责任
  • 本站管理人员有权保留或删除其管辖留言中的任意内容
  • 本站有权在网站内转载或引用您的评论
  • 参与本评论即表明您已经阅读并接受上述条款