一区二区三区日韩精品-日韩经典一区二区三区-五月激情综合丁香婷婷-欧美精品中文字幕专区

分享

Android系統(tǒng)升級那些事情

 own360 2014-08-19
Android系統(tǒng)升級那些事兒

摘要

        本文首先介紹了Android系統(tǒng)更新要用到的一些概念:硬件、三種模式及相互之間的通信。然后介紹了Android系統(tǒng)的啟動和升級流程。

概述

        通常,Android系統(tǒng)的升級包名稱為update.zip。Android系統(tǒng)內部自帶了燒寫升級包的工具,我們可以手動燒寫,也可以通過某些機制自動更新系統(tǒng)。同時,我們可以手動修改和制作升級包。本文主要闡述在Android系統(tǒng)升級中用到的一些概念,本文只是作為索引,并不涉及到具體的燒寫工作。本文基于Android系統(tǒng)的版本:4.0.4。

硬件

        Android系統(tǒng)的燒寫,是非常貼近硬件的。一是,燒寫是在實實在在的硬件上操作的。二則,有時在翻閱源碼的時候,需要知道硬件的類型,以便找到和硬件相對應的源碼。
        燒寫相關的硬件主要有三部分:CPU、內存和nand flash。當然,只是相對本文而言。CPU用來執(zhí)行程序中的指令。內存只是在運行中,將需要運行的程序加載其中并運行,關機后即消失。nand flash用來存儲程序的數據,它會一直存在。系統(tǒng)啟動時,會將nand flash上的操作系統(tǒng)加載到內存,然后運行在CPU中,對于非系統(tǒng)程序,按需加載到內存中運行。了解這些,有助于了解整個燒寫的過程。
        在板子上,可以通過下面的命令,查看CPU的信息:
cat /proc/cpuinfo

        通過如下命令查看內存的信息:
cat /proc/meminfo

        nand flash是需要分區(qū)的,每個分區(qū)中對應了Android系統(tǒng)燒寫包中不同的image,比如:boot、system分區(qū)等??梢酝ㄟ^如下命令來查看nand flash的分區(qū)情況:
cat /proc/mtd # 查看分區(qū)狀況

        通常,nand flash包含了以下分區(qū):
  1. 開機動畫:用于在開機或者升級過程中顯示在屏幕上的內容。
  2. boot:用于Android系統(tǒng)的正常啟動
  3. recovery:用于Android系統(tǒng)進入recovery模式下,參見本文后續(xù)介紹。
  4. misc:用于保存BCB的內容,參見本文后續(xù)介紹。
  5. system:對應于Android系統(tǒng)的正常模式下的/system目錄。
  6. cache:用于不同模式之間的通信,參見本文后續(xù)介紹。
  7. user-data:用于Android應用數據的存放。
        nand flash上的分區(qū)可以按需要增減,這取決于不同的Android系統(tǒng)配置。不過它有可能在Android不同的模塊中都有定義。同時,這些分區(qū)的可能在Android不同的模塊中都有配置,比如:內核、bootloader。
        通過下面的命令查看nand flash的總大?。?/div>
dmesg | grep NAND

三種模式

        燒寫的過程中,需要在三種模式下互相切換。確切的說,應該是三個操作環(huán)境:bootloader、recovery和main system。
        bootloader主要用來屏蔽硬件的差異,類似于PC中的BIOS,它的功能相對比較簡單,內部提供了一些命令,比如:可以將nand flash分區(qū)加載到內存、運行內存中的程序、操作SD卡等。Android中的booloader是uboot,位于源碼的uboot目錄下。
        main system就是正常運行的Android操作系統(tǒng),而recovery則是一個mini的Android系統(tǒng),顧名思義,就是用來進行系統(tǒng)恢復相關的操作的,它的運行規(guī)則和main system一樣,只是,它在啟動時只加載recovery服務,此服務用于燒寫Android系統(tǒng)。
        三者之間的關系如下圖所示:

        系統(tǒng)先啟動到bootloader模式下,然后根據情況,啟動到recovery或者main system模式下。

bootloader

        板子啟動時,在Putty控制臺中按回車,可以進入uboot,輸入help可以查看其可用的命令。uboot的命令是可以自定義的,需要在uboot源碼中進行設置。uboot下可以使用fastboot命令,進入fastboot模式下,可以使用PC與之連接(此時,使用fastboot協(xié)議通信),進行Android系統(tǒng)的燒寫工作。
        在uboot中,你可以更新uboot在內的所有系統(tǒng)模塊。

recovery

        recovery系統(tǒng)包含了內核和類似于根文件系統(tǒng)兩部分,啟動時仍采用init進程和init.rc配置腳本,不同的是init.rc腳本比較簡單,system目錄中只存放了一些必備的工具。
        recovery系統(tǒng)下,你能更新除uboot之外的所有Android系統(tǒng)模塊。
        recovery模式下,只有一個recovery服務,該服務對應于recovery進程,源碼位置:bootable\recovery。

main system

        main system是正常運行的Android系統(tǒng)。

通信

        Android板子每個時刻只可以處于bootloader、recovery、main system其中的一個模式中,燒寫過程中,三個模式之間需要通信,比如:main system通知recovery燒寫那個升級包。大致有三種方式可以用來通信:BCB、寄存器和cache分區(qū)。

BCB

        BCB (bootloader control block)可以用于main system傳遞數據給bootloader和recovery模式。BCB的內容存在于nand flash的一個獨立的分區(qū),可以在nand flash分區(qū)表中看到,分區(qū)的名稱為misc。
        通過BCB,main system可以通知bootloader啟動到recovery模式下,同時也可以傳遞命令給recovery,比如燒寫哪個文件。
        recovery在燒寫的過程中,會設置BCB,以確保燒寫成功前,一直會開機啟動到recovery模式下,這樣可以防止燒寫過程中斷電的情況。

寄存器

        main system模式下,運行如下命令會重啟,并進入recovery模式:(也可調用android_reboot函數)
reboot recovery

        reboot命令實際上是系統(tǒng)調用,最終會調用到內核的kernel_restart函數,該函數最終會設置某個寄存器的位置,然后執(zhí)行重啟操作。
重啟后,bootloader會檢測到該寄存器的值,并根據其值,啟動到recovery模式下。

cache分區(qū)

        recovery和main system模式下,都會將nand flash的cache分區(qū)掛載到cache目錄從而實現(xiàn)這兩種模式下的通信。比如:main system模式下,下載升級包update.zip,并將其路徑設置到文件/cache/recovery/command中,然后重啟到recovery模式下,recovery進程會讀取到文件/cache/recovery/command中的值,并執(zhí)行系統(tǒng)升級工作。

升級包

        通常升級包的名稱為update.zip,它包含了要升級的內容和升級腳本,也就是說,整個升級的過程都由升級包本省控制。
        升級腳本解析對應的源碼:META-INF\com\google\android\updater-script??捎玫拿盍斜砜梢詤⒁奲ootable\recovery\updater\install.c的函數RegisterInstallFunctions()。
        解析升級腳本采用語言Edify,源碼位置:bootable\recovery\updater和bootable\recovery\edify。
        若想自己制作update.zip包,需要使用的一下三個文件:
  1. out/host/linux-x86/framework/signapk.jar
  2. build/target/product/security/testkey.pk8
  3. build/target/product/security/testkey.x509.pem
        制作的過程:
  1. 解壓從源碼中編譯出來的update.zip。
  2. 修改解壓后的文件。
  3. 重新壓成包update.zip
  4. 使用命令處理update.zip,該命令主要是最zip執(zhí)行簽名操作:java -Xmx1024m -jar signapk.jar -w testkey.x509.pem testkey.pk8 update.zip update_unsigned.zip
  5. update_unsigned.zip就是最終的升級包。

啟動流程

        啟動流程大致路下:
        1.開機后,啟動到bootloader下,bootloader會作一些初始化的操作,然后會從三個地方確定后面的動作:
        查找SD卡上指定的文件:此種情況,主要用于,通過SD卡,升級系統(tǒng)。只要在SD卡中按照規(guī)則放置升級文件和相關的腳本,即可實現(xiàn)系統(tǒng)的升級。
        查找按鍵的狀態(tài):此種情況主要用于開機后進入bootloader或者recovery模式,按鍵也通常是硬件上的幾個鍵按下的狀態(tài)。
        獲取BCB的內容:需要根據BCB的內容,來執(zhí)行具體的操作,通常是進入recovery模式。
        若沒有發(fā)現(xiàn)上述的三種信息,則會按照正常的啟動流程,進入main system模式。
        2.若需要通過SD卡升級,則會顯示升級提示界面,并開始系統(tǒng)升級,完成后,重啟進入main system。
        3.若需要進入recovery模式,在bootloader模式下,會加載recovery分區(qū)到內存,然后進入recovery模式下。
        recovery會啟動recovery進程,該進程會讀取/cache/recovery分區(qū)中的內容,決定具體的操作。若沒有相關的配置,則進入控制臺模式。
        4.若需要進入main system模式,則會加載boot分區(qū)中的內容,然后進入正常的啟動流程。

升級流程

        升級的流程大致如下:
        1.main system模式下,下載update.zip到/cache目錄。
        2.設置/cache/recovery/command目錄的內容為:--update_package=/cache/update.zip。
        3.調用函數android_reboot,并設置進入recovery模式的代碼。
        4.系統(tǒng)重啟,進入recovery模式,并啟動recovery進程,該進程會檢測/cache/recovery/command的內容,然后升級update.zip。

參考資料

  1. Fastboot
  2. 09年初寫的Android Recovery 09年初寫的Android Recovery
  3. android recovery 模式啟動進入流程
  4. U-Boot啟動過程完全分析
  5. Edify scripts in CWM recovery

    本站是提供個人知識管理的網絡存儲空間,所有內容均由用戶發(fā)布,不代表本站觀點。請注意甄別內容中的聯(lián)系方式、誘導購買等信息,謹防詐騙。如發(fā)現(xiàn)有害或侵權內容,請點擊一鍵舉報。
    轉藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多

    激情丁香激情五月婷婷| 二区久久久国产av色| 91蜜臀精品一区二区三区| 日本最新不卡免费一区二区| 午夜福利大片亚洲一区| 欧美丰满大屁股一区二区三区| 国产免费人成视频尤物| 千仞雪下面好爽好紧好湿全文| 91亚洲国产成人久久| 视频一区二区黄色线观看| 热久久这里只有精品视频| 久久中文字幕中文字幕中文| 成人区人妻精品一区二区三区| 国内欲色一区二区三区| 欧美激情中文字幕综合八区| 午夜精品成年人免费视频| 午夜激情视频一区二区| 91久久精品中文内射| 国产免费观看一区二区| 午夜精品国产精品久久久| 亚洲国产婷婷六月丁香| 少妇淫真视频一区二区| 色综合视频一区二区观看| 有坂深雪中文字幕亚洲中文 | 翘臀少妇成人一区二区| 国产精品视频一区二区秋霞 | 久久婷婷综合色拍亚洲| 美女被后入福利在线观看| 国产又黄又猛又粗又爽的片| 开心激情网 激情五月天| 日韩精品毛片视频免费看| 欧美一区二区不卡专区| 久久人人爽人人爽大片av| 在线免费观看黄色美女| 丝袜美女诱惑在线观看| 隔壁的日本人妻中文字幕版| 欧美人禽色视频免费看| 亚洲男人的天堂就去爱| 亚洲国产成人精品一区刚刚| 精品人妻一区二区三区在线看| 女人高潮被爽到呻吟在线观看|