2011年7月14日 星期四

Hii Setup Menu

1. 建立INF file, 如Sample.inf. 給一組GUID並設定為BS_DRIVER.
2. 建立一個Header file - Vfr.h, 並設定一組Formset GUID. 另外須設定一個Form Id.
3. 建立一個VFR file - Sample.vfr, 並將Formset GUID設定進來.
4. 建立Sample.c, 這裡有一些步驟須進行:
    a. 先宣告一個extern的陣列資料, 命名規則是以VFR檔名+Bin[].
    b. 宣告一個extern的字串陣列資料, 命名規則是以INF檔名+Strings[].
    c. 須設定一組GUID, 此GUID須宣告在DEF file, 之後會安裝給HII Protocol.
    d. 進入DxeMain, 首先要Locate EFI_HII_DATABASE_PROTOCOL.
    e. 再來Locate EFI_HII_CONFIG_ROUTING_PROTOCOL.
    f. 把Bin[]與Strings[]與Formset GUID包成EFI_HII_PACKAGE_LIST_HEADER.
    g. 利用HiiLibCreatePackageListDriverHandle產生一個Driver Handle.
    h. 將產生出來的Driver Handle以及EFI_HII_PACKAGE_LIST_HEADER,
        加到HII Database裡面去. 並產生一個HII Handle.
    i. 安裝EFI_HII_CONFIG_ACCESS_PROTOCOL到Driver Handle裡面去.
       此Protocol包含了三個Callback Function. 包含:
       (1). ExtractConfig. 進入Setup Menu時會呼叫.
       (2). RouteConfig. 離開Setup Menu時會呼叫.
       (3). Callback. 頁面切換時會呼叫.
    j. 將SCT_FORM_SET_PROTOCOL的資料填入, 並安裝給Driver Handle.