android原始碼學習之原始碼編譯並nexus s真機刷機

poclist發表於2016-09-17
一、使用原廠映象對nexus s刷機
在開啟的頁面中選擇Factory Images "soju" for Nexus S下面的三個鏡象,這裡選擇4.0.4 (IMM76D),
下載好是soju-imm76d-factory-ca4ae9ee.tgz,解壓,並把fastboot.zip包下面的那些工具拷到soju目錄下,
adb reboot bootloader // bootloader介面,fastboot介面
sh flash-all.sh或者雙擊flash-all.bat
2. 解鎖並刷入recovery.img
1) 解鎖。
要想獲得root許可權,必須解鎖。如果已解鎖就不要再執行unlock了。
adb reboot bootloader // 進入bootloader介面。 開機時按住音量上+電源
fastboot oem unlock //注意這步會刪除掉SD卡、ROM中的原有內容,請在之前做好備份
2) 刷入recovery並root 
把ROOT&BusyBox_Patch.zip放入手機sdcard,執行:
adb reboot bootloader // 開機時按住音量上+電源
fastboot flash recovery recovery.img // v4.0.1.4
刷完後不要重啟,否則recovery會被恢復到原版。直接由bootloader介面進入recovery,點選install zip from sdcarcd,選擇ROOT&BusyBox_Patch.zip,搞完後重啟。
獲取root失敗,需要通過百度一鍵root工具進行root.

i9300的root:
adb reboot bootloader // 進入bootloader介面
開啟執行Odin3v3.06.exe,勾選AutoReboot/F.Reset Time兩項,點選PDA按鈕,從刷機工具包中選擇CF-Root-SGS3-recovery.tar。

adb reboot recovery //進入recovery介面

二、自己編譯android原始碼並刷到nexus s裝置中
1. 下載原始碼(這裡我選擇android4.0.4_r1.1):
mkdir android4.0.4_r1.1
cd android4.0.4_r1.1
curl https://dl-ssl.google.com/dl/googlesource/git-repo/repo > ./repo
chmod a+x repo
開啟https://android.googlesource.com/new-password開啟,申請結果拷貝到~/.netrc
./repo init -u https://android.googlesource.com/platform/manifest -b android4.0.4_r1.1
如果下載失敗,則改為以下重試:
./repo init -u https://android.googlesource.com/a/platform/manifest -b  android4.0.4_r1.1

最後./repo sync下載

注:關於版本的選擇
https://developers.google.com/android/nexus/images 上看,我手上的裝置港版i9023只能刷soju,
2.3.6 (GRK39F)
4.0.4 (IMM76D)
4.1.2 (JZO54K)
所以我就選擇以上的原始碼之一進行編譯,從http://source.android.com/source/build-numbers.html中查一下,以上三種原始碼對應的括號裡的程式碼,這裡我選擇IMM76D,找到android-4.0.4_r1.1

2. 編譯原始碼
1) 在編譯之前要設定好vendor目錄。開啟http://source.android.com/source/building-devices.html,找到“Obtaining proprietary binaries”,按說明操作:
開啟https://developers.google.com/android/nexus/drivers,搜尋IMM76D,在Binaries for Nexus S ("crespo")目錄下找到Nexus S binaries for Android 4.0.4 (IMM76D to IMM76L),這裡有五個link連結,下載下來,各自解壓放到原始碼根目錄下,依次執行sh extract-xxxx.sh並輸入I ACCEPT。最後你會發現原始碼根目錄下增加了vendor目錄。
2) 編譯
. build/envsetup.sh
lunch (顯示所有選項,輸入full_crespo-userdebug前面的數字)
make clobber //刪除所有配置所編譯輸出的結果檔案。類似於:rm –rf ./out/
make -j16

注:其他make命令
make clean 刪除本次配置所編譯輸出的結果檔案。類似於:rm –rf ./out/ <configuration>
make LOCAL_MODULE:編譯一個單獨得模組(需要有Android.mk檔案存在)。
make targets:將輸出所有擬可以編譯的模組名稱列表。

3. 將編好的img檔案刷到nexus s手機中:
編譯完成後進入out/target/product/crespo目錄檢視,
將boot.img和system.img拷到fastboot目錄下,
adb reboot bootloader
執行:
fastboot -w -p flashall
fastboot flash boot boot.img
fastboot flash recovery recovery.img
fastboot flash system system.img
fastboot flash userdata userdata.img
//fastboot flash cache cache.img
//fastboot flash ramdisk ramdisk.img
完了以後重啟手機檢視手機版本號4.0.3

總結:這樣就可以在真機上執行我們自己編譯原始碼的鏡象,就不用每次依賴模擬器來學習原始碼了。

其他falsh命令參考:
fastboot flash recovery recovery.img
fastboot flash userdata userdata.img
fastboot flash ramdisk ramdisk.img
更多fastboot命令參考上文中flash-all.sh
參考:


===========================
2015.10.31 
編譯android4.1.2_r1 需要java6,ubuntu12.04上安裝java6的方法:
1. 在/etc/apt/sources.list 末尾加上如下行:
###for install Java6
deb http://ppa.launchpad.net/ferramroberto/java/ubuntu natty main
2. sudo apt-get update 
  更新索引時候提示:
   W: GPG 錯誤:http://ppa.launchpad.net natty Release: 由於沒有公鑰,無法驗證下列簽名: NO_PUBKEY B725097B3ACC3965
3. 下載安裝這個key
   sudo apt-key adv --recv-key --keyserver keyserver.ubuntu.com B725097B3ACC3965
4. sudo apt-get update
5. sudo apt-get install sun-java6-jdk sun-java6-jre sun-java6-plugin ( 你也許還要:sudo apt-get install sun-java6-demo sun-java6-source)
6. 安裝完後,系統默任被切換到 java6上來
7. 安裝完畢後把 /etc/sources.list 增加的兩行註釋掉然後sudo apt-get update 以避免升級安裝之混亂
8. 如果你的系統之前安裝過預設java7,如果你覺得想回來練練。可以這樣來回切換java的版本:
     sudo update-java-alternatives -s java-7-oracle
     sudo update-java-alternatives -s java-6-sun
   當然驗證java的版本的方法是:  java -version; javac -version 

============================
2015年11月2日 星期一 
刷機
adb reboot bootloader//重啟進入fastboot模式
adb reboot recovery // recovery介面

編譯
make snod//產生一個新的系統映像system.img
make ramdisk//編譯ramdisk
make userdataimage//編譯userdata
make systemimage//編譯system
make bootimage//編譯kernel 

相關文章