固件理論基礎知識

一、硬盤是一臺微型計算機
一直以來,硬盤的發展趨勢是容量越來越大,技術越來越先進,功能也越來越複雜。現代硬盤早已不是簡單
的外設,而是複雜的智能設備。實際上,現在的硬盤擁有完整的 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. 當所有固件載入完畢後,此時硬盤就完成了啓動,進入就緒狀態,等待主機發來的命令
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章