本次隨筆主要講的是Ubuntu18.04和20.04的環境搭建
距離上次Windows下edk2環境搭建已經過去三個月了,現在終於有時間更新Ubuntu下的環境搭建啦。
Ubuntu1804
首先需要安裝一些必備的軟件,這里先在軟件和更新里面切換一下源 ,換到阿里雲或者華為雲都可以。
先 apt install update 一下,然后開始安裝軟件
apt install python3 (最好先檢查一下Ubuntu自帶的python版本,然后再決定裝什么版本)
apt install iasl (ubuntu20.04 的話應該會提示 apt install acpica-tools)
apt install lib32z1
apt install nasm
apt install uuid-dev
apt install build-essential
apt install make
apt install git
所有東西安裝完成之后,開始下載源代碼。首先連接到一個可以訪問GitHub的網絡,然后使用git clone命令來下載: git clone --recursive https://github.com/tianocore/edk2.git vUDK2018
注意 recursive 這個參數,這樣下載的會更加全面,包括鏈接在內的所有文件都會下載。比較方便。這一步需要花費一點時間,取決於網速,下載完成之后,在使用git clone命令的目錄下會產生一個vUDK的文件夾。
首先在終端中進入vUDK目錄里面 開始編譯basetools
make -C $WORKSPACE/Basetools 以我為例,我vUDK放到了根目錄下的lqm文件夾中 那么命令為
make -C /lqm/vUDK2018/Basetools
等待一會如果顯示OK說明成功,如果失敗說明文件有問題,回頭看看下載的文件完整不完整,檢查一下git clone的時候有沒有加參數。
basetools編譯完成了之后就可以開始編譯pkg了,跟Windows差不多先 source edksetup.sh Basetools(類似於Windows下的edksetup.bat),第一次執行這個命令還會再Conf文件夾下生成編譯配置文件,類似於Windows,可以通過修改配置文件來修改默認的pkg 、編譯器、 release or debug 等等。 (最好都改成默認GCC5 X64)
在Ubuntu1804中,gcc不同的版本需要自行下載 apt install gcc-4.8 apt install gcc5 按照這樣的格式
開始build
比如 build -p EmulatorPkg/EmulatorPkg.dsc -a X64 -t GCC5
當然不出意外是會報錯的 錯誤代碼如下圖所示
發現是系統的python3缺少了一些東西,使用 apt install python3-distutils 安裝上即可解決
如果編譯的是我上述說的pkg,那么最后還會報錯,在編譯Unix的host虛擬機的時候,暫無解決辦法,這里先直接注釋掉編譯虛擬機的部分,如下圖所示
在EmulatorPkg.dsc里面可以找到,修改它再次編譯就可以通過了。
虛擬機部分:
自帶的host編譯不了,可以使用第三方的虛擬環境,這里使用了qemu
apt install qemu
然后去編譯edk2專門為虛擬機所需的fd做的pkg
build -p OvmfPkg/OvmfPkgX64.dsc -a X64 -t GCC5
然后使用 qemu -bios Build/OvmfX64/DEBUG_GCC5/FV/OVMF.fd
如果提示qemu不是命令的話可以嘗試 qemu-system-x86_64
等待較長的一段時間之后就進入shell了,然后exit就可以進入熟悉的BIOS界面
Ubuntu 2004
和1804類似,但是有些許不一樣,首先是gcc編譯器 ,它不能單獨的安裝gcc編譯器,gcc編譯器被集成到別的安裝包里面去了,把上述的軟件安裝完了就會有gcc編譯器了。
編譯basetools的時候會提示沒有python,在終端輸入python也會提示找不到命令。解決方法如下
先 apt install python2 然后把python鏈接到python2.7 命令如下
sudo ln -s /usr/bin/python2.7 /usr/bin/python
Basetools編譯好了之后和1804一樣install python3-distutils 注釋掉Unix的host 就可以build通過。
2004和1804最大的區別是qemu版本不同 ,2004的版本比較高運行不了BIOS虛擬環境(我嘗試了很久也沒有解決)
that is all
參考博客(https://ay123.net/668.html)