您當前的位置:首頁 > 攝影

Android recovery(二)

作者:由 嵌入式Linux 發表于 攝影時間:2018-11-24

Android recovery(二)

Android recovery(二)

recovery簡述作用 01

Android recovery(二)

Android 手機上正常執行兩個系統,一個是正常使用的Android 系統,還有一個是recovery系統,recovery主要用來做刷機的功能,這個文章會說明recovery的一些功能和流程圖,系統大家對Android有一定的瞭解。

Recovery相關概念 02

我們討論recovery,一定離不開空中升級,所以這個章節說下幾個概念性的知識點,大概如下

Recovery:

Recovery模式指的是一種可以對安卓機內部的資料或系統進行修改的模式,也指Android的Recovery分割槽

OTA:

Over-the-Air Technology,即空中下載技術,是 Android 系統提供的標準軟體升級方式。 它功能強大,提供了完全升級、增量升級模式,可以透過 SD 卡升級,也可以透過網路升級。不管是哪種方式,都有幾個過程:生成升級包、下載升級包、安裝升級包。

Recovery System:

Android系統內部實現的一個工具類,Android應用層操作Recovery模式的一個重要途徑,它提供了幾個重要的API,用於實現OTA包校驗、升級以及恢復出廠設定(格式化資料和快取)。

Main System:

主系統模式,即Android正常開機所進入的Android系統

Bootloader:

Bootloader是嵌入式系統在加電後執行的第一段程式碼,在它完成CPU和相關硬體的初始化之後,再將作業系統映像或固化的嵌入式應用程式裝在到記憶體中然後跳轉到作業系統所在的空間,啟動作業系統執行。

BCB:

Bootloader Control Block,啟動控制資訊塊,位於misc分割槽,從程式碼上看,就是一個結構體。

Android 分割槽介紹 03

首先介紹的是Android標準分割槽,但是有些晶片廠家會根據自己的需要做修改,Android預設的分割槽如下:

Boot:

包含Linux核心和一個最小的root檔案系統(裝載到ramdisk中),用於掛載系統和其他的分割槽,並開始Runtime。正如名字所代表的意思(注:boot的意思是啟動),這個分割槽使Android裝置可以啟動。如果沒有這個分割槽,Android裝置通常無法啟動到Android系統。

System:

這個分割槽幾乎包含了除kerner和ramdisk之外的整個android作業系統,包括了使用者介面、和所有預裝的系統應用程式和庫檔案(AOSP中可以獲取到原始碼)。在執行的過程中,這個分割槽是read-only的。當然,一些Android裝置,也允許在remount的情況下,對system分割槽進行讀寫。 擦除這個分割槽,相當於刪除整個安卓系統,會導致不能進入Main System, 但不會影響到Recovery。因此,可以透過進入Recovery程式或者bootloader程式中,升級安裝一個新ROM。

Userdata:

使用者資料區,使用者安裝的應用程式會把資料儲存在這裡,包含了使用者的資料:聯絡人、簡訊、設定、使用者安裝的程式。擦除這個分割槽,本質上等同於手機恢復出廠設定,也就是手機系統第一次啟動時的狀態,或者是最後一次安裝官方或第三方ROM後的狀態。在Recovery程式中進行的“data/factory reset ”操作就是在擦除這個分割槽。正常情況下OTA是不會清除這裡的資料的,指定要刪除資料的除外。

Cache:

系統快取區,臨時的儲存應用資料(要把資料儲存在這裡,需要特地的app permission), OTA的升級包也可以儲存在這裡。OTA升級過程可能會清楚這個分割槽的資料。一般來講,Android差分包升級也需要依賴此分割槽存放一些中間檔案。

Recovery:

包括了一個完整Linux核心和一些特殊的recovery binary,可以讀取升級檔案用這些檔案來更新其他的分割槽。

Misc:

一個非常小的分割槽,4 MB左右。recovery用這個分割槽來儲存一些關於升級的資訊,應對升級過程中的裝置掉電重啟的狀況,Bootloader啟動的時候,會讀取這個分割槽裡面的資訊,以決定系統是否進Recovery System 或 Main System。

以上幾個分割槽是Google官方的標準,對於第三方Android裝置廠商來講,分割槽的情況可能稍微不一樣,比如Rockchip平臺,還增加了user分割槽、kernel分割槽和backup分割槽。其中:

kernel:

顧名思義,是存放kernel。img映象的。在boot分割槽裡面的kernel核心映象損壞的情況下(比如flash損壞),bootloader會嘗試載入kerner分割槽裡面的核心映象。

backup:

存放整個系統映象(update。img), 可用於恢復裝置到出廠ROM。

user:

使用者分割槽,也就是平時我們所說的內建sdcard。另外還有外接的sdcard分割槽,用於存放使用者相片、影片、文件、ROM安裝包等。

如何進入recovery模式 04

使用adb 命令,adb reboot recovery

組合鍵進入recovery 模式,絕大部分手機時候power+音量 加 鍵,好了,不是加就是減

恢復出廠設定也會進入recovery模式,恢復出廠設定可以透過介面點選,也可以透過命令觸發

恢復出廠設定的命令

#/bin/sh

rm -rf /cache/recovery/command

echo “——wipe_data” > /cache/recovery/command

echo “——wipe_cache” >> /cache/recovery/command

sync

sync

sleep 2

sync

sync

reboot recovery

recovery程式碼位置 05

Android recovery的原始碼位置在Android SDK的 /bootable/recovery/ 位置

recovery處理流程 06

recovery處理流程圖,圖片大部分是英文,如果有看不懂的,簡單查詢一下,這些英文算是比較基礎了。

Android recovery(二)

這次大概說這麼多,下次介紹在recovery模式下實現ota升級的流程,週一好,祝願大家有一個美好的一週。

Android recovery(二)

歡迎關注微信公眾號-嵌入式Linux

覺得不錯,請幫忙轉發,點贊,您的每一次支援,我都將銘記於心

http://

weixin。qq。com/r/Y0N9ZaX

EmfjmreEG9xZx

(二維碼自動識別)

標簽: 分割槽  recovery  Android  升級