- 1、本文档共7页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
修改MBR从硬盘启动linux0-Read
编写MBR从硬盘启动linux0.11
作者: dswei email: dswei@ 日期: 2005.4.3
计算机启动时BIOS会把启动盘第一个扇区的数据读入内存0x7C00开始处,然后跳到这里继续执行。从硬盘启动和从软盘启动唯一的区别就是映象文件存储方式的不同:
对于从软盘启动的方式,映象文件连续地存放在软盘开始的位置处。放在第一个扇区的bootsect.s被BIOS读入内存后,就会把余下的映象文件读入内存,然后继续执行
对于从硬盘启动的方式,映象文件存放在Minix格式的硬盘分区里,MBR(硬盘第一个扇区)中的程序需要根据硬盘的参数和Minix文件系统的存储格式读出它
本文描述了如何编写MBR中的程序,把存放在硬盘第一个分区根目录下的linux0.11映像文件Image读入内存。
文章中小字体的括号里的数字表示参考的文献的编号(见后面的参考文献列表)。
本文分5个部分: 1、硬盘简介
2、Minix 1.0文件系统简介
3、程序流程
4、上机实验
5、附录(程序代码)
一.硬盘简介(1)
图1. 硬盘扇区编号(此图来源文献1)
我们需要了解的是物理扇区编号方式和绝对扇区编号方式。物理扇区号直接按柱面、磁头、扇区3者的组合来(以(x,y,z)表示x柱面y磁头z扇区): (0,0,1)、(0,0,2)、……、(0,0,63)、
(0,1,1)、(0,1,2)、……、(0,1,63)、
(0,2,1)、(0,2,2)、……、(0,2,63)、
……
(0,15,1)、(0,15,2)、……、(0,15,63)、
(1,0,1)、(1,0,2)、……、(1,0,63)、
(1,1,1)、(1,1,2)、……、(1,1,63)、
换句话说就是扇区号是从1到63的63进制,磁头号是0到15的16进制,“百位”是柱面号,“十位”是磁头号,“个位”是扇区号。
绝对扇区号从0开始,遍历硬盘时依次增1。
两者的换算关系如下(abs_sector表示绝对扇区号,cyl表示柱面号,head表示磁头号,sector表示扇区号,nheads表示磁头数,nspt表示每磁道扇区数)sector = abs_sector % nspt + 1
track = abs_sector / nspt
head = track % nheads
cyl = track / nheads
如何知道上面说的磁头数nheads、每磁道扇区数0x41处,即内存地址4*0x41=0x104开始的4个字节表示硬盘参数表的段地址(后面2字节)和偏移地址(前面2字节)。硬盘参数表的结构如下:
dw cylinders
db nheads
dw 0
dw write pre-comp
db 0
db 0 control byte
db 0, 0, 0
dw landing zone
db nspt(sectors/track)
db 0
第二个硬盘的参数表地址放在BIOS中断向量0x46处。
对于硬盘,我们还需要稍微知道一点分区表的信息。分区表放在硬盘第一个扇区的0x1be~0x1fd处(共64字节,第一个分区的信息在0x1be~0x1ce)。我们需要使用的仅仅是存放在0x1c6处的“分区起始绝对扇区号”(对应于程序中的start_sect变量)
二.Minix 1.0文件系统简介(2) (3)
关于Minix 1.0文件系统的更详细知识请参考文献2、3,下面仅介绍理解本程序需要了解到的知识。
Minix 1.0格式的分区结构如下:
引导块 超级块 i点位图块… 逻辑块位图块… i节点块… 数据区………
1、引导块的第一个扇区就是本分区的第一个扇区,扇区号存在MBR中0x1c6处(就是上文的“分区起始绝对扇区号”)。对于Minix 1.0,每个盘块占1k字节(即2个扇区),盘块从0开始编号。对于盘块n,其绝对扇区号 = 2*n +分区起始绝对扇区号。
2、i点位图块和逻辑块位图块的大小、数据区的起始盘块号等信息存放在超级块中,超级块的数据结构如下:
struct d_super_block{
unsigned short s_ninodes; //节点数
unsigned short s_nzones; //逻辑块数
unsigned short s_imap_blocks; //i节点位图所占用的数据块数
unsigned short s_zmap_blocks; //逻辑块位图所占用的数据块数
unsigned short s_firstdatazone; //第一个数据逻辑块
unsigned short s_log_zone
您可能关注的文档
最近下载
- Unit 6 Rain or Shine (第3课时) 课件人教版(2024)英语七年级下册.pptx VIP
- 港珠澳大桥岛隧工程沉管隧道混凝土质量控制措施.pdf
- 2025年中考数学复习热搜题速递之尺规作图(2024年7月).docx
- 股市风险预警机制-深度研究.pptx
- 政策解读2025年中央一号文件PPT.pptx VIP
- 5.0MPa路面抗折混凝土配合比.docx VIP
- 17J927-1 车库建筑构造(OCR).pdf VIP
- XX市疾病预防控制中心-艾滋病HIV筛查实验室管理手册_精品.doc
- 2025年春季小学学校德育工作计划(1975字).docx VIP
- 渤海水泥厂包装车间除尘系统设计.docx
文档评论(0)