安裝存儲(chǔ)卡中的update.zip升級(jí)包(你可以把刷機(jī)包命名為update.zip然后用這個(gè)選項(xiàng)直接升級(jí))
開(kāi)啟Recovery模式下的USB大容量存儲(chǔ)功能(也就是說(shuō)可以在Recovery下對(duì)內(nèi)存卡進(jìn)行讀寫(xiě)操作)
清空電池調(diào)試記錄數(shù)據(jù)(刷機(jī)前做下這個(gè),會(huì)比較好,感覺(jué)自己電量有問(wèn)題的機(jī)油也可以試試)
APK:
APK 是Android Package 的縮寫(xiě),即Android安裝包。APK 相當(dāng)于電腦上的exe文件或者塞班上的sis文件。
ROM、RUU: ROM,是用來(lái)刷你手機(jī)系統(tǒng)的數(shù)據(jù)文件,也就是Android 系統(tǒng)的封裝包,通過(guò)手機(jī)的工程模式解壓安裝到手機(jī)中形成你手機(jī)的操作系統(tǒng)。
簡(jiǎn)單來(lái)說(shuō)就是手機(jī)固件,相當(dāng)于電腦的系統(tǒng),我們刷機(jī)也就是重新安裝這部分。
官方原版ROM 就是RUU,(相當(dāng)于原版Windows XP)首先他是一個(gè)最安全的升級(jí)工具,可以讓我們安全的升級(jí)ROM (一定要對(duì)應(yīng)的機(jī)型)。
當(dāng)我們?cè)谒C(jī)過(guò)程中由于不當(dāng)?shù)牟僮骰虬姹具x擇的錯(cuò)誤,導(dǎo)致無(wú)法啟動(dòng),可以使用官方的RUU 程序來(lái)恢復(fù)系統(tǒng),等于說(shuō),這是一個(gè)救命道具。
Radio: Radio指代的是通訊模塊,就是手機(jī)里面負(fù)責(zé)信號(hào)部分的模塊,PDA類型的手機(jī),基本都強(qiáng)調(diào)這么個(gè)概念。一個(gè)是PDA,一個(gè)是手機(jī)(貌似是句廢話- -),舉個(gè)很簡(jiǎn)單的例子,以三星的PPC手機(jī)為例,比如i718.比如i908,他們?cè)谒C(jī)的時(shí)候(所謂刷機(jī)就是重裝系統(tǒng))一般都是分兩部分,第一部分刷 手機(jī)部分,第二部分刷PDA部分,而且兩部分基本不相干。
app2sd: Google 手機(jī)的軟件為了安全性和穩(wěn)定性都是默認(rèn)安裝到手機(jī)內(nèi)存里,但是手機(jī)內(nèi)存有限,所以我們會(huì)做app2sd 操作,來(lái)讓我們安裝的軟件放到sd卡上,而Google 的android 系統(tǒng)是基于Linux 的,所以存儲(chǔ)卡上本身的Fat 格式是不會(huì)被識(shí)別的,所以我們要分區(qū)(第二分區(qū))出來(lái),格式成Linux 認(rèn)識(shí)的ext2 或3 或4 格式,在用鏈接命令,把這個(gè)分區(qū)映射成一個(gè)系統(tǒng)文件夾system/sd(大概這個(gè)意思),把所有的軟件裝到這個(gè)“文件夾”下,這就是app2sd 的操作。需要ROM 支持并開(kāi)啟app2sd 功能。
app2sd 的操作其實(shí)是犧牲了一部分軟件的速度和穩(wěn)定性來(lái)?yè)Q取更多的手機(jī)內(nèi)存安裝更多的軟件。另外,app2sd只是把軟件放到了sd卡上,運(yùn)行軟件還是需要占用手 機(jī)的內(nèi)存的,所以,你裝了軟件之后,一般手機(jī)內(nèi)存還是會(huì)減少一些。你如果安裝的軟件在70個(gè)以內(nèi),個(gè)人覺(jué)得沒(méi)有必要,呵呵,如果很多游戲軟件除外。此外, 使用app2sd 最大的好處就是,刷一個(gè)帶app2sd 的rom 之后,以后升級(jí)這個(gè)rom(依然帶app2sd)的時(shí)候,你的軟件都會(huì)完整保存(個(gè)別除外,比如htc input chinese需要重新添加幾個(gè)文件到system/lib下),不過(guò)很多ROM 是需要Wipe ext 分區(qū)的,也就不能保留了。
目前來(lái)看我們現(xiàn)在所使用的Android 各種軟件暫時(shí)還沒(méi)有進(jìn)行app2sd 的必要。
簡(jiǎn)單來(lái)說(shuō)就是把程序安裝到內(nèi)存卡里面
注:為了適應(yīng)用戶需求,從android 2.2開(kāi)始 android系統(tǒng)已經(jīng)支持安裝軟件到sd卡。
root: root 就是你手機(jī)的boss,它可以訪問(wèn)和修改你手機(jī)幾乎所有的文件,這些東西可能是制作手機(jī)的人不愿意你修改和觸碰的東西,因?yàn)樗麄冇锌赡苡绊懙绞謾C(jī)的穩(wěn)定,還容易被一些hacker 有機(jī)會(huì)入侵你的手機(jī)(貌似還沒(méi)有出來(lái)這類黑客)。
既然root 這么危險(xiǎn),我們?yōu)槭裁催€要去獲取它?其實(shí)用root 的權(quán)限主要是因?yàn)槲覀兩谔斐覀兒芏鄸|西是受限制的,我們只能利用這些權(quán)限來(lái)做我們被限制的去做的事情,比如Google 禁止我們看到市場(chǎng)里很多免費(fèi)或付費(fèi)軟件,我們可以用marketenabler 來(lái)進(jìn)去看;再比如國(guó)慶以來(lái)GFW 把我們的市場(chǎng)干掉了,很多朋友只能看不能下,不能綁定gmail,我們可以修改hosts 來(lái)搞定他們,但這些都需要root權(quán)限。
比如目前所有在hero 上截屏的軟件都需要root 權(quán)限,沒(méi)有root 權(quán)限,像Drocap、Shootme、Picme等等這類截屏軟件就不能使用(當(dāng)然,我們可以連線電腦,使用 91助手在電腦上截取自己想要的hero 屏圖)。個(gè)人覺(jué)得,除非必要,不要總是去想著獲取root。
ROOT就是手機(jī)的最高權(quán)限,相當(dāng)于塞班的XX權(quán)限,可以對(duì)系統(tǒng)文件進(jìn)行操作。
SPL: SPL全稱“Secondary Program Loader”,中文名叫做二次程序載入器,負(fù)責(zé)檢測(cè)ROM和硬件,尋找系統(tǒng)啟動(dòng)分區(qū)并裝載ROM的其它部分。
簡(jiǎn)單來(lái)說(shuō),就是俗稱的刷機(jī)安全套件,保證您在刷機(jī)失敗時(shí)也不會(huì)變磚頭,通??煞譃?#8220;Hard-SPL”和“Soft-SPL”兩種。XX手機(jī)也就是XX的這個(gè)部分。
recovery: recovery 就是你用 home 鍵+開(kāi)機(jī)鍵 開(kāi)機(jī)后能進(jìn)入的一個(gè)界面(工程模式),在這個(gè)界面你可以直接用sd 卡上的zip 的rom 升級(jí)或者備份你的系統(tǒng),老版本的recovery 只有三個(gè)選項(xiàng),無(wú)法備份系統(tǒng),只能用update.zip這個(gè)文件名的文件升級(jí),不能用任何文件名的zip文件升級(jí)。新版本已經(jīng)多出很多選項(xiàng)可以供你操 作。
此外,一般刷rom 之前最好wipe一下(wipe只是抹除rom 以外的個(gè)人數(shù)據(jù),不會(huì)影響rom 本身),也就是返回出廠設(shè)置一下比較好,但是這樣就會(huì)丟失你的所有軟件,短信彩信,聯(lián)系人(備份在google上沒(méi)有關(guān)系)和設(shè)置等等,備份或者不 wipe 都可以。
目前最新版為:RA-hero-v1.6.2
說(shuō)說(shuō)RA-hero-v1.6.2里的對(duì)應(yīng)的說(shuō)明:
1、Reboot system now——重啟
2、USB-MS toggle——在recovery 模式下直接連接USB而不需要退出該模式
3、Backup/Restore——備份和還原
3-1、Nand backup——Nand 備份
3-2、Nand + ext backup——Nand 備份(系統(tǒng)和ext 分區(qū)一同備份)
3-3、Nand restore——還原(就是還原3-1、3-2 的最后一次備份)
3-4、BART backup——BART 備份 (包括系統(tǒng)和ext 分區(qū))
3-5、BART restore——還原最后一次的BART備份
Nand 備份類似于系統(tǒng)的備份 而B(niǎo)ART 則像是PC 上ghost 的備份。
Nand 備份 它不會(huì)備份ext 分區(qū)(就是第二分區(qū) 沒(méi)有分區(qū)的可以不管這個(gè))
所以你的如果app2sd 了 那么裝在第二分區(qū)的程序用Nand 恢復(fù)是辦不到的
BAR T則可以備份到ext 分區(qū) 用BART 恢復(fù)則可以恢復(fù)整個(gè)系統(tǒng) 可以使它和你備份前一模一樣,
不會(huì)有一點(diǎn)文件信息的丟失(包括聯(lián)系人、短信、圖片、影音等,所以如果你裝的東西比較多,那么備份和恢復(fù)會(huì)比較慢)
4、Flash zip from sdcard——從sd卡根目錄的.zip ROM 刷機(jī)包刷機(jī)
5、Wipe——清除
5-1、Wipe data/factory reset——清除內(nèi)存數(shù)據(jù)和緩存數(shù)據(jù)(刷機(jī)前建議清除此項(xiàng))
5-2、Wipe Dalvik-cache——清除緩存數(shù)據(jù) + ext 分區(qū)內(nèi)數(shù)據(jù)(刷機(jī)前建議清除此項(xiàng))
5-3、Wipe SD:ext partition——只清除ext 分區(qū)內(nèi)數(shù)據(jù)(刷機(jī)前建議清除此項(xiàng))
5-4、Wipe battery stats——清除電池?cái)?shù)據(jù)(刷機(jī)前建議清除此項(xiàng))
5-5、Wipe rotate settings——清除傳感器內(nèi)設(shè)置的數(shù)據(jù)(刷機(jī)前建議清除此項(xiàng))
6、Partition sdcard——分區(qū)sd 卡
6-1、Partition SD——自動(dòng)為sd 卡分區(qū)
6-2、Repair SD:ext——修復(fù)ext 分區(qū)
6-3、SD:ext2 to ext3——將ext2 分區(qū)轉(zhuǎn)換為ext3 分區(qū)(推薦)
6-4、SD:ext3 to ext4——將ext3 分區(qū)轉(zhuǎn)換為ext4 分區(qū)(C4 卡不推薦,C6 卡推薦)
7、Other——其它
7-1、Fix apk uid mismatches——修復(fù)apk 程序
7-2、Move apps+dalv to SD——移動(dòng)程序和虛擬緩存到sd 卡(這個(gè)可不是 app2sd)
7-3、Move recovery.log to SD——移動(dòng)刷機(jī)日志文件到sd 卡
(執(zhí)行此操作后,sd 卡根目錄會(huì)出現(xiàn)一個(gè)“recovery.log” 文件 即為刷機(jī)日志文件)
8、Power off——關(guān)機(jī)
fastboot:
從字面上來(lái)看是【快速啟動(dòng)】的意思,也算是一個(gè)刷機(jī)界面,不過(guò)比recovery更加底層.這個(gè)底層是更加接近硬件層的意思.
兩個(gè)都很重要,不過(guò)fastboot更為主要.當(dāng)你不能進(jìn)入recovery的時(shí)候,不要緊張,你還能進(jìn)fastboot挽救,不過(guò)當(dāng)你連fastboot都不能進(jìn)入的時(shí)候,那可真就是磚了.
通俗的說(shuō) recovery就好比外套,fastboot就好比內(nèi)褲.當(dāng)你的外套沒(méi)了的時(shí)候,你還有內(nèi)褲,這個(gè)時(shí)候頂多被人說(shuō)成是臭流氓.不過(guò)當(dāng)你內(nèi)褲都沒(méi)了的時(shí)候,那可就是耍流氓了,到時(shí)會(huì)有警察叔叔請(qǐng)你喝茶的.
為了使用Fastboot功能.您必須root您的設(shè)備.并獲得S-OFF的SPL.你的電腦還必須裝有ADB驅(qū)動(dòng).
進(jìn)入Fastboot的方式是關(guān)機(jī)狀態(tài)下按返回+開(kāi)機(jī).
Fastboot使用方式: fastboot [ <選項(xiàng)> ] <命令> 解釋:
[]括起來(lái)表示這個(gè)是可選的.
<>括起來(lái)表示這個(gè)是必須的.
可用命令: update <文件名> 從官方update.zip升級(jí)系統(tǒng).該update.zip必須是官方的
flashall 'flash boot' + 'flash system'
flash <分區(qū)名> [ <文件名> ] 將文件寫(xiě)入分區(qū).文件必須正確的格式.分區(qū)名有但不限于system,recovery,boot,splash1,hboot,radio,userdata,cache
erase <分區(qū)名> 清空一個(gè)分區(qū).
getvar <參數(shù)名> 顯示一個(gè)啟動(dòng)參數(shù)
boot <內(nèi)核文件> [ <ramdisk文件> ] 將電腦上的內(nèi)核下載到手機(jī)并用該內(nèi)核啟動(dòng)系統(tǒng).
flash:raw boot <內(nèi)核文件> [ <ramdisk文件> ] 創(chuàng)建boot.img并下載到手機(jī)啟動(dòng)系統(tǒng).
devices 列出所有與電腦連接的設(shè)備.
reboot 正常啟動(dòng)系統(tǒng)
reboot-bootloader 啟動(dòng)系統(tǒng)到hboot
選項(xiàng): -w 清空用戶數(shù)據(jù)分區(qū)和緩存分區(qū).相當(dāng)于recvery中的"wipe data/factory reset"
-s <串口號(hào)> 置頂要操作的設(shè)備的串口號(hào)
-p <產(chǎn)品名> 指定要操作的設(shè)備的產(chǎn)品名.比如hero,bravo,dream...
-c <命令行> 用命令行替換系統(tǒng)的啟動(dòng)命令行.
分區(qū)解釋: system:系統(tǒng)分區(qū).我們刷機(jī)器一般就是刷的這個(gè)分區(qū).
userdata:數(shù)據(jù)分區(qū).
cache:緩存分區(qū)
recovery:Recovery分區(qū).
boot:存放內(nèi)核和ramdisk的分區(qū).
hboot:這個(gè)是SPL所在的分區(qū).很重要哦.也是fastboot所在的分區(qū).刷錯(cuò)就真的變磚了.
splash1:這個(gè)就是開(kāi)機(jī)第一屏幕了.
radio:這個(gè)是無(wú)線所在的分區(qū).
misc:其他分區(qū).放的是htc的一些東西.]
http://leox.iteye.com/blog/975303
http://blogold.chinaunix.net/u/14459/showart_1911144.html
(muddogxp 原創(chuàng),轉(zhuǎn)載請(qǐng)注明)
Recovery簡(jiǎn)介
Android利用Recovery模式,進(jìn)行恢復(fù)出廠設(shè)置,OTA升級(jí),patch升級(jí)及firmware升級(jí)。
升級(jí)一般通過(guò)運(yùn)行升級(jí)包中的META-INF/com/google/android/update-script腳本來(lái)執(zhí)行自定義升級(jí),腳本中是一組recovery系統(tǒng)能識(shí)別的UI控制,文件系統(tǒng)操作命令,例如write_raw_image(寫(xiě)FLASH分區(qū)),copy_dir(復(fù)制目錄)。該包一般被下載至SDCARD和CACHE分區(qū)下。如果對(duì)該包內(nèi)容感興趣,可以從http://forum.xda-developers.com/showthread.php?t=442480下載JF升級(jí)包來(lái)看看。
升級(jí)中還涉及到包的數(shù)字簽名,簽名方式和普通JAR文件簽名差不錯(cuò)。公鑰會(huì)被硬編譯入recovery,編譯時(shí)生成在:out/target/product/XX/obj/PACKAGING/ota_keys_inc_intermediates/keys.inc
G1中的三種啟動(dòng)模式
MAGIC KEY:
Bootloader正常啟動(dòng),又有三種方式,按照BCB(Bootloader Control Block, 下節(jié)介紹)中的command分類:
Recovery涉及到的其他系統(tǒng)及文件
-
-
/cache/recovery/command: recovery命令,由主系統(tǒng)寫(xiě)入。所有命令如下:
-
--send_intent=anystring - write the text out to recovery.intent
-
--update_package=root:path - verify install an OTA package file
-
--wipe_data - erase user data (and cache), then reboot
-
--wipe_cache - wipe cache (but not user data), then reboot
-
/cache/recovery/log:recovery過(guò)程日志,由主系統(tǒng)讀出
-
/cache/recovery/intent:recovery輸出的intent
Recovery 工具通過(guò)NAND cache分區(qū)上的三個(gè)文件和主系統(tǒng)打交道。主系統(tǒng)(包括恢復(fù)出廠設(shè)置和OTA升級(jí))可以寫(xiě)入recovery所需的命令,讀出recovery過(guò)程中的LOG和intent。
-
MISC分區(qū)內(nèi)容
Bootloader Control Block (BCB) 存放recovery bootloader message。結(jié)構(gòu)如下:
struct bootloader_message {
char command[32];
char status[32]; // 未知用途
char recovery[1024];
};
-
command可以有以下兩個(gè)值
“boot-recovery”:標(biāo)示recovery正在進(jìn)行,或指示bootloader應(yīng)該進(jìn)入recovery mode
“update-hboot/radio”:指示bootloader更新firmware
-
recovery內(nèi)容
“recovery\n
<recovery command>\n
<recovery command>”
其中recovery command為CACHE:/recovery/command命令
兩種Recovery Case
-
FACTORY RESET(恢復(fù)出廠設(shè)置)
-
用戶選擇“恢復(fù)出廠設(shè)置”
-
設(shè)置系統(tǒng)將"--wipe_data"命令寫(xiě)入/cache/recovery/command
-
系統(tǒng)重啟,并進(jìn)入recover模式(/sbin/recovery)
-
get_args() 將 "boot-recovery"和"--wipe_data"寫(xiě)入BCB
-
erase_root() 格式化(擦除)DATA分區(qū)
-
erase_root() 格式化(擦除)CACHE分區(qū)
-
finish_recovery() 擦除BCB
-
重啟系統(tǒng)
-
升級(jí)系統(tǒng)下載 OTA包到/cache/some-filename.zip
-
升級(jí)系統(tǒng)寫(xiě)入recovery命令"--update_package=CACHE:some-filename.zip"
-
重啟,并進(jìn)入recovery模式
-
get_args() 將"boot-recovery" 和 "--update_package=..." 寫(xiě)入BCB
-
install_package() 作升級(jí)
-
finish_recovery() 擦除 BCB
-
** 如果安裝包失敗 ** prompt_and_wait() 等待用戶操作,選擇ALT+S或ALT+W 升級(jí)或恢復(fù)出廠設(shè)置
-
main() 調(diào)用 maybe_install_firmware_update()
-
如果包里有hboot/radio的firmware則繼續(xù),否則返回
-
將 "boot-recovery" 和 "--wipe_cache" 寫(xiě)入BCB
-
將 firmware image寫(xiě)入cache分區(qū)
-
將 "update-radio/hboot" 和 "--wipe_cache" 寫(xiě)入BCB
-
重啟系統(tǒng)
-
bootloader自身更新firmware
-
bootloader 將 "boot-recovery" 寫(xiě)入BCB
-
erase_root() 擦除CACHE分區(qū)
-
清除 BCB
-
main() 調(diào)用 reboot() 重啟系統(tǒng)
Recovery模式流程
/init → init.rc → /sbin/recovery →
main():recovery.c
-
ui_init():ui.c [UI initialize]
-
gr_init():minui/graphics.c [set tty0 to graphic mode, open fb0]
-
ev_init():minui/events.c [open /dev/input/event*]
-
res_create_surface:minui/resource.c [create surfaces for all bitmaps used later, include icons, bmps]
-
create 2 threads: progress/input_thread [create progress show and input event handler thread]
-
get_args():recovery.c
-
get_bootloader_message():bootloader.c [read mtdblock0(misc partition) 2nd page for commandline]
-
check if nand misc partition has boot message. If yes, fill argc/argv.
-
If no, get arguments from /cache/recovery/command, and fill argc/argv.
-
set_bootloader_message():bootloader.c [set bootloader message back to mtdblock0]
-
Parser argv[] filled above
-
register_update_commands():commands.c [ register all commands with name and hook function ]
-
install_package():
-
translate_root_path():roots.c [ "SYSTEM:lib" and turns it into a string like "/system/lib", translate the updater.zip path ]
-
mzOpenZipArchive():zip.c [ open updater.zip file (uncompass) ]
-
handle_update_package():install.c
-
verify_jar_signature():verifier.c [ verify signature with keys.inc key; verify manifest and zip package archive ]
-
verifySignature() [ verify the signature file: CERT.sf/rsa. ]
-
digestEntry():verifier.c [ get SHA-1 digest of CERT.sf file ]
-
RSA_verify(public key:keys.inc, signature:CERT.rsa, CERT.sf's digest):libc/rsa.c [ Verify a 2048 bit RSA PKCS1.5 signature against an expected SHA-1 hash. Use public key to decrypt the CERT.rsa to get original SHA digest, then compare to digest of CERT.sf ]
-
verifyManifest() [ Get manifest SHA1-Digest from CERT.sf. Then do digest to MANIFEST.MF. Compare them ]
-
verifyArchive() [ verify all the files in update.zip with digest listed in MANIFEST.MF ]
-
find_update_script():install.c [ find META-INF/com/google/android/update-script updater script ]
-
handle_update_script():install.c [ read cmds from script file, and do parser, exec ]
-
erase DATA/CACHE partition
-
prompt_and_wait():recovery.c [ wait for user input: 1) reboot 2) update.zip 3) wipe data ]
-
ui_key_xxx get ALT+x keys
-
1) do nothing
-
2) install_package('SDCARD:update.zip')
-
3) erase_root() → format_root_device() DATA/CACHE
-
may_install_firmware_update():firmware.c [ remember_firmware_update() is called by write_hboot/radio_image command, it stores the bootloader image to CACHE partition, and write update-hboot/radio command to MISC partition for bootloader message to let bootloader update itself after reboot ]
-
finish_recovery():recovery.c [ clear the recovery command and prepare to boot a (hopefully working) system, copy our log file to cache as well (for the system to read), and record any intent we were asked to communicate back to the system. ]
-
reboot()
Recovery模式流程圖
以下流程圖繪制了系統(tǒng)從啟動(dòng)加載bootloader后的行為流程。
沒(méi)有床,見(jiàn)blog吧~
實(shí)際使用的例子:
adb shell "echo \"send_intent=xxx\" > /cache/recovery/command"
adb shell "echo \"--update_package=SDCARD:update.zip\" >> /cache/recovery/command"
adb shell sync
adb reboot recovery