BIOS如何准确读取第一个扇区

问题描述 投票:0回答:2

我需要知道ATA命令的读取扇区是否仍在使用。我在《 SATA存储技术》一书中读到,该命令和一般的PIO读入命令仅在引导过程中使用。因此,我开始研究启动过程,对此感到有些困惑。

我知道BIOS作为引导过程的一部分读取了第一个扇区或MBR。我还阅读到BIOS使用INT 13来做到这一点。

SATA设备通过HBA通信。因此,必须在SATA和HBA之间的初始化过程完成之后才能读取第一个扇区。

BIOS如何读取第一个扇区...

HBA是否将INT 13转换为ATA命令?如果是,这不需要AHCI驱动程序存在吗?何时加载驱动程序?

BIOS是否直接与硬盘驱动器通信?我认为这是不可能的。

operating-system boot bios hard-drive sata
2个回答
1
投票

对于设备;那里有软盘,SCSI,ATA,ATAPI,USB大容量存储,SATA,NVME等。它们中的大多数都有控制器(其中CPU只能与控制器对话,而控制器则与与控制器相连的设备对话)。有时控制器提供的接口是相对标准化的(例如AHCI),有时则不是(SCSI,硬件RAID控制器);有时控制器会提供多个接口(例如SATA控制器可能支持AHCI,再加上旧版(P)ATA仿真,再加上非标准的RAID接口;并具有在BIOS设置中选择哪个的选项)。

对于所有情况; BIOS具有内置的(最少)驱动程序代码(可能适用于“相对标准化”的控制器/设备以及内置于主板的控制器);或控制器内置了一个“设备ROM”(例如,在同一PCI卡上),它钩住/拦截了“ int 0x13”。

无论如何; “ int 0x13”将使用“ device number”参数来确定设备是什么,并跳转到该设备的设备驱动程序代码。

HBA是否将INT 13转换为ATA命令?

如果SATA控制器使用AHCI作为其接口;然后驱动程序会将“ int 0x13”请求转换为HBA的SATA / AHCI命令。如果SATA控制器使用旧版(P)ATA仿真,则驱动程序会将“ int 0x13”请求转换为旧版(P)ATA命令,然后HBA会将ATA命令转换为SATA命令集。

这不需要AHCI驱动程序存在吗?

是。请注意,它是一个最小的驱动程序(不支持“热插拔SATA”,本机命令排队,安全擦除,弹出,修剪等),它使用“启动命令”,浪费CPU时间,同时防止并行性和破坏性能,直到命令完成,然后返回状态”为简单起见。这些东西意味着它与操作系统想要使用的设备驱动程序完全不同。

何时加载驱动程序?

驱动程序代码始终存在于某个位置的ROM中(有时不从磁盘加载)。在固件寻找“设备ROM”之前或固件初始化“设备ROM”时,驱动程序代码已初始化。

初始化所有内容后; (假设BIOS从普通磁盘引导-例如,不是从网络引导),BIOS可以仅使用'int 0x13'从“初始化设备ROM后最终使用的任何设备”中加载第一个扇区。


0
投票

在使用SATA分析器进行了一些测试之后,事实证明BIOS或UEFI足够聪明,在启动过程中不会使用诸如READ SECTOR(S)之类的慢速ATA命令。而是使用ATA命令READ DMA EXT

为了完整性,顺序为:

在驱动器发送其签名之后,HBA发送ATA命令IDENTIFY DEVICE,然后发送LBA = 0的READ DMA EXT

我不确定操作系统在正常工作期间在任何情况下是否使用读扇区写扇区]。我希望不要因为在FPGA中实现PIO IN / OUT协议不是一件令人愉快的工作。

© www.soinside.com 2019 - 2024. All rights reserved.