close

Clover_Xmas

在「黑蘋果技術:淺談 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 下拉選擇。

螢幕快照 2019-09-30 上午11.17.33.png

之後就沒 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」後面的數字。

螢幕快照 2019-09-30 下午3.39.42.png

(2) 使用文字編輯器開啟 Build_Clover.command ,修改以下四個地方:

  • edk2array 陣列內容新增一項元素 NetworkPkg
  • ThirdPartyList 陣列內容將「https://github.com/acidanthera/AptioFixPkg.git」加上 # 標記使其失效

Build_Clover_Command.png

  • 將「if [[ "${#edk2ArrayOnline[@]}" -ge "1" ]]; then unset -v edk2array; edk2array=( "${edk2ArrayOnline[@]}" ); fi」加上 # 標記使其失效。

螢幕快照 2019-09-30 下午3.33.24.png

  • 修改 EDK2_REV 的值,填入上面得到的版本號碼。

螢幕快照 2019-09-30 下午3.49.42.png

4. 執行 Build_Clover.command ,第一次執行時需要等一段時間。最後會停在選單畫面。

螢幕快照 2019-09-30 下午3.47.17.png

 

執行選單 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 檔。

螢幕快照 2019-09-30 下午3.53.54.png

二、其他相關補充:

◉ 加入自己喜歡的佈景主題。

目的:將自己喜歡的主題加入 Clover EFI 安裝檔,於安裝時可勾選一併安裝,省去後續手動安裝的麻煩。

解決方式:將佈景主題放入 ~/src/edk2/Clover/CloverPackage/CloverV2/themespkg 底下即可。

 

◉ 強制加入官方「christmas」與「newyear」佈景主題。

每年的耶誕節和元旦,Clover 會在開機時,自動帶入適時應景的「christmas」與「newyear」佈景主題(展示:christmasnewyear)。這兩個佈景主題包含在原始碼中,但有趣的是編譯 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-11-03 下午10.57.55.png

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 複製過來。

 
 
 
 
arrow
arrow

    benjenq 發表在 痞客邦 留言(2) 人氣()