Android 台灣中文網

標題: 【XPT】源碼編譯系列(二)~開始編譯cm11/cm12 [打印本頁]

作者: sharonliu    時間: 2014-1-10 22:38
標題: 【XPT】源碼編譯系列(二)~開始編譯cm11/cm12
本帖最後由 sharonliu 於 2015-2-10 00:14 編輯

2015/02/09
修正更新內容

...............................................................................................................................................................................
【XPT】如何建立cm11的開發編譯環境(ㄧ)
延續上一篇同步完原碼後
接下來的工作就是開始編譯新的cm11/cm12
後續的動作會因為不同的機型步驟方式會有所不同

接下來的內容會分為兩個不同的方法

方法1:
cm官方沒有支援的裝置型號採用其他高手提供的源碼
其原理主要是利用其他高手已經整理改寫過的原碼(請自行上網蒐集你的機型其他高手寫好的原碼)
來建立編譯cm時所需要的相關檔案
通常主要修改的部份是
Device tree,vendor tree,hardware tree,內核(kernel)內核架構等

方法1教學開始(此步驟為cm官方沒有支援的裝置型號)
1.
首先在cm的工作目錄下找到
repo這個資料夾

2.
在repo資料夾內新增一個名為
local_manifests的資料夾

3.

在新增的local_manifests資料夾內新增加一個檔案
將檔名命名為
roomservice.xml
4.
用自己習慣使用的文字編輯器打開此檔案
增加自己蒐集其他高手公開的相關源碼
以下範例為xperia p,u,sola,go的相關內容

  1.   <remove-project name="CyanogenMod/android_hardware_libhardware" />
  2.   <remove-project name="CyanogenMod/android_hardware_libhardware_legacy" />
  3.   <remove-project name="CyanogenMod/android_packages_apps_CMUpdater" />
  4.   <remove-project name="CyanogenMod/android_packages_apps_Bluetooth" />
  5.   <remove-project name="CyanogenMod/android_packages_apps_BluetoothExt" />
  6.   <remove-project name="CyanogenMod/android_packages_apps_Settings" />
  7.   <remove-project name="CyanogenMod/android_system_core" />
  8.   
  9.   <project path="bionic" name="XperiaSTE/android_bionic" />
  10.   <project path="build" name="XperiaSTE/android_build" > <copyfile src="core/root.mk" dest="Makefile" /> </project>
  11.   <project path="bootable/recovery" name="XperiaSTE/android_bootable_recovery" />
  12.   <project path="device/sony/kumquat" name="XperiaSTE/android_device_sony_kumquat" />
  13.   <project path="device/sony/lotus" name="XperiaSTE/android_device_sony_lotus" />
  14.   <project path="device/sony/nypon" name="XperiaSTE/android_device_sony_nypon" />
  15.   <project path="device/sony/pepper" name="XperiaSTE/android_device_sony_pepper" />
  16.   <project path="device/sony/montblanc-common" name="XperiaSTE/android_device_sony_montblanc-common" />
  17.   <project path="external/bluetooth/bluez" name="XperiaSTE/android_external_bluetooth_bluez" revision="5.28" />
  18.   <project path="external/icu" name="XperiaSTE/android_external_icu" />
  19.   <project path="external/wpa_supplicant_8" name="XperiaSTE/android_external_wpa_supplicant_8" revision="android-5.0" />
  20.   <project path="external/bluetooth/glib" name="aosp-bluez.glib" remote="googlecode" revision="master" groups="pdk" />
  21.   <project path="external/bluetooth/sbc" name="bluetooth/sbc" remote="kernel"     revision="master" groups="pdk" />
  22.   <project path="frameworks/av" name="XperiaSTE/android_frameworks_av" />
  23.   <project path="frameworks/base" name="XperiaSTE/android_frameworks_base" />
  24.   <project path="frameworks/native" name="XperiaSTE/android_frameworks_native" />
  25.   <project path="hardware/libhardware" name="XperiaSTE/android_hardware_libhardware" />
  26.   <project path="hardware/libhardware_legacy" name="XperiaSTE/android_hardware_libhardware_legacy" />
  27.   <project path="hardware/ste-sony" name="XperiaSTE/android_hardware_ste-sony" />
  28.   <project path="kernel/sony/u8500" name="XperiaSTE/android_kernel_sony_u8500" />
  29.   <project path="packages/apps/OpenDelta" name="XperiaSTE/android_packages_apps_OpenDelta" />
  30.   <project path="packages/apps/Settings" name="XperiaSTE/android_packages_apps_Settings" />
  31.   <project path="packages/apps/Bluetooth" name="XperiaSTE/android_packages_apps_Bluetooth" />
  32.   <project path="system/core" name="XperiaSTE/android_system_core" />
  33.   <project path="vendor/sony" name="XperiaSTE/android_vendor_sony" />
  34. </manifest>
複製代碼
備註:
remove-project name=

上面程式碼代表的意義為cm源碼哪些架構是你不採用的
<project path=
上面程式碼代表的意義為cm源碼你要採用蒐集至其他高手公開的相關源碼其中device,vendor,hardware,kernel這幾個資料夾通常是移植成不成功的關鍵
如何修改源碼不在此篇文章的討論範圍內
xda上有很多高手將源碼公開在github上
多花時間慢慢找相關資源在參考別人的程式碼
相信有朝一日你也能成為高手記得也要秉持開源的精神
將經驗傳承給更多人

5.
依據剛剛增減的源碼來源同步最新的源碼來源
回到源碼的工作目錄下開啟終端機
  1. repo sync
複製代碼

6.

下載初始化編譯cm11所需的檔案架構設定
  1. cd vendor/cm
  2. ./get-prebuilts
  3. cd ../..
複製代碼
備註:cm12不需要此步驟可直接跳過

7.

初始化編譯cm11/cm12的相關設定
  1. . build/envsetup.sh
複製代碼

8.

初始化你要編譯的裝置相關設定
  1. lunch cm_kumquat-userdebug
複製代碼
其中kumquat是我的手機xperia u開發代號

你可以自行替換為你要編譯的裝置代號

9.
開始編譯
  1. make -j4 otapackage
複製代碼
cpu規格比較好超過4核心的
可考慮將-j4改為-j8
利用更多執行緒去編譯可縮短編譯的時間
我的筆電規格為Intel Core i5-3230M
8G DDR3
總共編譯的時間約為2個半小時


方法2教學開始(此步驟為cm官方有支援的裝置型號)
cm官方有支援的裝置型號大多數源碼都不需要修改同步時會自動下載相關的源碼
但vendor下你的裝置相關檔案和相關的blobs因為版權關係在cm下無法開源必須用手動方式提取

1..
初始同步化編譯cm所需的架構檔案以及編譯時你的裝置所需相關的

Device tree,hardware tree,內核(kernel)內核架構等
  1. source build/envsetup.sh
  2. breakfast amami
複製代碼
amami是xperia z1 compact的開發代號
請依需要換成你要編譯裝置的開發代號

2.
請將你的裝置刷上最新且未被更動最原始乾淨的cm11/cm12


3.
接下來要開始提取裝置的blobs和vendor下你的裝置相關檔案

請到device資料夾內找到你的裝置型號所有的device tree
例如sony資料夾內xperia z1 compact的device tree有
amami,common,msm8974-common,qcom-common,rhine-common這幾個資料夾

4.
將你的裝置透過傳輸線連接電腦,並開啟USB偵錯模

4.
找一下這幾個資料夾內是不是有extract-files.sh這個腳本檔案
若有的話請點擊執行腳本檔案程式會自動執行提取裝置的blobs和vendor下你的裝置相關檔案

5.
初始化編譯cm11/cm12的相關設定
  1. . build/envsetup.sh
複製代碼

6.

初始化你要編譯的裝置相關設定
  1. lunch
複製代碼
接著請在清單內選擇你的裝置代號


7.開始編譯
  1. make -j4 otapackage
複製代碼
cpu規格比較好超過4核心的
可考慮將-j4改為-j8
利用更多執行緒去編譯可縮短編譯的時間


下面的指令為你編譯新的cm11/cm12時需要執行的指令(例如同步最新的cm11/cm12原碼)
步驟1:
首先清除之前編譯時所產生的所有檔案
  1. cd cm-11
  2. make clean
複製代碼

步驟2:

開始編譯新的cm11/cm12
  1. . build/envsetup.sh
  2. lunch cm_kumquat-userdebug
  3. make -j4 otapackage
複製代碼

教學結束
之後會陸續介紹如何移植TWRP
如果我有解釋不清楚或錯誤的地方
還請各位高手不令指教


作者: Nucked    時間: 2014-5-29 09:19
支持一下。
作者: tianjingji    時間: 2014-11-5 20:18
認真學習了
作者: kfjihailong    時間: 2015-1-9 12:52
nexus7 二代 需要自己添加hardware tree吗?
作者: sharonliu    時間: 2015-2-10 00:04
kfjihailong 發表於 2015-1-9 12:52
nexus7 二代 需要自己添加hardware tree吗?

官方有支援的話就不需要
但第一次編譯時必須手動提取vendor相關檔案和手機裡的blobs
我重新修正教學文這次有稍微比較清楚一點的解釋
作者: ah_win1017    時間: 2015-11-13 00:54
好复杂@@  超想自己研发rom的说




歡迎光臨 Android 台灣中文網 (https://apk.tw/) Powered by Discuz! X3.1