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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > Android >内容正文

Android

android ota机制,Android OTA简介

發布時間:2023/12/3 Android 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 android ota机制,Android OTA简介 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Android?OTA?簡介

OTA?全稱?over the air ,OTA升級是Android系統提供的標準軟件升級方式。

它功能強大,提供了完全升級、增量升級模式,可以通過SD卡升級,也可以通過

網絡升級。

這里,首先介紹SD卡升級,網絡升級原理和SD卡大致一樣.下面我們將介紹這一過程.

在升級前,我們要準備升級包,所有編譯好的包都命名為update.zip ,不管是增量升級還

是完全升級.

1.生成完全升級包.

./mk prj new

./mk prj otapackage

編譯完成之后,將在\out\target\product\prj\目錄下生成prj-ota-eng.root.zip,這個

zip將是我們升級用的包,我們要把他改名為update.zip ,然后copy?到SD卡的根目錄下.

在運行上面指令的過程中,同時會在?out\target\product\prj\obj\PACKAGING\target_files_intermediates\

目錄下生成prj-target_files-eng.root.zip這個文件非常重要,我們將他保存為old.zip

它是我們做增量包的基礎文件.

2.生成增量包.

當代碼有更新時,我們更新新的代碼.同樣運行./mk prj otapackage產生代碼更改后的完全升級包.

這時同樣會在out\target\product\prj\obj\PACKAGING\target_files_intermediates\?目錄下生成

prj-target_files-eng.root.zip?我們把它重命名為new.zip,接下來我們完成生成增量包的最后一步.

運行./build/tools/releasetools/ota_from_target_files-iold.zip new.zip diff.zip ,產生new.zip

到old.zip?的增量包diff.zip ,同樣我們要把它命名為update.zip ,可以copy?到SD卡的更目錄下,做增量

式升級使用.

(備注:如果升級有特殊的要求,比如格式化data?分區,更新uboot等分區,需要修改ota_from_target_files.py?這個腳本)

上面的內容介紹了如何準備update.zip?升級文件.接下來介紹升級過程.先說一下正常開機過程,

按power?鍵開機,uboot?在運行完之后,將把boot?分區的內容boot.img?文件加載到內存,然后跳轉到boot中

linux內核的開始位置,運行linux?內核代碼,在內核的最后執行正常啟動時的init.rc?文件,掛載system分區

到/system?目錄下,掛載data?分區到?/data?目錄下.啟動虛擬機等相關的一下服務.

要升級程序,開機的時候,需要按住power?和下vol?鍵,這樣uboot?在運行完之后將加載recovery分區

的recovery.img?文件到內存.現在我們看一下,recovery.img?這個鏡像里面有什么內容.詳細的內容我們

可以查看build/core/makefile?文件,在這個文件里面我們查找?Recovery image ,從這里開始的內容,主要

是打包recovery.img?的內容.關于recovery.img的具體內容,說的簡單點,就是linux?內核和將\out\target\

product\prj\recovery目錄打包成ramdisk?的一個鏡像的集合.對比正常開機的boot.img鏡像,區別為boot.img

里面的ramdisk鏡像是out\target\product\prj\root?打包來的.其內核文件是同一個文件. recovery.img

鏡像里面的ramdisk?文件系統包含的用于數據升級相關的bin文件,比如gzip,recovery?等重要的程序.

在機器加載recovery.img ,執行完內核后,運行recovery?模式下的init.rc?該文件在bootable\recovery\etc\

目錄下,我們拿它和正常開機的init.rc?文件相比.發現recovery?模式的init.rc?僅僅新建了幾個目錄,包括sdcard,

用于SD卡的掛載點.啟動了2個service,一個ueventd,一個recovery的主菜單程序recovery(該文件是bootable\recovery\recovery.c?編程而成),內容非常簡單.在recovery?的主界面,選擇更新程序后,recovery將會

解壓update.zip?文件,執行其中的\META-INF\com\google\android\updater-script ,recovery會對腳本進行解析.

下面是這個腳本的部分摘錄.

show_progress(0.500000, 0);

format("yaffs2", "MTD", "system");

mount("yaffs2", "MTD", "system", "/system");

package_extract_dir("recovery", "/system");

package_extract_dir("system", "/system");

symlink("toolbox", "/system/bin/cat", "/system/bin/chmod",

"/system/bin/chown", "/system/bin/cmp", "/system/bin/date",

.......

"/system/bin/wipe");

set_perm_recursive(0, 0, 0755, 0644, "/system");

........

show_progress(0.200000, 10);

assert(package_extract_file("boot.img", "/tmp/boot.img"),

write_raw_image("/tmp/boot.img", "boot"),

delete("/tmp/boot.img"));

show_progress(0.100000, 0);

unmount("/system");

(以上腳本為系統自動生成)

從腳本可以看到,首先格式化system區分,然后把updata.zip?里面的system目錄的內容解壓到system

分區.接著修改system分區下文件的權限.最后將boot.img?鏡像寫回到boot?分區.

從以上的介紹,可以看到android?的功能非常強大,在recovery?模式下,linux?已經已經完全跑

了起來.除了apk,jar?不能運行之外,你可以做任何你想做的事情.上面的例子中,更新了system分區

和boot分區,如果需要還可以更新?uboot分區,logo分區,格式化data?分區等等?.

關于OTA的網絡實現,實際上是檢查網絡上的更新,或者網絡通知更新.把更新包(update.zip)

下載到本地,在用戶的選擇下,重啟機器自動進入recovery模式,執行上面的過程.

總結

以上是生活随笔為你收集整理的android ota机制,Android OTA简介的全部內容,希望文章能夠幫你解決所遇到的問題。

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