基於Samsung平臺CM11.0編譯ROM及刷機全過程
工具/原料
-
一臺帶SSD硬碟高配置電腦,Ubuntu 12.04 64位Server版。(或使用windows下的虛擬機器執行ubuntu)。
-
20M光釺Internet連線,實際網速得2M以上最好。因為設定過程中需要下載30G左右的資料。
-
一部手機,作者使用的Samsung-I9300。
-
需對刷機\LINUX操作\安卓系統比較熟悉,太過小白的不建議自己編譯。
方法/步驟---基於Samsung平臺CM11.0編譯ROM
-
一、環境搭建
1.1 安裝JDK和Toolchain
先把prebuilt-2b5cdec. tar.gz和jdk-6u26-linux-x64.bin拷貝到使用者的Home目錄.
cd /opt
sudo tar xvf ~/prebuilt-2b5cdec.tar.gz
sudo mv prebuilt-2b5cdec arm-eabi-4.4.3
chmod +x ~/jdk-6u26-linux-x64.bin
sudo ~/jdk-6u26-linux-x64.bin
1.2 安裝MTK Android編譯環境
sudo apt-get update #更新一下軟體倉庫列表
sudo apt-get install git-core gnupg flex bison gperf build-essential \
zip curl zlib1g-dev libc6-dev lib32ncurses5-dev ia32-libs \
x11proto-core-dev libx11-dev lib32readline-gplv2-dev lib32z-dev \
libgl1-mesa-dev gcc-4.4 g++-4.4 gcc-4.4-multilib \
g++-4.4-multilib mingw32 tofrodos python-markdown \
libxml2-utils xsltproc wine
sudo rm /bin/sh
sudo ln -s /bin/bash /bin/sh #修改default sh link to bash
sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-4.4 20
sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-4.4 20
sudo update-alternatives --config gcc
sudo update-alternatives --config g++
1.3 完善JDK配置:
sudo update-alternatives --install /usr/bin/java java /opt/jdk1.6.0_26/bin/java 300
sudo update-alternatives --install /usr/bin/javac javac /opt/jdk1.6.0_26/bin/javac 300
sudo update-alternatives --install /usr/bin/javah javah /opt/jdk1.6.0_26/bin/javah 300
sudo update-alternatives --install /usr/bin/javap javap /opt/jdk1.6.0_26/bin/javap 300
sudo update-alternatives --install /usr/bin/jar jar /opt/jdk1.6.0_26/bin/jar 300
sudo update-alternatives --install /usr/bin/javadoc javadoc /opt/jdk1.6.0_26/bin/javadoc 300
驗證:
sw06@sw06:/home/data/work$ java -version
java version "1.6.0_26"
Java(TM) SE Runtime Environment (build 1.6.0_26-b03)
Java HotSpot(TM) 64-Bit Server VM (build 20.1-b02, mixed mode)
1.4 安裝Repo功能
在下載之前配置下hosts服務
sw06@sw06:/home/data/work$ sudo vim /etc/hosts
74.125.31.82 android.googlesource.com
74.125.31.82 www.googlesource.com
203.208.46.172 cache.pack.google.com
59.24.3.173 cache.pack.google.com
通過一下命令安裝 "repo" 工具,注意安裝路徑的許可權,可能需要修改相關資料夾許可權。
curl https://dl-ssl.google.com/dl/googlesource/git-repo/repo > ~/bin/repo
chmod a+x ~/bin/repo
提示:你可能需要重啟電腦才能生效。
-
二、下載原始碼並編譯
2.1 新建目錄
sw06@sw06:/home/data/work $ mkdir -p cmandroid
cd cmandroid
2.2通過repo下載CM-11.0最新原始碼
sudo repo init -u git://github.com/CyanogenMod/android.git -b cm-11.0
$ repo sync
等待下載……
下載過程很長,並且還有下載一半中斷的情況,多下幾次,確保下載完成,硬碟要準備足夠大。大概20G。
sw06@sw06:/home/data/work/test/cmandroid$ du -sc
21853416 .
21853416 total
如果下載過程中報錯,修改/.repo/local_manifests/ local_manifest.xml 檔案如下:
<?xml version="1.0" encoding="UTF-8"?>
<manifest>
<project name="CyanogenMod/android_device_samsung_i9300" path="device/samsung/i9300" remote="github" />
<project name="CyanogenMod/android_device_samsung_smdk4412-common" path="device/samsung/smdk4412-common" remote="github" />
<project name="CyanogenMod/android_kernel_samsung_smdk4412" path="kernel/samsung/smdk4412" remote="github" />
<project name="CyanogenMod/android_packages_apps_SamsungServiceMode" path="packages/apps/SamsungServiceMode" remote="github" />
<project name="CyanogenMod/android_hardware_samsung" path="hardware/samsung" remote="github" />
</manifest>
2.3 get-prebuilts
$ cd cmandroid /vendor/cm
$ sudo ./ get-prebuilts //(這一步是為了下載Term.apk並解壓到當前propritary目錄) (只需執行一次,以後編譯無需執行)
2.4 breakfast i9300
$ source build/envsetup.sh
$ breakfast i9300
//(這一步會自動從github下載 三星I9300裝置的驅動和核心; 注意必須是CM官方支援升級到cm11.0的裝置才能使用這個命令下載到//核心和驅動!!!) (只需執行一次,以後編譯無需執行)
錯誤1:
不要想著這兩個命令了,由於網路原因,breakfast這個命令基本上是行不通的。這步會報錯, 因為找不到device i9300。
解決辦法:
直接到
https://github.com/CyanogenMod/android_device_samsung_i9300 https://github.com/CyanogenMod/android_device_samsung_smdk4412-common
下載後解壓到 /device/samsung/i9300和/device/samsung/smdk4412-common
git clone https://github.com/CyanogenMod/android_device_samsung_i9300 -b cm-11.0
其它裝置可以參考
https://github.com/CyanogenMod/android_device_samsung_裝置名 從github上下載。
手機上刷9300 cm11.0的rom 並連線上手機,之前要安裝android sdk,
錯誤2:
IOError: [Errno 13] Permission denied: '.repo/local_manifests/roomservice.xml'
build/core/product_config.mk:238: *** _nic.PRODUCTS.[[device/samsung/i9300/cm.mk]]: "vendor/samsung/smdk4412-common/common-vendor.mk" does not exist. Stop.
** Don't have a product spec for: 'cm_i9300'
** Do you have the right repo manifest?
解決辦法:主要是修改檔案許可權chmod 664 .repo/local_manifests/roomservice.xml
錯誤3:
urllib2.HTTPError: HTTP Error 403: Forbidden
build/core/product_config.mk:238: *** _nic.PRODUCTS.[[device/samsung/i9300/cm.mk]]: "vendor/samsung/smdk4412-common/common-vendor.mk" does not exist. Stop.
解決辦法:
手動下載proprietary_vendor_samsung,copy資料夾i9300和 smdk4412-common到vendor/samsung/目錄下。
2.5 extract-files.sh
cd ~/ home/data/work/cmandroid/device/samsung/i9300
chmod a+x extract-files.sh
$ sudo ./extract-files.sh
首先連線好samsung S3手機,然後來到 /device/samsung/i9300 這個目錄下,執行上面的指令。 這個指令碼的主要作用是將手機中的驅動so庫pull出來,然後新建 /vendor/samsung/i9300這個目錄,然後在裡面放相應的庫檔案。
ok,執行,首先報錯。
錯誤1:
build/core/product_config.mk:238: *** _nic.PRODUCTS.[[device/samsung/n8000/cm.mk]]: "device/samsung/n80xx-common/n80xx-common.mk" does not exist。 停止。
** Don't have a product spec for: 'cm_n8000'
** Do you have the right repo manifest?
解決方法:
https://github.com/CyanogenMod/android_device_samsung_smdk4412-common
這裡面將 n80xx-common 驅動包下載下來,放到/device/samsung/smdk4412-common
這個目錄下,這個目錄本身是沒有的,需要新建。
chmod +x android-cm-10.2/device/samsung/smdk4412-common/extract-files.sh
繼續執行 ./extract-files.sh 這個命令
錯誤2:
remote object '/system/vendor/lib/libWVStreamControlAPI_L1.so' does not exist
remote object '/system/vendor/lib/libwvdrm_L1.so' does not exist
618 KB/s (58560 bytes in 0.092s)
解決辦法:
可以直接將/device/samsung/smdk4412-common/下的東東拷貝到/vendor/samsung/ smdk4412-common/proprietary/system/目錄下;將/device/samsung/i9300/下的東東拷貝到/vendor/samsung/ i9300/proprietary/system/目錄下;
錯誤3:
remote object '/sbin/cbd' does not exist remote object '/system/bin/bcm4330B1_murata.hcd' does not exist remote object '/system/bin/bcm4330B1_semcosh.hcd' does not exist remote object '/system/etc/wifi/bcmdhd_apsta.bin' does not exist remote object '/system/etc/wifi/bcmdhd_mfg.bin' does not exist remote object '/system/etc/wifi/bcmdhd_p2p.bin' does not exist remote object '/system/etc/wifi/bcmdhd_sta.bin' does not exist remote object '/system/lib/libfactoryutil.so' does not exist remote object '/system/lib/libomission_avoidance.so' does not exist remote object '/system/lib/libsecnativefeature.so' does not exist
關於錯誤3 有兩種解決方法,第一種是從
https://github.com/DonkeyCoyote/proprietary_vendor_samsung
連結下面的檔案包含了目前三星裝置絕大部分的device驅動包。
下載到驅動包,然後將缺少的so adb push到手機裡面,然後再./extract-files.sh出來,另外一種是 直接拷貝到相應的 /vendor/samsung/ 目錄下,第二種比較方便,但是可能需要自己新建資料夾,第一種比較自動化,也不容易錯誤。
2.6真正編譯
前面工作主要是為編譯打好基礎,進行編譯平臺的配置,然後可以開始按照官方文件進行編譯了。
$ export USE_CCACHE=1
$ croot
$ brunch i9300
不幸的是,編譯會報錯:
錯誤1:
build/core/product_config.mk:238: *** _nic.PRODUCTS.[[device/samsung/n8000/cm.mk]]: "hardware/samsung/exynos4x12.mk" does not exist。 停止。
** Don't have a product spec for: 'cm_n8000'
** Do you have the right repo manifest?
No such item in brunch menu. Try 'breakfast'
解決辦法:缺少samsung硬體基礎庫。
https://github.com/CyanogenMod/android_hardware_samsung 下載後將裡面的檔案替換到 hardware/samsung/下面。
錯誤2:
Export includes file: external/sepolicy/tools/Android.mk -- /sda5-194G-data/android-cm-10.2/out/host/linux-x86/obj/EXECUTABLES/checkseapp_intermediates/export_includes
Notice file: external/sepolicy/NOTICE -- /sda5-194G-data/android-cm-10.2/out/target/product/n8000/obj/NOTICE_FILES/src//root/seapp_contexts.txt
make: *** 沒有規則可以建立“/sda5-194G-data/android-cm-10.2/out/target/product/n8000/root/sbin/cbd”需要的目標“vendor/samsung/smdk4412-common/proprietary/sbin/cbd”。 停止。
make: *** 正在等待未完成的任務....
Notice file: external/sepolicy/NOTICE -- /sda5-194G-data/android-cm-10.2/out/target/product/n8000/obj/NOTICE_FILES/src//root/sepolicy.txt
解決辦法: 從那個https://github.com/DonkeyCoyote/proprietary_vendor_samsung
下載的proprietary_vendor_samsung-android-4.3/smdk4412-common/proprietary/sbin/cbd
目錄下找找cbd,copy到指定目錄。這裡最好是把system目錄下的東西也都替換掉。
錯誤3:
/usr/bin/ld: cannot open output file external/powertop/csstoh: Permission denied
collect2: ld returned 1 exit status
target Generated: libart <= art/runtime/thread.h
make: *** [external/powertop/css.h] Error 1
make: *** Waiting for unfinished jobs....
解決辦法:
修改external/powertop目錄許可權:chmod 775 external/powertop
-
三、編譯完成和下載
開始真正的編譯,大概3個小時左右編譯完成。
可以看到編譯後包:out/target/product/i9300/cm-11-20140505-UNOFFICIAL-i9300.zip
END
方法/步驟--- SAMSUNG I9300之CM ROM刷機教程
-
I9300刷機教程之4個檔案
三星USB驅動—SAMSUNG_USB_Driver_for_Mobile_Phones.exe
Odin 3.07.rar—刷機平臺,解壓後先放著
CF-SGS3-CWM-v5.5-v1.2.tar—這個檔案別解壓,檔案字尾是tar,我們用它來刷recovery分割槽
root.zip—獲取root的命令和安裝包
-
I9300刷機教程之關機,開始刷recovery
1、開啟Odin3,此時你的手機先不要連線USB;
2、點選軟體內的PDA,把下載的CF-SGS3-CWM-v5.5-v1.2.tar選上;
3、檢查下左側的一些配置:勾選“自動重啟”、“復位時間”兩項;點選PDA按鈕,選擇從剛才下載後解壓出來的recovery檔案,檔案是tar格式的;CF-SGS3-CWM-v5.5-v1.2.tar。如圖:
4、手機先關機狀態,然後同時按住音量下+Home鍵+電源鍵;
5、這時你看到一個警告,選擇continue,按一下音量上鍵;
6、插入你的手機,然後點開始刷機;7、成功後重啟了,恭喜你,你完成了第一步。
-
I9300刷機教程之root
如果是第一次刷機,官方系統是沒法用網上一鍵ROOT工具進行ROOT的,作者是按照如下方式進行的:
1、手機先關機. 按住音量加+Home鍵+電源鍵, 一秒後放開電源鍵,這時recovery就成功載入了
2、選擇"install zip from sdcard",選擇你下載好的root.zip;
3、成功後,重啟你的手機.
-
I9300刷機教程之真正刷機
我們在手機關機的狀態下同時按“音量+ + HOME鍵 + 電源鍵開機”,這是就可以進入到手機的Recovery系統中了。一般的刷機需要首先雙WIPE手機。選擇從內部儲存介質中安裝ZIP刷機包,找到我們拷貝進去的刷機包,按動音量+—進行游標移動,按動電源鍵就可以進行刷機了。
按如下圖示,就可以完成刷機了。
END
相關文章
- android 刷機ROM結構與編譯製作。Android編譯
- MDK編譯過程及檔案型別全解編譯型別
- cesium原始碼編譯除錯及呼叫全過程原始碼編譯除錯
- C語言編譯全過程C語言編譯
- 方舟編譯器開源,華為自家開源平臺面世!(附編譯過程)編譯
- Linux系統下自行編譯安裝MySQL及基礎配置全過程解析Linux編譯MySql
- VS2017平臺編譯 zmq-4.2.5 過程編譯MQ
- 安卓平臺Flutter啟動過程全解析安卓Flutter
- 編譯過程編譯
- gcc 從語言編譯全過程 預處理---->編譯---->彙編----->連結GC編譯
- 編譯原理入門篇|一篇文章理解編譯全過程編譯原理
- 安卓手機如何刷入ROM包安卓
- 使用DOClever介面管理平臺安裝部署全程實錄過程,基於liunx平臺
- Javac編譯過程Java編譯
- 編譯核心過程編譯
- 編譯器的編譯基本過程編譯
- 跨平臺編譯編譯
- Android機型rom下載,刷機方法Android
- 校園交易平臺後臺系統git操作全過程Git
- 編譯連結過程編譯
- 編譯過程簡介編譯
- C++ 編譯過程C++編譯
- 全棧交叉編譯X86完成過程經驗分享全棧編譯
- 【OpenWrt】N1刷機過程及旁路由設定(通用)路由
- 編譯安裝基於nginx與lua的高效能web平臺-openresty編譯NginxWebREST
- DNS解析全過程及原理DNS
- ios底層 編譯過程iOS編譯
- 編譯器的工作過程編譯
- EVC編譯TCPMP的過程編譯TCP
- .NET 程式碼編譯過程編譯
- glade 編譯過程 (轉)編譯
- Go跨平臺交叉編譯Go編譯
- 編譯arm平臺的ethtool編譯
- Mac平臺反編譯Unity編譯的安卓apkMac編譯Unity安卓APK
- GCC編譯過程(預處理->編譯->彙編->連結)GC編譯
- 攜程基於Flink的實時特徵平臺特徵
- oracle儲存過程編譯死掉的原因及解決(zt)Oracle儲存過程編譯
- GCC編譯和連結過程GC編譯