2012年5月25日 星期五

UEFI/PI (7) UEFI Firmware Hierarchy


  • UEFI Firmware Hierarchy
      1. Firmware Storage
          Firmware Storage 是非揮發性的memory儲存BISO或Firmware的code。UEFI的其中一個優勢是DXE和PEI 可以把code解壓到firmware storage外。 Firmware Storage最小的單位是UEFI Firmware File,再來是Firmware File System(FFS)、Firmware Volumn(FV)及Firmware Device(FD)。
          • UEFI Firmware Files
              UEFI Firmware Files是最小/少的模組化的code,包含了Code及Data存放在FV中。每一個UEFI Firmware File都有Name、Type、Alignment及Size等四個attribute。 UEFI build tool會建立Firmware Files。Firmware Files的組成如下圖:
                其中,entry point包含在Data區塊裡頭。
            • Firmware File System
                Firmware File System(FFS)描述FV的file及free space的資訊。每一個FFS都有一個unique的GUID來連結FV。FFS參考FAT 32的作法,他的header如下圖。
                  同時,我們也利用UEFI Build tool建立FFS。
              • Firmware Volumes
                  一個Firmware Volumes對應著一個logical firmware device。FV是由FFS來組成的,Firmware file則是FV組成的元件。FV可以表示flash的一部分或是多個flash或甚至一個partition或是network。所有PI component都存放在FV,在PI的過程中,必須透過FFS去讀取。
                • Firmware Devices
                    Firmware Device是指非揮發性的Storage。包含了Firmware Code、Firmware Data及Fault Tolerant。
                      Firmware Device包含了FV Main放置了DXE Driver,FV Recovery放置了security及PEI code。我們以Recovery FV為例作解釋。Recovery FV包含了FFS放置著Boot Block Code(包含了PEI security phase code) 及Recovery code(包含了也許USB stack來讀取USB device)。
                  • Creating UEFI Firmware Files
                      我們如何產生UEFI Image呢?
                      1. 撰寫C code
                      2. 用build tool編譯產生Library及object file
                      3. 產生的Library及object file是intermediate file,利用微軟的compiler把他們轉成PE/COFF格式的image。
                      4. 如果是在Linux的環境,我們可以使用GCC來取代。
                      5. Build Tool會將標準的header置換成UEFI header。
                      在PEI階段,因為我們是run在rom裡面,因此我們希望Image越小越好。所以我們是製作成Terse Image。它簡化了UEFI header的項目如下圖。

                  • Physical Memory Map
                      從下圖我們可以看到各個層級之間的關係。Firmware Device被load進system memory之後,它包含了firmware volume。而firmware volume又包含了許多Firmware File System,Firmware File System又放置著許多Firmware File。

              • 沒有留言: