【讀書筆記】UEFI原理與編程(1)概述及開發環境的搭建

【讀書筆記】UEFI原理與編程(1)概述及開發環境的搭建

一、概述:

0.爲什麼會有這篇文章

  說實在的,在2016初的時候,我就萌生了寫一個操作系統的念頭,但是這對於我一個菜鳥來說,猶如登天。

  既然想了就去寫,即使最後做不完,也不後悔。

  抱着這樣的念頭,我開始查閱各種寫操作系統的書,最後我得出的結論就是,先試着寫一個BootLoader,就這樣作爲BIOS的繼任者,UEFI進入了我的研究範圍。

  爲什麼選擇UEFI呢,主要有兩個方面的考慮:

    一個是UEFI的功能極其強大

    另一個是這是項新技術,掌握了它,或許會爲以後的工作等機會提供一定的幫助吧!

1.圖書簡介:

書的樣子如下:

  有興趣的話你也可以讀一下,有錢就買,沒錢就圖書館借,再不濟就網上搜PDF格式的自行下載。

2.BIOS與UEFI的區別

  當你讀到這裏的時候我無法得知你是否熟悉對於裝系統的一些流程和問題較爲了解,但是在這個地方多說一些是很有好處的。

  自windows8以後,你如果使用原版的微軟鏡像進行裝機且你的機子自身支持EFI的話,默認會以UEFI的方式進行裝機,這樣子很容易出問題,

前提是這樣,原來的機子中裝有老版的windows系統且主板默認打開了EFI的功能,你調整了開機啓動項爲安裝介質(光盤、優盤之類的),機子開啓,這時電腦讀取的是介質中的bootmgr.efi,如下圖

  你在不知情的情況下,選擇繼續,安裝程序可能會提示你,你想安裝的分區不是GPT格式?無法繼續...

發生這種情況的主要原因是,原來的電腦使用的是BIOS+MBR的安裝方式,而你卻使用了UEFI+GPT的安裝方式,最簡單的方式就是關掉UEFI功能讓電腦默認加載bootmgr,而不是bootmgr.efi,關於bios如何設置這種問題,就不在這裏贅述了,自行百度腦補之!

從這裏我們引申出了兩個組合:

BIOS+MBR

UEFI+GPT
對,你可以認爲他們是配套存在的,前者傳統一些,後者更爲先進。

這裏的先進自然是有其優點嘍,抄書時刻到了O(∩_∩)O哈哈~

1.開發效率高

2.可擴展性高

3.性能更強大

4.安全性更高

5.更適應64位平臺

想找更多的優點就可以找書了,或者問度娘,比我說的詳細。

附一張書上的圖,作爲UEFI的啓動過程的瞭解:

 

  UEFI定義了操作系統和平臺固件之間的接口。UEFI接口可分爲以下兩個部分:

  1)啓動服務:主要包括事件服務、內存管理、protocol管理、protocol使用類服務、驅動管理、Image管理以及ExitBootServices服務。

  2)運行時服務:時間服務、讀寫UEFI系統變量的服務、虛擬內存服務、重啓系統的服務。

關於UEFI的概述就說這麼多,太多的話不容易記住,也不助於理解。

二、環境的搭建

  我使用的是windows10的企業版和vs2013,除此之外,還需要以下軟件SDK、EDK2(UDK2015)、IASL編譯器

推薦的步驟如下:

1.下載解壓配置EDK2:

下載頁面:https://sourceforge.net/projects/edk2/files/UDK2015_Releases/UDK2015/

下載地址:https://sourceforge.net/projects/edk2/files/UDK2015_Releases/UDK2015/UDK2015.Complete.MyWorkSpace.zip/download

下載完成後,內部結構如下:

圖中,BaseTools(Windows).zip和UDK2015.MyWorkSpace.zip是我們將會用到的,解壓的順序如下:

在C盤中的根目錄下創建文件夾:EDK2

將這兩個壓縮包中的文件依次解壓至EDK2

EDK2目錄下的edksetup.bat,此時會在該目錄中的Conf中生成配置文件

在target.txt中,修改TOOL_CHAIN_TAG這一行爲這樣:

TOOL_CHAIN_TAG        = VS2013

然後打開tools_def.txt,找到如下關於SDK的信息:

# Microsoft Visual Studio 2013 Professional Edition
DEFINE WINSDK8_BIN = c:\Program Files\Windows Kits\8.0\bin\x86\
DEFINE WINSDK8x86_BIN = c:\Program Files (x86)\Windows Kits\8.0\bin\x64

從這裏可以看到,我們應該下載並安裝sdk8.0

但是微軟官網給出如下描述:

The Windows Software Development Kit (SDK) contains headers, libraries, and tools you can use when you create apps that run on Windows operating systems. With the Windows SDK, you can begin building Universal Windows apps and desktop apps for Windows 10, Version 1511. This SDK also supports building Windows apps and desktop applications for Windows 8.1, Windows 8, Windows 7, Windows Vista, Windows Server 2012, Windows Server 2008 R2, and Windows Server 2008.

從這裏我們知道下載win10的sdk即可。

2.安裝windows的SDK

下載地址:https://developer.microsoft.com/en-US/windows/downloads/windows-10-sdk

安裝完成後,我繼續下一步

3.安裝iasl編譯器:

官網:https://www.acpica.org/downloads

打開右側某一日期:

拉到頁面的最底部,我們可以找到編譯器的下載鏈接

下載地址:https://acpica.org/sites/acpica/files/iasl-win-20160422.zip

之後,將裏面的工具解壓至C:/ASL(新建一個文件夾)即可。

 

4.繼續回到EDK的設置中來:

在Conf文件夾中找到tools_def.txt,然後修改如下項目:

DEFINE VS2013_BIN = D:\soft\Microsoft Visual Studio 12.0\Vc\bin
DEFINE VS2013_DLL = D:\soft\Microsoft Visual Studio 12.0\Common7\IDE;DEF(VS2012_BIN)
DEFINE VS2013_BINX64 = DEF(VS2013_BIN)\x86_amd64

DEFINE VS2013x86_BIN = D:\soft\Microsoft Visual Studio 12.0\Vc\bin
DEFINE VS2013x86_DLL = D:\soft\Microsoft Visual Studio 12.0\Common7\IDE;DEF(VS2013x86_BIN)
DEFINE VS2013x86_BINX64 = DEF(VS2013x86_BIN)\x86_amd64

DEFINE WIN_ASL_BIN_DIR         = C:\ASL

當然我vs2013安裝在了D盤,iasl放在了C盤,所以會有上圖,改完路徑後保存。

5.編譯UEFI模擬器和工程

在開始菜單中找到VS2013的文件夾,打開其中的“VS2013開發人員提示”

切換到EDK2目錄下:

如果編譯NT32pkg則

執行:

edksetup.bat --nt32

build

如果編譯nt32pkg工程則

執行

edksetup.bat

build 加上需要的參數

 

至此,環境就配好了!

 

6.運行模擬器:

使用命令build run

來張截圖:

深信積累的力量,時間就是你最好的朋友,否則它就是你最大的敵人。

如果你想分享此文章,請註明:作者:PurStar 出處:www.cnblogs.com/purstar

分類: UEFI開發

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章