目錄

EDK2 編譯介紹(Windows)

目錄

在前面幾篇有介紹過如何在 Ubuntu 下建置 edk2 的環境,這一篇就來介紹如何在 Windows 下建置 edk2 吧。

說實在的,Windows 的環境真的很不友善,我一直想要有一個簡單方便的做法,雖然還不完美但我盡力了 …

為了簡化安裝方式,這篇會使用到 Chocolatey,這是一種在 Windows 下提供指令安裝方式的 package management 的軟體。

首先我們先開啟一個 command prompt, 記得按右鍵選 adminitrator 權限開啟,然後輸入下面指令。

1
2
3
4
5
6
7
@"%SystemRoot%\System32\WindowsPowerShell\v1.0\powershell.exe" -NoProfile -InputFormat None -ExecutionPolicy Bypass -Command "[System.Net.ServicePointManager]::SecurityProtocol = 3072; iex ((New-Object System.Net.WebClient).DownloadString('https://chocolatey.org/install.ps1'))" && SET "PATH=%PATH%;%ALLUSERSPROFILE%\chocolatey\bin"
choco install --force -y visualcppbuildtools git tortoisegit Python3 nasm wget 7zip qemu
wget -x --no-check-certificate https://acpica.org/sites/acpica/files/iasl-win-20200528.zip -O %temp%/iasl-win-20200528.zip
7z x %temp%\iasl-win-20200528.zip -oC:\ASL
del /f /q %temp%\iasl-win-20200528.zip
rem Environment Vars (like PATH) have changed. Close/reopen your shell to see the changes (or in powershell/cmd.exe just type `refreshenv`).
refreshenv

這樣基本 build code 環境就安裝完畢了,接下來我們來抓一套 edk2 試試看能不能 build code

1
2
3
4
git clone https://github.com/tianocore/edk2.git c:\edk2
cd /d c:\edk2
git submodule init
git submodule update
提示

文章寫作時間當下最新的 release/tags 為 edk2-stable202005, 建議先切到目前最新的 tag 上,避免最新的 master 可能 build 不過

1
2
cd /d c:\edk2
git checkout tags/edk2-stable202005 -b edk2-stable202005

code 抓好後,要先 build Base Tools,這個步驟只要做一次

1
2
3
4
5
call %comspec% /k ""C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\vcvarsall.bat"" x86
cd /d c:\edk2
edksetup.bat VS2015
cd /d c:\edk2\BaseTools
nmake

接著來試試看能不能 build OvmfPkg,重新開一個 command prompt 再執行下面的指令

1
2
3
4
5
6
7
8
9
call %comspec% /k ""C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\vcvarsall.bat"" x86_amd64
cd /d c:\edk2
set NASM_PREFIX="C:\Program Files\NASM\"
edksetup.bat VS2015
rem BUGBUG - 不知道為什麼這個會指錯 ...在這邊重設為正確的路徑
set WINSDK81_PREFIX=c:\Program Files (x86)\Windows Kits\8.1\bin\
build -a IA32 -a X64 -t VS2015 -p OvmfPkg\OvmfPkgIa32X64.dsc -b DEBUG
mkdir c:\edk2\Build\Ovmf3264\DEBUG_VS2015\FV\hda-contents
"c:\Program Files\qemu\qemu-system-x86_64.exe" -m 5120 -smp 1 -bios c:\edk2\Build\Ovmf3264\DEBUG_VS2015\FV\OVMF.fd -global e1000.romfile="" -machine q35 -serial mon:stdio -hda fat:rw:c:\edk2\Build\Ovmf3264\DEBUG_VS2015\FV\hda-contents --net none

若能看到 qemu 正確的將 OVMF 跑起來,那麼就代表沒問題啦。