《真象还原》读书笔记——第三章 完善MBR(3.5 硬盘)
创始人
2024-05-24 04:07:50
0

3.5 硬盘介绍

3.5.2 硬盘工作原理

机械式硬盘示意图
柱面-磁头-扇区
磁道的编号从0 开始,相同编号的此道组成的管状区域就是柱面
盘面和磁头一一对应,所以用磁头号表示盘面,磁头编号从上到下从0开始。
扇区编号与盘面和磁道不同,各磁道内的扇区都是以1为起始编号的,并且只限于本磁道内有效。所以各个磁道间的扇区编号都是相同的,下限都是0。

主板是如何支持硬盘的
硬盘控制器 与硬盘的关系就像是 显卡和显示器。
一开始:将硬盘和硬盘控制器整合一起,这个接口被称为集成设备电路(IDE)。习惯将硬盘称为IDE硬盘。后期出现硬盘串口接口(SATA)。所以之前的ATA接口只好称为并行ATA(PATA)。
以前一般主机支支持4个并口硬盘,串口硬盘出现后,支持多少取决于主板的能力。
硬盘的并行接口与串行接口
图3-30 左边的线IDE线。以前,主盘从盘分工,主盘装系统。系统兼容性好了,以至区分不是很明显了。
主板上还有2个 IDE 接口。这两个接口也是以0 为起始编号,IDE0,IDE1。不过这两个被称为通道,IDE0叫primary通道,IDE1 叫 Secondary通道。即使是SATA硬盘,他也兼容PATA的编程接口。兼容为王。
主盘 master,从盘slave。disk。
primary通道,secondary通道。通道是channel,每个通道上分别有主盘和从盘。

3.5.3 硬盘控制端口

硬盘控制器属于 IO接口。需要通过读写硬盘控制器的端口来使用硬盘。
端口就是位于 IO控制器的 寄存器。
要想读写硬盘就要通过以下端口号。
硬盘控制器主要端口寄存器
端口分两种。

  1. 向硬盘驱动器中写入命令字
  2. 从硬盘控制器中获取硬盘状态。

一个通道的主从硬盘都用这些端口号。
对某个硬盘操作,需要指定。
通过 device 寄存器。0 主盘,1 从盘。
device 寄存器 和 status 寄存器
端口
在使用硬盘的端口时需要注意的是,同一个端口,在读或写的时候作用可能会有所不同。
例如:0x1F1 端口号,在从中读取数据时,读出的是"读取失败时,存放的ERROR信息"。
向其中写入时,写入的数据是需要读取的扇区数。虽然用途不同,但是是同一个端口。
端口号以及 位数 读写时候的功能
硬盘扇区是通过“柱头-磁头-扇区”定位的(Cylinder Head Sector),简称 CHS
还有一种寻址方式,只将扇区从0开始依次编号,不用考虑扇区的物理结构,称为逻辑块地址(Logical Block Address)LBA
LBA 有 28 和 48 两种。是用28bit或是48bit来描述一个扇区的地址。
书中使用的是LBA24模式。

3.5.4 常用的硬盘操作方法

command 寄存器写入就开始工作了,所以留到最后写。

顺序:

  1. 选通道,写入要写入待操作的扇区数。
  2. 将LBA寄存器 0 - 27 位补充完整。
  3. device中 第6位置1 LBA 模式。第4位选择硬盘(master/slave)。
  4. 向command 寄存器 存入写入命令。
  5. 读取该通道上status 寄存器,判断工作是否完成。
  6. 如果以上是 读硬盘,则进入第7步。否则结束。
  7. 将硬盘数据读出。结束。

硬盘准备好数据后,采用什么方法获取数据?
主要是用:

  1. 查询传送方式。通过状态寄存器,获取状态,看是否能够获取数据。
  2. 中断传送方式。通过中断驱动I/O,当数据设备准备好后,发送中断通知取数据。

3.6 让 MBR 使用硬盘

3.6.1 改造 MBR

由于MBR 只有 512 字节。所以

  1. 初始化环境
  2. 加载内核
    以上两个任务交给 加载器——loader。
    而MBR 负责将loader加载到内存中并运行。

书中的一些可以改变的位置设置:

  1. mbr占据了第0 扇区(LBA起点0,CHS起点1)将loader放到硬盘第2扇区
  2. 尽量写在内存地址低的位置上,书中选定 0x900

MBR 代码:

%include "boot.inc"
section MBR vstart=0x7c00mov ax,csmov ds,axmov es,axmov ss,axmov fs,axmov sp,0x7c00 mov ax,0xb800 mov gs,ax ;使用 int 0x10 功能号 0x06 清屏mov ah,0x06mov al,0x00		;上卷行数 0->全部mov bl,0x00mov bh,0x07mov cx,0x0000 ;左上( 0, 0)mov dx,0x184f ;右下(80,25)int 0x10; ---------- 在显存中输入信息 ---------
; 输出背景为 黄 色,前景 红 色,并且跳动的字符串 "HELLO WORLD"mov bx,0mov cx,14mov si,0
print:mov al,[s+si]mov [gs:bx],alinc bxmov byte [gs:bx],0x24inc bxadd si,1
loop printmov eax, LOADER_START_SECTORmov bx, LOADER_BASE_ADDRmov cx, 1call rd_disk_m_16jmp LOADER_BASE_ADDRrd_disk_m_16:mov esi,eaxmov di,cx;指定扇区数0x1f2 8bitmov dx,0x1f2mov al,cl out dx,almov eax,esi ;LBA 0-7 8bitmov dx,0x1f3out dx,al ;LBA 8-15 8bitmov cl,8shr eax,clmov dx,0x1f4out dx,al;LBA 16-23shr eax,cl mov dx,0x1f5out dx,al ;LBA Device | 24-27shr eax,cl and al,0000_1111bor  al,1110_0000b ;LBA, DEV主盘mov dx,0x1f6out dx,al ;写入命令mov dx,0x1f7mov al,0x20out dx,al ;检测硬盘状态
.not_ready:nop ;相当于个停顿in al,dx and al,1000_1000b ;忙/准备好cmp al,0000_1000b
jnz .not_ready;读数据mov ax,dimov dx,256 ;512/2mul dx mov cx,ax ;一共ax个字节mov dx,0x1f0
.read_data:in ax,dx mov [bx],ax add bx,2loop .read_data
rets db "1 MBR_start!!!"
times 510 - ($-$$) db 0
db 0x55, 0xaa

boot.inc 代码

LOADER_BASE_ADDR    equ 0x900
LOADER_START_SECTOR equ 0x2

loader.asm 代码

%include "boot.inc"section loader vstart=LOADER_BASE_ADDRmov byte [gs:160],'2'mov byte [gs:161],0x24mov byte [gs:162],' 'mov byte [gs:163],0x24mov byte [gs:164],'L'mov byte [gs:165],0x24mov byte [gs:166],'o'mov byte [gs:167],0x24mov byte [gs:168],'a'mov byte [gs:169],0x24mov byte [gs:170],'d'mov byte [gs:171],0x24mov byte [gs:172],'e'mov byte [gs:173],0x24mov byte [gs:174],'r'mov byte [gs:175],0x24
jmp $

编译指令

nasm -I include/ -o loader.bin loader.asm
nasm -I include/ -o mbr.bin mbr.asm
dd if=mbr.bin of=hd60M.img bs=512 count=1 conv=notrunc
dd if=loader.bin of=hd60M.img bs=512 count=1 seek=2 conv=notrunc

mbr 将硬盘 中的 loader 代码读到内存中并运行的结果:
mbr 将硬盘 中的loader读入到内存中并运行
loader的最终任务是加载内核。

相关内容

热门资讯

喜欢穿一身黑的男生性格(喜欢穿... 今天百科达人给各位分享喜欢穿一身黑的男生性格的知识,其中也会对喜欢穿一身黑衣服的男人人好相处吗进行解...
发春是什么意思(思春和发春是什... 本篇文章极速百科给大家谈谈发春是什么意思,以及思春和发春是什么意思对应的知识点,希望对各位有所帮助,...
网络用语zl是什么意思(zl是... 今天给各位分享网络用语zl是什么意思的知识,其中也会对zl是啥意思是什么网络用语进行解释,如果能碰巧...
为什么酷狗音乐自己唱的歌不能下... 本篇文章极速百科小编给大家谈谈为什么酷狗音乐自己唱的歌不能下载到本地?,以及为什么酷狗下载的歌曲不是...
华为下载未安装的文件去哪找(华... 今天百科达人给各位分享华为下载未安装的文件去哪找的知识,其中也会对华为下载未安装的文件去哪找到进行解...
家里可以做假山养金鱼吗(假山能... 今天百科达人给各位分享家里可以做假山养金鱼吗的知识,其中也会对假山能放鱼缸里吗进行解释,如果能碰巧解...
四分五裂是什么生肖什么动物(四... 本篇文章极速百科小编给大家谈谈四分五裂是什么生肖什么动物,以及四分五裂打一生肖是什么对应的知识点,希...
怎么往应用助手里添加应用(应用... 今天百科达人给各位分享怎么往应用助手里添加应用的知识,其中也会对应用助手怎么添加微信进行解释,如果能...
客厅放八骏马摆件可以吗(家里摆... 今天给各位分享客厅放八骏马摆件可以吗的知识,其中也会对家里摆八骏马摆件好吗进行解释,如果能碰巧解决你...
美团联名卡审核成功待激活(美团... 今天百科达人给各位分享美团联名卡审核成功待激活的知识,其中也会对美团联名卡审核未通过进行解释,如果能...