UEFI原理小結

1. UEFI 和 BIOS
        UEFI 和 BIOS它們都可以認為是一種燒錄了不同程序的PC固件,它們都可以用來啟動系統,并且UEFI可兼容MBR,并直接支持GPT;BIOS是IBM PC兼容機中常用的一種固件; UEFI是Intel開發和發布的EFI的繼任者,它由UEFI論壇管理,該論壇目前成員:Redhat、Intel、Aplle、Microsoft等眾多知名軟硬件廠商。但需要注意UEFI最準確的說它僅是一種規范,不同廠商根據該規范對UEFI的實現,并做出PC固件后,該固件就稱為UEFI固件。
    UEFI比BIOS先進在三個方面:
            (1) 讀取分區表
            (2) 訪問某些特定文件系統中的文件
            (3) 執行特定格式的代碼【可以說UEFI像一個簡易的操作系統】

1.1 BIOS 和 UEFI的啟動流程

    這一部分請參照:http://www.www58058.com/?p=15788&preview=true 這篇轉載的博客,臺灣的一篇很不錯的介紹UEFI和BIOS的文章.

    BIOS啟動引導過程
    開機–》CPU初始化 –》BIOS boot block(基本輸出輸入系統開機區塊)初始化
           –》讓CPU從BIOS ROM中讀reset vector(重置向量),去找到一個jump指令,最終由它跳轉到BIOS boot program。
                同時,系統中的芯片組、Super I/O和USB僅有部分初始化,此是為防止BIOS開機失敗,可用軟盤(Super I/O控制)
                、光盤(南橋控制)等存儲介質來挽救BIOS 的boot block。
           –》BIOS啟動程序啟動后開始POST(Power On Self Test:開機自我檢測),檢查CPU/RAM/鍵盤/鼠標等.
           –》BIOS開始查找內建在BIOS內的顯卡驅動并執行
           –》BIOS查找其他接入主機的設備,并嘗試讀取該設備上的ROM(只讀隨機存儲器),查看其是否有需要執行的BIOS.
                若有則執行該BIOS。  
           –》再接著BIOS開始根據自己的“系統資源表”對主機進行深度探測, 以便知道主機上安裝其它PCI設備、
                即插即用設備等,并最終在顯示器上打印檢測匯總表。
           –》BIOS向作業系統 或 應用程序提供中斷向量。
           –》BIOS通過啟動順序設定依次查找啟動設備,若找到第一個做好操作系統的磁盤,
                則它將從0柱面0磁道1扇區找Master Boot Record(開啟主引導區)并將其中的內容
                讀入內存的7C00h的位置,接著CPU開始執行它,來啟動OS。
    注:
        BIOS的ROM分為兩塊,一個叫Code Block(程序區塊), 另一個叫Boot block(啟動區塊),
 啟動電源后,主機先從boot block開始執行,  若檢查Code Block無誤,則開始轉向Code Block執行。
        所謂的BIOS recovery(BIOS恢復)是利用boot block回寫動作來進行BIOS更新失敗時的回退。
                   

    UEFI的啟動過程:
    開機–》SEC(安全性)階段:內存未初始化,CPU只能使用Cache來驗證CPU、芯片組和主機驅動。
                                            此階段由于僅能使用Cache,故這些驅動越小效率越高。
          –》PEI(EFI前初始化)階段:初始化一小部分低地址內存空間,CPU開始使用此內存初始化CPU、芯片組
                                            和主板,隨后EFI驅動載入內存。
          –》DXE(驅動執行環境)階段:此階段內存、CPU(指CPU插槽上的物理CPU,非CPU核心)、PCI、USB、
                                            SATA和Shell都會被初始化。
          –》BDS(開機設備選擇)階段:此階段用戶可選擇從檢測到啟動設備中選擇啟動設備。
          –》TSL(臨時系統載入)階段:此階段將由啟動設備上的系統接手正式進入操作系統,
                                            若BDS階段選擇UEFI Shell則會進入UEFI的簡單命令行界面,可在此界面做簡單維護和診斷。

1.2 為何要做UEFI?
    (1) 過時的16位元模式
            在x86 CPU進入32位元時代,為了兼容性考慮,在80386 CPU中保留了16位元的執行方式,
      即真實模式(Real Mode), 自此x86系列CPU不斷演進直到EM64T(64位元) Xeon(志強)系列CPU,
      在開機供電后CPU仍會切到16位執行模式執行,以便支持BIOS啟動系統,但這嚴重降低了CPU的效能。
    (2) 只有1M定址空間
            由于開機時x86 CPU必須運行在16位元模式下,CPU的能控制的定址線僅有20條,即可尋址空間為
       2的20次方(字節),也就是1M,及時主機上安裝了海量內存,也僅能使用1MB空間。
    (3) BIOS的開發難度大
            傳統BIOS的開發采用組合語言(匯編)編寫,效率極高但開發難度,但UEFI則采用C編寫,并且
       UEFI采用了標準化和模組化的特征,使開發和調試的難度降低,但同時也使得UEFI體積會越來越大.
     (4) BIOS的代碼十年未變
             自Intel推出Itanium(安騰)處理器后,為避免受傳統BIOS程序碼更新的被動局面,再這款新架構的
        的CPU誕生之初Intel就著手開發了EFI(Extensible Firmware Interface;可擴展韌體介面)技術作為
        工業標準規格,定義了一個驅動介面,用以連接上層操作系統 和 下層硬件和軟件。EFI在2000年
        公布與眾就是希望EFI可接替BIOS以突破被動局面。
       
1.2  UEFI的版本發展簡史
        2000年12月,Intel先后發布了1.02版和加入了驅動程序模型的1.10版。
        2005年, Intel將EFI提供給UEFI開發和推廣論壇,并更名為UEFI。
        2007年, UEFI論壇發布了2.1版規范.
        2009年, UEFI論壇發布2.3版。
        要了解最新的UEFI信息,可到:http://www.uefi.org/ 了解。
       
        UEFI論壇的主要成員
            IBV(獨立BIOS廠商)       AMI、Insyde、Phoenix
            IHV(獨立硬件廠商)        AMD、Intel、Apple、Dell、HP、IBM、聯想
            ISV(獨立軟件廠商)        Mircosoft

1.3 UEFI都有哪些改進
        (1) 定制空間更有彈性
                UEFI原生是以32或64位元的CPU的保護模式執行(Flat Mode),它突破了傳統16位元代碼的
          定址能力,可使CPU達到最大定址空間。UEFI利用載入EFI驅動的形式,識別并控制硬件和系統資源。
          而傳統BIOS以真實模式的中斷向量方式增加硬件功能。它要將一段類似于驅動程序的16位元代碼,
          放置在記憶體0x000C0000至0x000DFFFF之間。這段記憶體空間有限(128KB),因此,當必須放置
          的option ROM超過128KB時,傳統BIOS便無能為力。很多時候傳統BIOS的工程師為了解決這類問題,
          像PCI硬件板卡BIOS容量過大,便要想辦法利用可能的排列組合硬擠出空間來放驅動代碼。而重組
          過程有時不小心造成一些副作用,例如才剛解決的bug,重組后又再發生!而UEFI則沒有此問題,
          它能夠更系統的分配存儲空間,避免使用強制定址。
       (2) 什么系統都能用
                   傳統BIOS的硬體服務程式都是以16位元代碼的形式存在,在增強模式下執行的操作系統想存取這些
            服務會有困難。因此BIOS提供的服務在現實中只能提供給MS-DOS之類的系統用。
                   而UEFI系統下的驅動并非可直接在CPU上執行,它是用EBC(EFI Byte Code:EFI字節碼)這種專用于
            EFI driver的虛擬機器指令,該指令必須在UEFI的DXE階段被解壓縮后翻譯執行。如此便有更佳的向下
            相容性,因為EFI driver是彈性的驅動程式模組架構,可不斷的擴充驅動程式及介面,不用重新編寫,
            所以就無需考慮因系統升級所衍生的兼容性因素。
       (3)開發維護更容易
                    EFI driver開發簡單,所有的PC零組件廠商都可以參與,就像現代作業系統的開發模式,這樣的
            模式曾使Windows系統短短幾年就變得無比強大。有了EFI driver,也可以讓顯示卡在開機階段就載入
            某種程度的功能,進而可以把傳統文字介面為主的BIOS轉成圖形介面。
       (4)精簡系統用途大
                  EFI Shell是個精簡的操作系統,可讓使用者進行BIOS的更新、系統診斷、安裝特定軟件。有了
           UEFI 甚至可以播放CD和DVD而不需完全載入OS,EFI driver可以被載入或卸載,甚至TCP/IP協議棧都能用。
           基于EFI的driver model可使UEFI系統接觸到所有的硬件功能,在進入操作系統之前瀏覽網站不再
           是天方夜譚,甚至實作起來也非常簡單。總之,對使用者而言,多了一個方便的環境以及華麗的
           圖形介面,是最明顯的好處。

1.3 支持UEFI的操作系統
        (1) Linux 從2000年就開始支持UEFI,當時是elilo EFIboot loader(開機載體),演化至今是EFI版本的grub。
        (2) Apple從 Mac OS X 10.4(代號Tiger)開始支持Intel版的EFI。
        (3) 微軟從2002年給安騰CPU使用的Win2000高級限制版和數據中心限制版中首次支持EFIv1.10規范。
              后來Win2003 for IA-64(安騰64位CPU簡稱:IA-64) 和 WinXP 64位版也開始支持EFI。
              到Win2008、Vista SP1 和 Win7 64位版開始才完整支持UEFI。
              注:微軟限制32位Windows支持UEFI.

2. MBR 和 GPT
    (1) MBR類型磁盤的圖示說明

        1462115795311462.jpg

        LBA(邏輯區塊地址),注:這里的區塊與文件系統中的block是兩個概念, 此區塊可理解為扇區.FS block=扇區*2^n
        LBA的尋址長度32比特位,在百度百科中有說其長度為28bit. 此處不是很清楚。
        若為32bit,則最大磁盤容量=2^32 * 512 =  2048G = 2T
        另注:上面的第一個區塊地址并非準確,僅做方便表示說明。
        實際上,LBA尋址方式是上層文件系統發給磁盤驅動時的一種尋址表示法,
   磁盤驅動實際操作磁盤是將LBA轉換為CHS后,進行尋址讀寫磁盤的。
        請注意,當今的磁盤使用ZBR(Zone Bit Recording, 等密度記錄)方式,實際的每軌扇區數得根據它是哪一軌來確定。
  不過磁盤還是會提供這個參數來符合公式,內部再自動調整。ZBR是和早期磁盤中一個盤片上,從外到內所有磁道上的
  劃分扇區的個數相同,這使得外部磁道上很大的扇區與內圈很小的扇區一樣都僅能存512字節,造成盤片利用率不高的問題,現在磁盤都采用ZBR的方式根據磁道不同劃分的扇區數也不同來提高盤片利用率。
   
   (2) GPT 類型磁盤的圖示說明

        1462115875670171.jpg

        GPT類型的磁盤中LBA的尋址采用64bit尋址,其磁盤最大容量=2^64 * 512 Bytes
      
        摘自論壇:

            1462115900317065.jpg

3. BIOS 和 UEFI 對 MBR 和 GPT類型的磁盤支持情況:
        BIOS:僅支持MBR,在操作系統支持的情況下,GPT類型的磁盤僅可做數據盤。
        UEFI:支持MBR 和 GPT兩種類型的磁盤做啟動盤。但微軟限制UEFI支持MBR,
                即若使用UEFI安裝Windows僅能使用GPT類型的磁盤。
        注: BIOS 和 UEFI是兩種不同的PC固件,

4. UEFI的EFI 系統分區(EFI System Partition):
 》解決:MBR空間小造成的問題(分區表只能有4個分區; bootloader必須分成兩部分,最小的部分放到MBR中,較大的部分放到啟動分區中)。
 》實現方法:要求支持UEFI的固件必須支持讀取GPT磁盤類型中的FAT(12/16/32)文件系統格式,并可讀取該FAT中的文件和執行*.efi的可執行文件.
  注: ESP(EFI System Partition)是UEFI FAT格式的文件系統的稱呼.
  另注: UEFI是一個開放標準,允許固件支持GPT分區類型中的其他文件系統,及執行其他格式的代碼程序,但要兼容UEFI,就必須支持FAT.

4.1  UEFI的回退路徑(Fallback path)機制
           UEFI中定義了一種回退路徑機制(Fallback path),此機制定義了UEFI啟動項中可以指定某個磁盤分區,而不指定具體的啟動裝載文件, 此時,當選該啟動項時, 它將自動到該分區中找efi\boot\下的特殊命名的啟動裝載文件,該啟動裝載文件中定義了如何啟動此分區上安裝的操作系統,而該啟動裝載文件的命名方式為:Boot<計算機架構類型>.efi
            計算機架構類型:
                    x86-64            Bootx64.efi
                    Itanium 32      BootIA32.efi  【Intel安騰架構CPU】
                    Itanium 64      BootIA64.efi
                    ARM32           BootARM.efi
                    ARM64           BootAA64.efi   
              此機制并非為日常使用操作系統而設計,它主要用于Linux等開源系統中的LiveCD引導啟動系統、U盤引導啟動系統等方式而設計。  

4.2  UEFI的安全啟動(Secure Boot)
        安全啟動是UEFI 2.2規范中引入的安全機制,它規定UEFI 固件可以包含一系列簽名,并拒絕運行未簽名或簽名與固件中包含的簽名不一致的 EFI 可執行文件。

4.3  UEFI啟動管理器
          UEFI啟動管理器簡單理解即開機啟動菜單管理器,UEFI規范中定義它是可以被修改的,并且要支持自動檢測系統啟動時連接到本機的磁盤或某外設,以此來生成有效的啟動項。
          UEFI 啟動管理器是一種固件策略引擎,可通過修改固件架構中定義的全局NVRAM 變量來進行配置。啟動管理器將嘗試按全局 NVRAM 變量定義的順序依次加載 UEFI 驅動和 UEFI 應用程序(包括 UEFI 操作系統啟動裝載程序)。
    [root@system directory]# efibootmgr -v  #此為Linux發行版中提供的UEFI啟動管理器.
    BootCurrent: 0002                               #默認啟動項
    Timeout: 3 seconds                           #多久不操作啟動默認項
    BootOrder: 0003,0002,0000,0004          #指定啟動順序
    Boot0000* CD/DVD Drive  BIOS(3,0,00)     #第一個啟動項,CD/DVD設備,指定采用兼容BIOS方式啟動。
    #第二個啟動項,磁盤設備.采用UEFI默認方式啟動,它會自動到該磁盤的根目錄下找EFI\boot\Boot<SYS_ARCH>.efi
    Boot0001* Hard Drive    HD(2,0,00)        
    #第三個啟動項,從指定磁盤中指定啟動引導文件啟動。
    Boot0002* Fedora        HD(1,800,61800,6d98f360-cb3e-4727-8fed-5ce0c040365d)File(\EFI\fedora\grubx64.efi)
    Boot0003* opensuse      HD(1,800,61800,6d98f360-cb3e-4727-8fed-5ce0c040365d)File(\EFI\opensuse\grubx64.efi)
    #第五啟動項,采用傳統BIOS方式啟動磁盤,即通過該磁盤的MBR啟動系統。
    Boot0004* Hard Drive    BIOS(2,0,00)P0: ST1500DM003-9YN16G    

    若執行以上命令時,報一下錯誤,則說明你當前采用傳統BIOS方式啟動了當前操作系統。
        Fatal: Couldn't open either sysfs or procfs directories for accessing EFI variables.
        Try 'modprobe efivars' as root.

4.4  啟用UEFI 的條件
       (1)磁盤具有 GUID 分區表
       (2)磁盤分區表中必須有 EFI 系統分區,該分區要作為第一個磁盤分區
       (3)啟動裝載程序 位于正確的“回退”路徑 (Fallback path) 中,
                一般為\EFI\BOOT\BOOTx64.EFI (注:不同平臺文件名可能不同)
        注:Fedora中可以使用 livecd-iso-to-disk 加上-efi參數,來制作UEFI啟動盤。

    #下面僅做參考
        如果執行原生 UEFI 安裝并使用自定義分區,需要確保類型為“EFI 系統分區”的分區已掛載到 /boot/efi(這是 Fedora 查找 EFI 系統分區的路徑)。如果系統上存在現有 EFI 系統分區,那么僅需將其掛載點設置為 /boot/efi 即可。如果還沒有 EFI 系統分區,那么請創建一個分區,將其類型設置為 EFI 系統分區,大小至少為 200MB(建議 500MB),然后將其掛載點設置為 /boot/efi。

        如果購買了 Windows 8 或更高版本的操作系統,那么你的 Windows 基本上肯定是通過原生 UEFI 安裝到 GPT 格式磁盤的。這表示如果你想安裝其他操作系統,并與 Windows 共存,那么需要通過原生 UEFI 方式安裝操作系統。如果你不喜歡 UEFI,并且想要用回老掉牙的 BIOS,那么恐怕就得清空整個原生 UEFI 的 Windows,而且需要重新將磁盤格式化為 MBR。

4.5  UEFI目前存在的缺陷
(1)僅有規定,沒有實現,且規范寬泛,在制定 UEFI 固件時,需要支持 GPT 格式的磁盤和 FAT 格式的 EFI 系統分區,并且必須以標準格式讀取 UEFI 啟動管理器項等等——但是也可以隨意添加其他未規定的功能。
        例如,Apple Mac 的 HFS+ 分區中隨附了某些啟動裝載程序。UEFI 規范提到,UEFI 兼容固件必須支持特定 GPT 分區類型的 UEFI FAT 分區(標識為“EFI 系統分區”),但是 UEFI 規范并沒有提到固件不能識別其他文件系統類型并從中加載啟動裝載程序。但是 Apple 畢竟是 Apple,它的產品設計領先于其他廠商,率先設計出了可以從 HFS+ 分區讀取和加載代碼的固件,導致現在其他廠商不得不緊隨 Apple 的腳步,除非他們不打算支持 Mac。在啟動過程設計中,Apple 進行的工作遠超出 UEFI 規范的范圍,因此,如果你想讓其他操作系統以美觀的圖標或其他形式顯示在 Mac 的圖形啟動菜單上,你所要做的操作將超出 UEFI 規范的建議范圍。
(2)UEFI并沒有對啟動選項的呈現進行約束,若固件生產商設計的固件很糟糕,很可能造成系統工程師不安照UEFI規范來設計自己“獨特”的呈現方式。
  

附件1:
制作UEFI啟動U盤說明
    公共配置:
            (1) BIOS中需要做以下操作:
                》開啟UEFI
                》關閉Security Boot
                    注:是否關閉安全啟動可嘗試下, Win7肯定是要關閉的,Win8以上無需關閉安全啟動.
                        若安裝時提示: XXX has been blocked by the current security policy.
                                則應該關閉Security Boot。
                》開啟CSM
                    注:CSM(Compatibility Support Module:兼容性支持模塊),是UEFI的一個特殊模塊,
                        對于不支持UEFI的系統提供兼容性支持。目前Windows8完全支持UEFI,Windows7
                        的64位不完全支持UEFI。因此UEFI BIOS下安裝Windows7必須開啟CSM,多數電腦
                        能自動或手動開啟,少數電腦則強制關閉CSM。
                》選U盤優先啟動
    Linux啟動盤配置:
            (1) 可以使用UltraISO 或 直接在Linux下操作。
                 注:操作前U盤一定要格式化為 FAT 文件系統,原因UEFI介紹部分有。
                 ULtraISO操作:打開CentOS鏡像,導入U盤以下目錄

                    1462115933779575.jpg

                   其中:Apps、Shell.efi 是從網上下載的UEFI shell, 此文件非必須。
          (2) 打開“UltraISO”–>啟動–>寫入磁盤鏡像–>便捷啟動–>寫入新驅動器引導扇區–>Syslinux

                    1462115987372054.jpg

                 如是Linux下操作:
                    可參看:http://bbs.51cto.com/thread-1039269-1.html
                     yum  install  syslinux
                     syslinux  –stupid  /mnt/u盤        #寫入U盤啟動引導
            以上兩步完成后,就可以嘗試U盤啟動了。
            這里需要說明一點小經驗:
                 BIOS操作完成后,無法正常進入CentOS的安裝界面.你可以嘗試以下方法
                 (1)在BIOS中找“UEFI” 或 “EFI” 開頭的 你的U盤標識,嘗試從它啟動。
                 (2)在BIOS中找“launch EFI shell from filesystem device” ,嘗試進入UEFI Shell,
                        并非所有主板都自動UEFI Shell,若帶的話可以嘗試進入。
                        若能進入UEFI Shell,可使用以下簡單命令來嘗試進入你的U盤。
                            Shell> map      #用來顯示當前已經接入主機的磁盤設備。
                            Shell> fs0:       #默認會將磁盤設備上有FAT文件系統的分區自動映像為fs#的別名。
                                                   # 通過fs0 + ":" 回車即可進入該FAT分區。
                                                   #當然,也可以直接輸入blk#:,來進入某個磁盤,若該磁盤僅有一個FAT分區.
                            fs0: \> ls         #查看下面的文件
                            fs0: \> help -b                             #分屏顯示幫助。
                            fs0: \> efi\boot\bootx64.efi          #啟動CentOS的安裝界面。這是一種方式。
                  (3)向我的筆記本,再BIOS啟動界面能找到一個很長的設備名,其中包含了Usb等很多信息的一個選項;
                            選擇它后,可以顯示U盤中的內容,然后選擇"efi\boot\bootx64.efi"也可以啟動CentOS的安裝界面。
                            這個就需要你做些嘗試。
          注:Linux安裝我并沒有測試,因為在磁盤界面下,我發現我必須全盤格式化才能繼續安裝,因此就停止了。
                http://bbs.51cto.com/thread-1039269-1.html 這篇博客中非常詳細的說明了Linux啟動盤制作及故障排除。
     
        Windows的UEFI啟動
            (1) U盤需要格式化為 FAT 或 FAT32, 然后, 使用UltraISO將Win7 ISO文件寫入U盤。

                1462116026797018.jpg

            (2) 需要兩個文件:bootmgfw.efi(必須) 和 Apps目錄、 shell.efi (非必須)
                    》從Win7鏡像中: Source\install.win, 解壓后,進入 “1\windows\Boot\EFI” 下,可得bootmgfw.efi
                    》從安裝好的Win7 或 Win8中 C:\windows\boot\EFI 下找到bootmgfw.efi
                         另外,找到bootmgfw.efi后,需要將其放到U盤根目錄下,方便找到它來啟動安裝Win7的界面將
                    bootmgfw.efi重名命為bootx64.efi 并放到U盤\efi\boot\中。
           (3) 正常是可以直接啟動安裝的,若無法啟動,可安裝Linux中提到的經驗嘗試。
                    另注:我用我的筆記本測試時,并沒有成功,一直在Starting Windows界面卡死。
                        網上有說這是磁盤中ESP(EFI系統分區)的問題,需要下載bcdboot命令來修復下。
                            bcdboot c:\windows  /s  t:  /f  uefi  /l  zh-cn     #我使用此修復了,依然無效.暫時無解。
                           
          (4)  以下為參考內容,僅作了解即可。
                Windows安裝進入此界面后,可按“Shift + F10”啟動 管理員權限的cmd.exe

                    1462116050351096.jpg

                    在管理員權限的cmd窗口中可以使用diskpart命令來操作磁盤。
                      注:步驟不是必須,安裝時提示找不磁盤、MBR不支持安裝Windows等錯誤時,
                            可嘗試此步驟。
                        List disk              #顯示該計算機上的所有磁盤,假設要安裝的磁盤為磁盤0
                        Select disk 0       #選中磁盤0,注意0和disk之間有空格,
                                                  #   選定后,下面命令才能對此磁盤進行操作。
                        Clean                  #刪除該磁盤上所有數據,包括分區表和磁盤上的各個卷
                        Convert  gpt        #此命令是將MBR分區轉換成GPT磁盤分區
                        Create partition efi size=256       #創建efi系統分區,大小為256M
                        Assign letter=s                          #分配給此efi分區盤符為S
                        Format quick fs=FAT32              #快速格式化此efi分區,文件系統為FAT32
                        Create partition msr size=128     #創建大小為128M的微軟保留分區
                        Create partition primary size=50000     #創建主分區,大小為50000M
                        Assign letter=c                           #分配給此分區盤符為C
                        Format quick fs=NTFS                 #快速格式化此分區,文件系統為NTFS

附件2:
關于UEFI的命令說明
EFI Shell命令的使用說明
在支持EFI的服務器上電自檢完成后,系統控制權就被交給efi引導管理器,通過efi引導管理器,你可以選擇不同的系統引導方式。例如:你可以引導進入efi shell界,或是直接引導位于本地或是網絡上的操作系統,也可以進入維護菜單設置啟動選項和引導環境變量。efi shell是一個交互式的命令行環境,在這里你可以執行一些efi應用程序,加載efi設備驅動程序,以及引導操作系統,從引導菜單項中選擇”efi shell”,回車,待出現”shell]”提示符時即表明你已進入efi shell環境中,下面我們就對一些常用的efi shell環境下的命令作些簡要介紹:

文件和目錄操作:
    [drive_name]: 改變當前驅動器.例如, fs0當前映射到了ls-240 驅動器的話,shell] fs0: [回車]就將提供對ls-240 驅動器的訪問.
    cd [path]                               改變當前目錄
    cp [-r] file [file] … [dest]        拷貝文件和目錄
    mv [src…] [dst]                    移動文件或目錄
    rm file/dir [file/dir]                 刪除文件或目錄
    type [-a] [-u] [-b] file              察看文件內容
    edit [filename]                      文本編輯
    hexedit [[-f]filename|[-d diskname offset size]|[-m offset size]]  16進制編輯
    ls [-b] [dir] [dir] …                   獲得目錄列表
    attrib [-b] [+/- rhs] [file]           察看或設置文件屬性
    mkdir dir [dir]                         創建目錄項

    cls [background color]           清屏
    echo [[-on | -off] | [text]          回顯
    comp file1 file2                      進行文件比較
    setsize file                             設置文件大小
    dh [-b] [-p prot_id] | [handle]                    察看文件句柄信息
    loadbmp [-c] [-t] [-i[uga instance]] file      在屏幕上顯示一個位圖文件
    mode [col row]                                        設置當前圖形顯示模式

    eficompress infile outfile       壓縮efi文件
    efidecompress infile outfile   解壓efi文件

時間日期
    date [mm/dd/yyyy]               獲取或設置日期
    stall #                                   延時(毫秒)
    time [hh:mm:ss]                   獲取或設置時間

設備操作
    devices [-b] [-1xxx]                       列出系統中的所有設備
    devtree [-b] [-d]                            顯示設備樹
    map [-bdvr] [sname[:]] [handle]   映射驅動器路徑
    mount blkdevice [sname[:]]         在一個塊設備上加載文件系統
    vol fs [volume_label]                   設置卷標
    load driver_name                        加載驅動
    loadpcirom romfile                      加載pci option rom
    connect [-r] [-c] handle# .devicehandle# driverhandle#           綁定efi驅動到一個設備并激活該驅動
    disconnect devicehandle# [driverhandle# [childhandle#]        加載設備驅動
    rconnect devicehandle# [driverhandle# [childhandle#]] | [-r]   驅動重載
    pci [bus_dev] [func]                   顯示pci設備信息

    dmpstore drivers [-b] [-lxxx]      列出安裝的驅動
    drvcfg [-c] [-lxxx] [-f] [-v] [-s]      調用驅動配置協議
    drvdiag [-c] [-lxxx] [-s] [-e] [-m]  調用驅動診斷協議

    reset [reset_string]                    冷啟動

內存操作
    dblk device [lba] [blocks]           察看塊設備的16進制印象
    dmem {address] [size] [;mmio]  察看指定內存中的內容
    mem [address] [size] [;mmio]    察看內存或內存映射i/o
    memmap [-b]                            察看內存映射表
    mm address [width] [;type] [n]  內存編輯

其它
    alias [-bdv] [sname] [value]      設置或獲取別名;
    bcfg -?                                      配置efi nvram中啟動時所加載的驅動選項
    botmaint                                   執行啟動維護管理
    break                                        設置執行斷點
    guid [-b] [sname]                      察看知名guid ids
    help [-b] [internal_command]    顯示幫助信息
    ver                                            顯示版本信息
                  

摘自論壇:
關于EFI SHELL(EFI下的外殼程序環境)下預執行文件startup.nsh文件編寫示例(用途廣泛,可用于加載驅動,應用程序等):
echo -off

for %i in 0 1 2 3 4 5 6 7 8 9 A B C D E F
  if exist FS%i:\Sct then
    #
    # Found EFI SCT harness
    #
    FS%i:
    cd Sct

    if %efishellmode%. == . then
      echo The EFI SCT cannot run in the old shell environment.
      goto Done
    endif

    echo Press any key to stop the EFI SCT running

    stallforkey.efi 5
    if %lasterror% == 0 then
      goto Done
    endif

    if exist FS%i:\Sct\.passive.mode then
      if exist FS%i:\Sct\.verbose.mode then
        Sct -c -p mnp -v
      else
        Sct -c -p mnp
      endif
    else
      if exist FS%i:\Sct\.verbose.mode then
        Sct -c -v
      else
        Sct -c
      endif
    endif
    
#    load SCRT\SCRTDriver.efi
#    SCRT\SCRTApp.efi

    goto Done
  endif
endfor

:Done

與批處理編寫十分相似,詳細可用命令可以參照UEFI SHELL技術規范2.0A版第五章

 

原創文章,作者:Wn1m,如若轉載,請注明出處:http://www.www58058.com/15793

(9)
Wn1mWn1m
上一篇 2016-05-01
下一篇 2016-05-03

相關推薦

  • Linux命令學習總結:cp命令

    Linux命令學習總結:cp命令 命令簡介:      cp命令用來復制文件或目錄。指令英文原義:copy,copy files and directories      指令所在路徑:/bin/cp 命令語法: cp [OPTION]… [-T]   SO…

    Linux干貨 2017-07-23
  • linux掛載的基本使用

    掛載   掛載是指將一個設備(通常是存儲設備)掛接到一個已存在的目錄上。 我們要訪問存儲設備中的文件,必須將文件所在的分區(已有文件系統)掛載到一個已存在的目錄上, 然后通過訪問這個目錄來訪問存儲設備。 掛載條件 1、掛載點必須是一個目錄。 2、一個分區掛載在一個已存在的目錄上,這個目錄可以不為空,但掛載后這個目錄下以前的內容將隱藏不可用。對于其他…

    Linux干貨 2016-09-07
  • 第十周

    1、請詳細描述CentOS系統的啟動流程(詳細到每個過程系統做了哪些事情) 1.開啟電源后,POST自檢:檢查硬件設備,通過后交給BIOS 2.BIOS加載可選擇的啟動設備,尋找可引導的啟動設備的記錄:MBR 3.MBR:硬盤的主引導記錄,存在于0磁道0扇區,共512字節.其中Bootloader占用446字節,分區表占用64字節,magic nu…

    Linux干貨 2016-10-17
  • 計算機組成及Linux初識

    拼一載春秋,搏一生無悔 1. 計算機簡介 2. Linux發行版簡介 3. Linux哲學思想簡介 4. Linux系統上獲取命令幫助 5. Linux「12」個基礎命令簡介 6. Linux發行版基礎目錄及功能簡介 1.計算機簡介 電子計算機(英語:computer),亦稱電腦,是一種利用「電子學…

    Linux干貨 2016-10-27
  • 開始學習Linux的一些建議

    建議讀者范圍 有開發經驗者。 科研人員(由其Numrical)。 動手能力強的。 只是好奇,對于Linux只是淺嘗輒止的就不建議繼續往下看了。 端正學習態度 Linux不等于駭客(or Cracker)。 當然眾所周知很多“黑客工具”都是Linux平臺上的,我幫助過很多Linux小白發現他們殊途同歸都是朝著類似Aircrack-ng去的。 但他們不知道的是:…

    Linux干貨 2015-02-26
  • 從Linux小白到大?!c狼共舞的日子12(下)

    馬哥教育網絡班21期+第12周課程練習 5、為第4題中的第2個虛擬主機提供https服務,使得用戶可以通過https安全的訪問此web站點; (1)要求使用證書認證,證書中要求使用的國家(CN)、州(HA)、城市(ZZ)和組織(MageEdu); (2)設置部門為Ops,主機名為www2.stuX.com,郵件為admin@stuX.com; 1.CA生成私…

    Linux干貨 2016-12-26
欧美性久久久久