Android系統之Recovery移植教程 【轉】


本文轉載自:http://luckytcl.blog.163.com/blog/static/14258648320130165626644/

recovery的移植,這方面的資料真實少之又少啊,谷歌了幾天,文章也就那幾篇而已,更別提國內的資料了。
你讓我們熱愛學習的小白情何以堪。於是乎就開始動手了,編譯的過程中,自己做了一些隨筆的記錄。
把自己遇到的一些問題和解決辦法都記錄了下了,放在自己的筆記里了。今天整理出來,和大家共享一下。
 
   本教程是針對有一定基礎的人。如果你不會Ubuntu,不會環境的搭建。那你還是先學習一下吧。
裝Ubuntu各種各樣的教程,網上一找一大堆。
 
   教程所用的系統為 Ubuntu12.04,示例機型為 中興N880E。源碼目錄為~/android/system/。
 
  碼字不容易,你懂的。。。。。。。
 
 
 
源碼的同步大家可以看官方文檔,教程直接從源碼同步完后開始。
 
1、同步源碼到最新,我同步的源碼目錄為~/android/system/,要改為自己的源碼目錄,下面每一步也一樣。
 
1.cd ~/android/system/
2.repo sync -j16
 
2、更新完成后,執行下面命令,完成環境的安裝
 
1../build/envsetup.sh
輸出結果:
Android系統Recovery的移植教程 - 追夢 - ..... 追夢網  .....
 
 3、下一步,make我們后面要用到的工具
 
1.make -j4 otatools
輸出結果:
Android系統Recovery的移植教程 - 追夢 - ..... 追夢網  .....
 
執行完成后的輸出:
Android系統Recovery的移植教程 - 追夢 - ..... 追夢網  .....
 
會生成out目錄,在/out/host/linux-x86/bin中有后面要用到的工具。
 
4、將/out/host/linux-x86/bin加入環境變量,變量具體位置要改成你的:
gedit ~/.bashrc
在文本最后添加:
export PATH=$PATH: ~/android/system/out/host/linux-x86/bin
Android系統Recovery的移植教程 - 追夢 - ..... 追夢網  .....
 
保存退出,執行下面命令,讓剛加的環境變量生效:
 
source ~/.bashrc
5、從官方包中,別人的ROM包也可以,拿出boot.img。我放到了~/android/目錄。
 
6、開始建立我們N880E的device目錄:
./build/tools/device/mkvendor.sh zte n880e ~/android/boot.img
命令參考:
./build/tools/device/mkvendor.sh device_manufacturer_name device_name /your/path/to/the/boot.img
命令輸出為:
Android系統Recovery的移植教程 - 追夢 - ..... 追夢網  .....

 此時在/device/zte/中就會有你的機型n880e了,里面有你的配置文件:AndroidBoard.mk,AndroidProducts.mk, BoardConfig.mk, device_.mk, kernel, system.prop,recovery.fstab, and vendorsetup.sh.


7、修改配置文件:
 
在這里很重要的一個文件就是recovery.fstab,是你手機里各個設備分區對應的掛載點,可以理解為手機的分區表。如果這個文件有錯誤,那么進入recovery后,會提醒分區掛載失敗。
這個文件我們可以從官方的recovery.img提取出來。也可以直接解包別人編譯好的recovery,得到recovery.fstab
當然,我們也可以自己動手寫。目前,自己也沒發現什么簡潔一點的辦法。我是查看刷機包中的updater-script文件中各個分區的掛載點和
cat /proc/mount
輸出結果:
Android系統Recovery的移植教程 - 追夢 - ..... 追夢網  .....
 
cat /proc/partitions
 
輸出結果:
Android系統Recovery的移植教程 - 追夢 - ..... 追夢網  .....
 一個個排除定位出來的。
大家有好的辦法,可以共同探討。
這里有一個分區表比較全的recovery.fstab,大家可以按照自己手機的分區表修改。
 
8、開始編譯,執行命令:
./build/envsetup.sh && lunch full_n880e-eng
(把n880e替換為自己的機型)
輸出結果:
Android系統之Recovery移植教程 - 追夢 - ..... 追夢網  .....
 下一步命令,編譯開始:
make -j4 recoveryimage
最后成功時輸出結果:
Android系統之Recovery移植教程 - 追夢 - ..... 追夢網  .....
 
輸出的目錄為:out/target/product/n8880e/recovery.img文件,就是我們要的。
 
注意事項:
1、 編譯時間:實體機,一兩分鍾的樣子(i3-380、2GBDDR3)
2、 異常處理:(都是自己編譯過程中遇到的筆錄,非官方)
 
錯誤1:
執行
./build/envsetup.sh
命令后,提示某些設備文件不存在。
這是自己當初在CM7源碼下編譯出現的,因為自己沒有把所有的設備的源碼同步下來,一些設備自己在~/android/system/.repo/manifest.xml中用注釋掉了,所以同步完源碼后要修改vendor/cyanogen/products/AndroidProducts.mk 文件,把沒有同步的設備刪除掉。重新執行命令就行了。
 
錯誤2:
在編譯的最后,提示出錯 “Boot.img is too large”,自己當時的解決辦法是修改BoardConfig.mk:
# fix this up by examining /proc/mtd on a running device
BOARD_BOOTIMAGE_PARTITION_SIZE := 0x01000000
BOARD_RECOVERYIMAGE_PARTITION_SIZE := 0x01000000
BOARD_SYSTEMIMAGE_PARTITION_SIZE := 0x19000000
BOARD_USERDATAIMAGE_PARTITION_SIZE := 0xA0000000
BOARD_FLASH_BLOCK_SIZE := 131072
將后面的十六進制改為自己手機分區的大小,要把兆轉換為KB,再轉換為十六進制,然后替換0x后面的數字(0x表示十六進制)。
另一種解決辦法,就在下面幾篇參考文檔中剛看的,未實踐:
打開源碼目錄中的Build/Core/definitions.mk,將1688 – 1694行替換為:
# if [ "$total" -gt "$maxsize" ]; then \
# echo “error: $printname too large ($total > [$(2) - $reserve])”; \
# false; \
#el
if [ "$total" -gt $((maxsize - 32768)) ]; then \
echo “WARNING: $printname approaching size limit ($total now; limit $maxsize)”; \
fi \
然后保存。重新編譯即可。
 
錯誤3:
執行7中的第一個命令時,提示lunch未安裝:
Android系統之Recovery移植教程 - 追夢 - ..... 追夢網  .....

 解決辦法:

執行
source build/envsetup.sh
再執行上面命令就OK 了。
Android系統之Recovery移植教程 - 追夢 - ..... 追夢網  .....
 
 recovery_ui.c 這個文件里面是手機各按鍵對應的按鍵值,這樣寫入之后才能正確選擇按鍵。
對按鍵的修改根據不同的機型具體分析吧。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM