小知识大作用:基础知识-固件理论

一、硬盘是一台微型计算机

一直以来,硬盘的发展趋势是容量越来越大,技术越来越先进,功能也越来越复杂。现代硬盘早已不是简单的外设,而是复杂的智能设备。实际上,现在的硬盘拥有完整的 CPU 和内存,固件上也采用了类似于操作系统的分层次的复杂管理程序,因此完全可以看做一台微型计算机。只不过由于硬盘是专用于数据存储用途,不需要连接像传统 PC 一样的键盘和鼠标进行操作,因此可以看做是一台专门用途的计算机。

二、硬盘的固件结构

由于硬盘是计算机系统,所以要使得它运行起来就必须要有软件。这里的“软件”定义的范畴不同于当我们在 PC 机上使用硬盘时,我们在硬盘中存储的用户软件。使得硬盘正确运行的内部软件对上层设备和操作系统来说是透明的,为了区别于用户软件,我们通常把它们称为“固件”。固件是硬盘内部的软件,由硬盘自己的 CPU来运行。所以,如果我们将硬盘看做一台独立的计算机的话,硬盘的固件就好比 Windows 操作系统,以及上面安装的一系列程序。由于固件是最底层的软件,所以依赖于具体的硬件。不同的硬盘厂商使用的固件结构各不相同,就好比 PC机上 Windows 和 Linux 操作系统的区别一样。但是,各种固件都有一些共同点,使得我们可以将固件大体分为几个部分,大部分厂商硬盘的固件系统,都会大致遵循这样的设计原则。一般来说,可以将硬盘固件分为如下几个

部分:

1.伺服子系统。当我们为 PC 机安装打印机、扫描仪、网卡等设备的时候,我们是不是都要安装对应的打印机驱动程序、扫描仪驱动程序和网卡驱动程序等。计算机需要有驱动程序,才能驱动硬件进行工

作。对硬盘来说也是这样。对于硬盘,主轴电机和磁头组件等都是重要的硬件,它们也是需要驱动程序才能工作的。固件中的伺服子系统,就可以通俗的理解为磁头和电机驱动程序。伺服子系统驱动电机旋转,也控制磁头进行寻道。通常,它需要伺服配置参数才能进行工作。如果这一部分固件损坏,很明显,就会造成硬盘的电机和磁头工作不正常。由于这一部分固件是最接近硬件层的,因此伺服固件损坏有时候看起来非常像是硬盘的硬件损坏(比如电机不转或者磁头敲头)。

2、读写子系统。在大多数硬盘的固件设计中,通常在伺服子系统都是使用最底层的物理参数来驱动磁头,这时候还没有磁道的概念。而读写子系统的工作,就是建立磁道、扇区的概念,为上层提供 CHS 和LBA 寻址方式。读写子系统非常复杂,通常有两种最重要的数据是读写子系统正常工作所必要的,他们分别是 ZONE 表(也叫区域分配表)和缺陷表(比如 G-List 和 P-List),可以统称为读写参数。

3、主固件(Main FW)。这是固件中承担综合管理和任务调度的部分,类似于操作系统的核心。它使得固件的各部分有效结合在一起并协同工作。

4、各种功能例程。这一部分程序多种多样,就好比是电脑中安装的应用程序那样。常见的有低级格式。例程、自检诊断例程等等,它们由主固件进行调用。

5、Interface / Shell 程序。这是固件最顶层的部分,负责 SATA 接口通信,或者终端 COM 接口通信等工作。它们是硬盘与主机通信的桥梁。

固件的设计是分层的,通常上层依赖于下层的功能,而下层又为上层提供服务。底层的固件损坏,会导致上层无法正常工作,而固件的不同部分损坏,也会表现为不同的故障现象。因此理解固件层次结构,有助于理解硬盘固件故障的机制,并快速定位故障点。硬盘的固件层次大体上可以表示为下图:

三、固件的物理存储位置

早期的硬盘通常将固件完全存储在 PCB 板上的 ROM 芯片中,后来由于硬盘越来越复杂,固件越来越大,ROM芯片无法再存储完整的固件。现代硬盘通常将固件分为两部分进行存储:将最重要的基本固件存放在 PCB 板上的 ROM 芯片中,而将外围部分存储在硬盘盘片上的系统区(又叫服务区)磁道中。硬盘在启动时,ROM 中的基本固件最先启动,然后再从服务区磁道中载入外围部分,这样整个固件就启动完成了。这样设计后,盘片上的磁道就被划分为用户区和系统区,用户区磁道是操作系统可以访问的,而系统区磁道对操作系统则是透明的。

四、硬盘固件的启动流程

和 PC 机开机启动一样,硬盘也有一个启动过程,那么硬盘从上电到开始工作,会经历哪些步骤呢?下面我们从固件的角度来进行讲解。

1、上电后,Boot Loader 首先取得控制权。Boot Loader 是一段固化在硬盘主控芯片中的程序,在嵌入式设备中,通常 Boot Loader 负责启动系统,并将 ROM 中的程序载入内存。在大多数资料中,通常将硬盘的ROM 类比为 PC 机的主板 BIOS。实际上,从计算机体系结构的观点来看,硬盘中真正行使主板 BIOS功能的应该是 Boot Loader 程序——在上电最开始就获得控制权,执行系统最早期的初始化工作,并负责载入“操作系统”。不过 Boot Loader 比主板 BIOS 要简单得多,它最主要的任务就是将 ROM 芯片中的代码载入内存,然后转交控制权到 ROM 代码。

2、 ROM 程序被载入后,主固件就开始执行自己的启动过程。最先被激活的是伺服子系统。此时主轴电机开始旋转,磁头开始飞行,并做好寻道准备。

3、接下来读写子系统被激活。此时 ZONE 区域分配表被加载,主固件会先初始化完成一个“最小化读写子系统”。最小化读写子系统已经具备访问硬盘物理磁道和盘片上的服务区的能力,但还不够访问用户扇区,因为此时 P-List 表或者地址译码器模块还没有加载。

4、然后主固件会调用读写子系统访问盘片上的服务区磁道,将服务区磁道上的外围固件加载到内存。这些外围固件通常包含 APP code,地址译码器模块和 SMART 模块等,都是较顶层的功能。当地址译码器模块载入完毕后,最小化读写子系统就变成了完整的读写子系统,具备了访问用户扇区和提供线性 LBA 地址转换的能力。

5、 当所有固件载入完毕后,此时硬盘就完成了启动,进入就绪状态,等待主机发来的命令。

【想了解更多专业技术知识,记得关注我哦】

发表评论
留言与评论(共有 0 条评论)
   
验证码:

相关文章

推荐文章

'); })();