06.20 小知識大作用:基礎知識-固件理論

一、硬盤是一臺微型計算機

一直以來,硬盤的發展趨勢是容量越來越大,技術越來越先進,功能也越來越複雜。現代硬盤早已不是簡單的外設,而是複雜的智能設備。實際上,現在的硬盤擁有完整的 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、 當所有固件載入完畢後,此時硬盤就完成了啟動,進入就緒狀態,等待主機發來的命令。

【想了解更多專業技術知識,記得關注我哦】


分享到:


相關文章: