PEI Phase 一些重要的結構體

2021-10-22 14:04:22 字數 1581 閱讀 2278

efi_sec_pei_hand_off結構儲存著pei核心執行環境的資訊,如臨時ram的位置大小、堆疊位置和bfv位置。

typedef

struct _efi_sec_pei_hand_off efi_sec_pei_hand_off;

這是peimain 的內部資料結構,定義了乙個陣列用來儲存所有安裝的pei ppi.每個安裝ppi 及通知ppi 都會儲存在這個結構中的乙個陣列單元。由於pei 早期階段記憶體還沒有初始化,沒有足夠的記憶體可以使用,所以此資料結構的大小是不可能動態調整的,只能儲存一定數量的ppi,最大的個數由固定型別的pcipeicoremaxppisupported 的值來起決定,使用者可以通過配置此pcd來允許系統安裝更多的ppi。

/// pei_ppi_databaase的ppilistptrs儲存了所有安裝的ppi和通知ppi。

/// ppilist在ppilistptrs陣列的頭,notify在ppilistptrs陣列的尾。

///typedef

struct

pei_ppi_database;

此資料結構用來記錄乙個peimain識別的fv空間的資料資訊,包括其的起始位址、資料格式解析的ppi 、自己的控制代碼以及所包含的每個pei模組的派遣狀態和每個檔案的控制代碼,最後乙個識別符號號記錄這個fv是否已經被解析。這個資料結構支援的最大檔案個數是由pcdpeicoremaxpeimperfv的值決定。如果乙個fv空間包含的檔案個數大於此pcd的值,peimain將無法記錄其的完整資訊,可能會導致系統出錯。些資料結構定義在peimain.h

//用來記錄乙個peimain識別的fv空間的資料資訊,包括起始位置,資料格式解析的ppi,自己的控制代碼

typedef

struct

pei_core_fv_handle;

/// 

/// efi_pei_services是乙個函式集合,其實現由pei foundation提供.

/// 這些服務分為不同的類別,包括:

/// - 管理啟動方式

/// - 同時分配早期和永久記憶體

/// - 支援韌體檔案系統(ffs)

/// - 抽象ppi資料庫抽象

/// - 建立hob(hobs)。

///struct _efi_pei_services

;

///

/// pei核心私有資料結構例項 privatedata

/// 該結構叫做peimain的內部資料結構,維護執行pei階段所有需要的資料資訊,包括pei服務,fv資料空間,pei模組的dispatch 狀態,

/// 可使用的記憶體空間等等,由於pei 早期沒有記憶體可用,peimain定義了乙個該資料的區域性變數,把其儲存在peimain入口函式的棧上,

/// 而peimain 的入口函式在整個pei 階段並不會退出,所以棧上的資料可作為全域性資料使用,

/// 但是全域性變數的位址需要函式引數在不同的函式之間傳遞。

///struct _pei_core_instance

;

一些重要的演算法

原文 http coolshell.cn p 2583 下面是一些比較重要的演算法,原文 羅 列了32個,但我覺得有很多是數論裡的或是比較生僻的,和計算機的不相干,所以沒有選取。下面的這些,有的我們經常在用,有的基本不用。有的很常見,有的 很偏。不過了解一下也是好事。也歡迎你留下你覺得有意義的演算法...

一些重要的演算法

酷殼 http coolshell.cn 原文 http coolshell.cn p 2583 下面是一些比較重要的演算法,原文羅列了32個,但我覺得有很多是數論裡的或是比較生僻的,和計算機的不相干,所以沒有選取。下面的這些,有的我們經常在用,有的基本不用。有的很常見,有的很偏。不過了解一下也是好...

一些重要的演算法

下面是一些比較重要的演算法,原文羅列了32個,但我覺得有很多是數論裡的,和計算機的不相干,所以沒有選取。下面的這些,有的我們經常在用,有的基本不用。有的很常見,有的很偏。不過了解一下也是好事。也歡迎你留下你覺得有意義的演算法。注 本篇文章並非翻譯,其中的演算法描述大部份摘自wikipedia,因為維...