因為想修改Linux核心設定檔(kernel config),所以學習如何編譯LineageOS ROM。參考LineageOS Wiki和XDA教學後編譯後,遂將過程記敘於此。
這篇不是LineageOS移植教學,而是修改現有的LineageOS ROM原始碼並重新編譯。可視需求只編譯核心(刷核心/內核),或是整個ROM重新編譯。
Sony Xpria 5 II (pdx206) 目前的LineageOS支援狀態是Official。因其運作良好,要自行編譯修改也不是難事。
1. 前置作業
目標裝置Xperia 5 II必須已解鎖bootloader,為方便測試已刷成LineageOS 20,下文一律以pdx206稱呼之。
編譯ROM需要一台x86架構64位元Linux系統的電腦,官方建議是Ubuntu。除非你像我一樣不怕死才用Arch Linux。
下載LineageOS原始碼需要約50~100GB的硬碟空間,編譯ROM需要準備至少250GB的硬碟空間,且最好是SSD。
編譯RAM至少需要16GB,不然SWAP就得給大一點。
視網路速度,下載約需要1小時。
四核心CPU Intel i5 7400編譯Linux核心約30分鐘,編譯整個ROM約6小時。
2. 安裝編譯工具
雖然有些工具Linux套件庫會收,不過保險起見還是手動裝LineageOS Wiki建議的版本。
2.1. 安裝Platform Tools
Platform Tools內含ADB和Fastboot。
點此連結從Google官網下載platform-tools。
解壓縮
|
|
- 用VIM編輯
~/.profile
,將platform-tools加入PATH
|
|
- 重新載入環境變數
|
|
2.2. 安裝編譯依賴套件
Arch Linux要先啟用multilib才能裝32位元套件。
更新所有套件,更新期間會自動裝各套件的32位元版本。
|
|
- 接著安裝以下套件。有些需要從AUR裝舊版的,例如
ncurses5
和sdl
。
|
|
2.3. 安裝Java
Arch Linux最新的Java版本是OpenJDK 19。舊版LineageOS可能需要更舊版的JDK。
安裝OpenJDK:
|
|
2.4. 安裝Python
Arch Linux最新Python版本是3.10.9。有需要舊版可用AUR裝。
安裝Python:
|
|
2.5. 建立工作目錄
建立存放工具和Android原始碼的目錄,不要有中文。
|
|
2.6. 安裝repo工具
repo是用於同步儲存庫的工具。
- 安裝至
~/bin
目錄:
|
|
- 用VIM編輯
~/.profile
,將bin目錄加入PATH:
|
|
- 重新載入環境變數
|
|
2.7. 設定git資訊
設定Git的聯絡資訊
|
|
3. 設定ccache
選擇性步驟。如果要多次編譯ROM,設定ccache能節省下次編譯的時間,但是會佔用更多硬碟空間。
啟用CCACHE,並分配50GB硬碟作為快取空間
|
|
4. 下載原始碼與裝置設定檔
4.1. 同步儲存庫
- 同步LineageOS的原始碼儲存庫,選擇
lineage-20
的分支
|
|
- 接下來讓repo sync自動下載LineageOS裝置的設定檔。
|
|
2023年2月,pdx206已正式進入LineageOS官方儲存庫。此處為unofficial時期的舊資訊。
pdx206尚未進入LineageOS官方儲存庫,狀態是unofficial,這裡需要手動修改要下載的儲存庫。
編輯~/android/lineage/.repo/local_manifests/roomservice.xml
,指定下載kyasu的pdx206儲存庫,核心是跟pdx203共用sm8250所以不用改。
|
|
下載pdx206的專有vendor,將目錄命名為pdx206
,並放到~/android/lineage/vendor/sony/
目錄。
接著再同步儲存庫一次
|
|
4.2. 抽取專有驅動程式
參考LineageOS Wiki瞭解如何抽取專有驅動程式(proprietary blobs)。
專有驅動程式可以從刷機包、OTA包、實體機抽取,我是從pdx206刷機包抽取。解壓縮得到
payload.bin
。用system-dumper-go解開
payload.bin
,會得到system.img
、boot.img
等系統映像檔:
|
|
- 將
system.img
掛載至系統
|
|
- 切換至
~/android/lineage/device/sony/pdx206/
,開始抽取專有驅動程式。
|
|
抽取的檔案會自動放到
~/android/lineage/vendor/sony/
。取消掛載
system.img
並刪除無用檔案
|
|
4.3. 編譯Linux核心
此步驟僅編譯Linux核心,並會自動打包成boot.img
,適合想開核心設定檔玩某些Android預設不給用的功能的用戶,例如超頻、跑Docker,不需要重刷手機系統也能測試。
注意有些核心變動編譯ROM時會不給過。
要編譯完整ROM請直接跳下一節。
- 進入編譯環境。
|
|
- 欲修改核心設定檔,切換至
~/android/lineage/kernel/sony/sm8250/
目錄,並產生.config
設定檔
|
|
- 進入核心設定檔選單,開始修改
|
|
- 修改完成後,用
.config
取代原本的pdx206_defconfig
|
|
- 編譯核心
|
|
輸出的
boot.img
位於~/android/lineage/out/target/product/pdx206/
。使用fastboot將其刷到手機。如果要Root權限記得餵給Magisk將其修補後再刷一次。
|
|
4.4. 編譯整個ROM
編譯ROM前可以修改內建的APP之類的,或是改系統原始碼。
- 開始編譯ROM。
|
|
這裡的指令下去,觀察一下跑個十分鐘,確認沒有輸出錯誤訊息後就可以去睡覺了。
編譯好的ROM
lineage-20.0-20230202-UNOFFICIAL-pdx206.zip
,位於~/android/lineage/out/target/product
。要開機進LineageOS的Recovery → Apply Updates from ADB刷入。