日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

ClockworkMod Recovery实现应用android一键化在线卡刷升级

發布時間:2023/12/10 编程问答 39 豆豆
生活随笔 收集整理的這篇文章主要介紹了 ClockworkMod Recovery实现应用android一键化在线卡刷升级 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

?

?1、android設備系統簡介

android 設備在內置的Flash設備劃分了很多分區。每個分區有不同的功能作用,介紹幾個主要的:

?

boot:

這個分區裝載的是linux kernel這個就是操作系統的鏡像,系統從bootloader起來以后就是通過加載boot鏡像來啟動和管理整個手機的硬件和軟件的,比如掛載其他分區,SD卡,加載系統APK應用等等一系列工作,他就是整個手機的大腦。

recovery:

這個分區也包含了linux kernel鏡像,只不過啟動之后只加載一些簡單的分區,提供簡單的界面提供給用戶進行卡刷、清除數據、清除緩存以及分區數據備份的功能。本人之后介紹的一鍵在線升級就是通過recovery模式進行加載的;

system:

這個分區存儲了主要的系統應用,以及系統啟動所有必要的服務的執行bin文件。這個分區被掛載以后是RO寫保護的,如果需要對這個分區進行處理的話是需要一些重掛載的操作的。

cache: 這個分區存儲了緩存數據,一般都是不重要的數據;

data: 這個分區是所有應用的數據主要存儲區,在data/data目錄中按照每個應用的包名存放數據,android中每個應用的共享數據、SQLITE數據都是默認存儲在這里。比如說常用的設置、短信、聯系人等等都是如此。

?

Adb shell

Cat /proc/mtd

可以看到掛載的設備

?

dev:??? size?? erasesize? name

mtd0: 00080000 00020000 "obm"

mtd1: 00080000 00020000 "bootloader"

mtd2: 00040000 00020000 "ramdisk"

mtd3: 00040000 00020000 "imei"

mtd4: 00700000 00020000 "arbelbinary"

mtd5: 00100000 00020000 "msabinary"

mtd6: 00400000 00020000 "kernel"

mtd7: 00400000 00020000 "maintenance"

mtd8: 00500000 00020000 "recovery"

mtd9: 00040000 00020000 "misc"

mtd10: 03d40000 00020000 "cache"

mtd11: 0be00000 00020000 "system"

mtd12: 0d200000 00020000 "userdata"

mtd13: 00800000 00020000 "nvm"

mtd14: 00800000 00020000 "telephony"

mtd15: 00200000 00020000 "reserved"

mtd16: 00a00000 00020000 "MRVL_BBM"

?

2、recovery 流程介紹

?

我們不談論如何下載升級包的過程,從卡上存放了一個update.zip作為前提。

?

系統是如何知道我們在界面選擇了升級包后并幫我們一鍵升級的呢

?

????????? 正常主系統在啟動進入bootload的時候會檢查一個BCB數據塊的命令,如果有reboot-recovery命令標志的話則加載recovery.img系統鏡像,如果沒有的話則正常加載boot.img系統就是我們手機的正常啟動過程了(掛載設備、按照init.rc配置進行進程服務的加載)

?

?

參考:http://blog.csdn.net/mu0206mu/article/details/7464987

?

BCBbootloaderRecovery的通信接口,也是BootloaderMain system之間的通信接口。存儲在flash中的MISC分區,占用三個page,其本身就是一個結構體,具體成員以及各成員含義如下:

? ? ? ? ? ? ?struct bootloader_message{

? ? ? ? ? ? ? ? ? ? ? ?char command[32];

? ? ? ? ? ? ? ? ? ? ? ?char status[32];

? ? ? ? ? ? ? ? ? ? ? ?char recovery[1024];

? ? ? ? ? ? ? };

? ? ? ? ? ? command成員:其可能的取值我們在上文已經分析過了,即當我們想要在重啟進入Recovery模式時,會更新這個成員的值。另外在成功更新后結束Recovery時,會清除這個成員的值,防止重啟時再次進入Recovery模式。

? ? ? ? ? ? status:在完成相應的更新后,Bootloader會將執行結果寫入到這個字段。

? ? ? ? ? ? recovery:可被Main System寫入,也可被Recovery服務程序寫入。該文件的內容格式為:

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?“recovery\n

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?<recovery?command>\n

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?<recovery?command>”

?

????????? 進入recovery模式后,系統會從cache/recovery/command文件讀取執行命令(清除數據、緩存,備份,卡刷升級等等操作)

?

cache/recovery/command文件的來歷:

在一鍵升級的時候,系統首先將“--update_package=root:path”寫入cache/recovery/command文件

/cache/recovery/command:這個文件保存著主系統傳給Recovery的命令行,每一行就是一條命令,支持一下幾種的組合。

--send_intent=anystring ? //write the text out to recovery/intent ? ?Recovery結束時在finish_recovery函數中將定義的intent字符串作為參數傳進來,并寫入到/cache/recovery/intent

--update_package=root:path ? //verify install an OTA package file ? ??Main system將這條命令寫入時,代表系統需要升級,在進入Recovery模式后,將該文件中的命令讀取并寫入BCB中,然后進行相應的更新update.zip包的操作。

--wipe_data ? ?//erase user data(and cache),then reboot。擦除用戶數據。擦除data分區時必須要擦除cache分區。

--wipe_cache ? //wipe cache(but not user data),then reboot。擦除cache分區。

?

????????? 根據讀取的命令recovery系統使用/sbin/recovery執行文件來執行命令(清除數據、緩存,備份,卡刷升級等等)

?

做完之后系統reboot,同時刪除BCB控制塊reboot-recovery命令標志,并且刪除cache/recovery/command文件(如果不這樣做的話,系統進一直循環進入recovery模式)

?

?

當然了,升級過程中有任何問題,可以在cache/recovery/log文件查看,該文件存儲了升級過程中的所有打印LOG

?

3、第三方Recovery鏡像介紹

http://wiki.cyanogenmod.com/wiki/Howto:_Using_the_Recovery

?

?

一下兩個是比較有名的recovery工具,如果需要使用的話,要去官網看下支持的機型,不能亂用的哦,小心你的手機變磚。

?

http://www.clockworkmod.com/rommanager這個網址是ClockworkMod Recovery配套的ROM Manager應用支持的機型,一般這個支持的話,你的手機肯定是支持ClockworkMod Recovery的。

?

ClockworkMod Recovery Amon_Ra's Recovery都是很有名的第三方 Recovery,功能都很強大,不過前者的使用者更多。它們兩者包括的功能與區別如下。

?

?

ClockworkMod Recovery功能包括:

1. reboot system now:重啟系統

2. apply update from sdcard:從SD卡升級update.zip升級包

3. wipe data/factory reset:擦除數據/恢復出廠設置

4. install zip from sdcard:從SD卡安裝zip升級包

5. backup and restore:備份與恢復

6. mounts and storage:裝載于卸載各個區與存儲器

7. advanced:高級,如對SD卡進行分區,清除 Dalvik緩存等

8. power off:關機

?

?

Amon_Ra's Recovery? 功能包括:

1. Reboot system now:重啟系統

2. USB-MS toggle:把手機和外置SD卡當做USB大容量存儲器

3. Backup/Restore:備份與恢復

4. Flash zip from sdcard:從SD卡刷zip升級包

5. Wipe:擦除數據

6. Partition sdcard:對SD卡進行分區

7. Mounts:裝載或卸載各個分區

8. Other:其他,如修復APK UID錯誤

9. Power off:關機

?

4、利用Clockwork Mod進行擴展一鍵升級升級

http://wifihack.net/blog/2012/04/android-clockworkmod-recovery-system-updat/

?

android原生的recovery升級流程不一樣的是,Clockwork Mod可以進行擴展定制升級并取消簽名驗證(CWM如果要取消簽名驗證進行升級,不能使用Android默認的)

?

刪除 /cache/recovery/command文件,確保沒有該文件

/cache/recovery/extendedcommand寫入相關的升級命令。

同時要在 /sdcard/clockworkmod/.recoverycheckpoint文件做相關的標記。

?

Clockwork Mod相關的腳本見下:

http://pastebin.com/c7S8Nxu4

?

????????? ui_print("ROM Manager Version 4.2.0.2");

????????? restore_rom("/sdcard/clockworkmod/backup/2011-05-13-13.03.52", "boot", "system", "data", "cache", "sd-ext");

????????? backup_rom("/sdcard/clockworkmod/backup/2011-05-13-13.23.20");

????????? install_zip("/sdcard/DRockstar.Clean.Kernel.EC05.v1.04.zip");

????????? backup_rom("/sdcard/clockworkmod/backup/2011-05-13-13.30.09");

????????? run_program("/cache/dowipedalvikcache.sh");

????????? format("/cache");

????????? format("/data");

????????? format("/sd-ext");

?

包含了打印、備份、恢復、升級、格式化。

?

是不是迫不及待的想看看我們的源碼了,下面貼出主要的部分,具體可以參見本文章的結尾處的附件代碼

?

?

FileWritercheckpoint =newFileWriter(CLOCK_WORK_MOD_CHECKPOINT_FILE);

?

??????? try {

??????????? checkpoint.write("1");

??????????? checkpoint.write("\n");

??????? } finally {

??????????? checkpoint.close();

??????? }

?

??????? FileWritercommand =newFileWriter(EXTENDED_FILE);

?

??????? try {

??????????? command.write("ui_print(\"ZPad ROM Manager Version:\"); ");

??????????? command.write("\n");

??????????? command.write("ui_print(\"2012.4.18\");");

??????????? command.write("\n");

??????????? command.write("ui_print(\"Preparing to install ROM...\");");

??????????? command.write("\n");

??????????? //assert(install_zip("/sdcard/update/kvbian-rom-signed-20120417-2112.zip"));

??????????? command.write("format(\"/cache\");");

??????????? command.write("\n");

??????????? command.write("assert(install_zip(\"" +ROMPATH?+"\"));");

??????????? command.write("\n");

??????? } finally {

??????????? command.close();

??????? }

???????

??????? /**

???????? * boot-recovery

???????? * recovery

???????? */

??????? // Having written the command file, go ahead and reboot

??????? PowerManagerpm = (PowerManager)this.getSystemService(Context.POWER_SERVICE);

??????? //pm.reboot("recovery");

??????? pm.reboot("recovery");

?

?

效果圖:

?

?

附件代碼的下載地址:

android一鍵recovery升級程序實例

總結

以上是生活随笔為你收集整理的ClockworkMod Recovery实现应用android一键化在线卡刷升级的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。