在「黑蘋果技術:淺談 Clover EFI 幸運草」這篇文章中,談到了 Clover EFI 的功能、引導 Windows 7 的方法,以及如何自行編譯 Clover EFI 的方式。
自行編譯安裝檔有幾個好處。除了可放入自己喜歡的佈景主題之外,也能隨時取得最新版 Clover EFI。蘋果每年發佈新版 macOS 作業系統,通常在 Developer Preview 版發佈之後的幾個小時內,就會有大神釋出對應支援的 Clover EFI 新版原始碼,這是黑蘋果搶先體驗新版 macOS 的最快途徑,可在第一時間評估黑蘋果電腦對新版 macOS 的相容性。
如果不想自行編譯這麼麻煩,那就等大神們釋出編譯好的版本,到這裡下載安裝就行了。
然而編譯 Clover EFI 時常因作業系統環境變動、版本的差異,常常導致編譯失敗,覺得有必要再開一篇文章說明收集這些問題和解決方式,累積除錯經驗。本篇文章的閱讀方式是,依閱讀順序把最新的資訊擺在本文前面, 已確定不適用的舊資訊則畫上刪除線作為標示。閱讀時從前面開始看,有其他問題再往下看。
一、自行編譯 Clover EFI 的方式
0. 準備工作:
- 一台可運作 macOS 的電腦。本文以 macOS 12.4.6 (與 Xcode 10)為例。
- 電腦必須與網際網路連線
1. 相關名詞、原理說明:先了解以下幾個名詞,我用最簡單的方式來說明:
- Xcode:內含 Command Line 編譯 Clover EFI 的工具集。
- Build_Clover.command:下載與編譯 Clover EFI 的命令集,可大幅簡化手動命令列的操作。
- edk2:編譯 Clover EFI 的重要套件。
- Clover 原始碼:最新的程式碼託管在 https://svn.code.sf.net/p/cloverefiboot/code 上。
Clover EFI 編譯很簡單,下載 Xcode 並設定 Command Line 工具之後,再下載 Build_Clover.command 並執行就行了。Build_Clover.command 的內容是一大串指令碼,提供簡單的文字選單讓用戶以選擇項目的方式執行編譯,大幅簡化手動操作編譯的步驟與難度。
(2019-09-08 補充)不過 Build_Clover.command 最近似乎沒有更新,導致 Clover EFI 從 v2.5k_r507x 版本之後的編譯發生錯誤,必須手動修正解決。
2. 下載 Xcode 並設定 Command Line 。
- 下載 Xcode (下載連結)。
- Xcode 設定 Command Line Tools:執行 Xcode,功能表 Xcode -> Preference -> Locations 底下的 Command Line Tools 下拉選擇。
之後就沒 Xcode 的事了。
3. 下載 Build_Clover.command ,並修正導致錯誤的內容。
下載位址:https://github.com/Micky1979/Build_Clover
(2019-09-08 補充)修正 Build_Clover.command:
(1) 取得 edk2 的版本號碼:
使用瀏覽器開啟網址 https://svn.code.sf.net/p/edk2/code/trunk/edk2/ ,記下「Revision」後面的數字。
(2) 使用文字編輯器開啟 Build_Clover.command ,修改以下四個地方:
- edk2array 陣列內容新增一項元素 NetworkPkg
- ThirdPartyList 陣列內容將「https://github.com/acidanthera/AptioFixPkg.git」加上 # 標記使其失效
- 將「if [[ "${#edk2ArrayOnline[@]}" -ge "1" ]]; then unset -v edk2array; edk2array=( "${edk2ArrayOnline[@]}" ); fi」加上 # 標記使其失效。
- 修改 EDK2_REV 的值,填入上面得到的版本號碼。
4. 執行 Build_Clover.command ,第一次執行時需要等一段時間。最後會停在選單畫面。
執行選單 6 ,選擇 1) Standard x64 only -> 1) Standard 進行編譯 Clover 。第一次執行也要等一段時間。
5. 主選單 8) enter Developers mode (only for devs) --> 10) build all for Release ,最後會在「~/src/edk2/Clover/CloverPackage/sym 」目錄下產生 .pkg 安裝檔與 .iso 檔。
二、其他相關補充:
◉ 加入自己喜歡的佈景主題。
目的:將自己喜歡的主題加入 Clover EFI 安裝檔,於安裝時可勾選一併安裝,省去後續手動安裝的麻煩。
解決方式:將佈景主題放入 ~/src/edk2/Clover/CloverPackage/CloverV2/themespkg 底下即可。
◉ 強制加入官方「christmas」與「newyear」佈景主題。
每年的耶誕節和元旦,Clover 會在開機時,自動帶入適時應景的「christmas」與「newyear」佈景主題(展示:christmas,newyear)。這兩個佈景主題包含在原始碼中,但有趣的是編譯 Clover EFI 的安裝檔時,卻不一定會封裝進安裝檔內。
為何說「不一定」?原因是必須在每年的 11 月和 12 月,編譯時才會把這兩個應景的主題封裝進去。若不在這時間內執行編譯的動作,就不會封裝這兩個佈景主題。若安裝檔不包含這兩個主題時,安裝 Clover EFI 的系統在開機就時,就不會有應景的功能了。
解決方式:將編譯的程式碼中,日期判斷的部分加上註解,讓日期判斷失效,使其一律編譯「christmas」與「newyear」這兩個佈景主題。
編輯 ~/src/edk2/Clover/CloverPackage/package/buildpkg.sh,搜尋
[[ $currentMonth -lt 11 ]] && [[ "$themeName" == christmas || "$themeName" == newyear ]] && continue
在這行前面加上 # 註解如下:
# [[ $currentMonth -lt 11 ]] && [[ "$themeName" == christmas || "$themeName" == newyear ]] && continue
◉(2019.11.03 補充)以往我都使用 Micky1979 的 Build_Clover.command 方式來編譯 Clover EFI,不過從 10 月 2 號發布 v2.5k_r5093 之後,至今一個多月(11 月 3 日)都不再更新,不知道什麼原因。上網爬文得知有別的編譯方法,操作方式也更簡單。
開啟終端機,執行
git clone https://github.com/CloverHackyColor/CloverBootloader.git
cd CloverBootloader
sudo chmod a+x buildme
接著執行
./buildme
出現選單,選擇需要的執行項目即可。(通常是執行 7 再執行 4)。
◉(2019.07.12 補充)編譯 gettext 錯誤,查看 gettext.make.log.txt 內容:
Undefined symbols for architecture x86_64:
"_close_stdout", referenced from:
_main in gettext-gettext.o
問題分析:執行 which libtool 和 which ar 發現 libtool 跟 ar 並非在 /usr/bin 底下,表示執行了其他不相容的版本導致錯誤。經查 ar 是因為不知何時被 Homebrew 裝了 binutils 之後產生其他版本的 ar 程式。
解決方式:移除 binutils 就行了。
$ brew uninstall binutils
◉(2019.08.08 補充)出現「svn: E170013: Unable to connect to a repository at URL 'https://github.com/acidanthera/AptioFixPkg.git',svn: E175002: Unexpected server error 500 'Internal Server Error' 」錯誤。
問題分析:AptioFixPkg 套件已經被作者封存了,連到 Github 專案發現程式碼已經下架了,只剩 README.md 說明。
解決方式:用文字編輯器開啟 Build_Clover.command,尋找「https://github.com/acidanthera/AptioFixPkg.git」 這行,前面加上 # 註解。
ThirdPartyList=( # https://github.com/acidanthera/AptioFixPkg.git https://github.com/acidanthera/OcSupportPkg https://github.com/acidanthera/EfiPkg https://github.com/acidanthera/AppleSupportPkg.git )
◉ 編譯「CloverUpdater」與「CloverPrefpane」出現錯誤 Error 65。
Building CloverUpdater application... ** BUILD FAILED ** The following build commands failed: CompileXIB /Users/[帳號名稱]/src/edk2/Clover/CloverPackage/CloverUpdater/src/uk.lproj/MainMenu.xib (1 failure) make[1]: *** [CloverUpdater] Error 65 make: *** [pkg] Error 2
問題分析:「CloverUpdater」與「CloverPrefpane」的語系檔出了問題,各自的 src 目錄下只有「uk_UA.lproj」沒有「uk.lproj」。
解決方式:從 uk_UA.lproj 複製一份到 uk.lproj 即可,CloverUpdater 與 CloverPrefpane 都要做這個動作。複製的位址參照錯誤訊息中的路徑即可。
CloverPrefpane 的 uk.lproj 要再補上 CloverPrefpane.xib,這個檔案可以從 en.lproj 複製過來。
留言列表