linux差分包升级流程,OTA 差分升级包的制作
OTA?升級是?Android?系統提供的標準軟件升級方式。?它功能強大,提供了完全升級、增量升級模式,可以通過?SD卡升級,也可以通過網絡升級。
那如何生成差分升級包呢?
Android源碼的根目錄下有以下兩個命令:
1、make?——會生成系統的img文件,system.img,boot.img,userdata.img,recovery.img
2、make?otapackage——會生成sd卡用的全部系統升級包,如msm8974-target_files-eng.xxxx.zip
要生成差分升級包,需要先制作出兩個全升級包,然后根據這兩個升級包做出差分升級包,這里以高通的msm8974為例,講訴Android差分包的制作過程。
1、制作全系統升級包
1.1 使能編譯腳本 ?在Android源碼目錄下運行source build/envsetup.sh
1.2 選擇具體機型 ?在終端運行lunch,隨后會打印機型列表,通過輸入數字選擇具體的機型
1.3 編譯?在終端運行make,如果之前沒有編譯過Android源碼,該過程相當久。
1.4 ?make?otapackage
注(1.1-1.3也是Android源碼官方的標準編譯方式,其實也是輸出一些臨時變量,供編譯時使用,可通過 ? ?printenv查看具體的配置信息,很簡單對不對)
2、建立一個目錄
這個隨意,在哪里建都行, 主要要于保存升級文件如
mkdir?~/OTA
注(~代表為用戶目錄,一般為/home/用戶名,可通過cd ~,然后通過pwd查看路徑)
3、將編譯生成的out/target/product/msm8974/obj/PACKAGING/target_files_intermediates/msm8974-target_files-eng.xxxx.zip?拷貝并且更名放到目錄~/OTA/A.zip
4、在代碼中做一些修改,產生一些差異
5、第二次make;make?otapackage(修改于Android源碼后out/target/product/msm8974/文件在重新編譯后,某個文件(如apk)雖已不再生成,但該文件不會自動刪除(上一次的生成文件殘留),個人感覺這個有BUG,希望谷歌方面改進一下,這樣我們在make之前,最好手動刪除一下out/target/product/msm8974/system這個目錄)
6、將第二次編譯生成的out/target/product/msm8974/obj/PACKAGING/target_files_intermediates/msm8974-target_files-eng.xxxx.zip?拷貝并且更名放到目錄~/OTA/B.zip
7、在src根目錄下執行制作差分包的命令,必須在src根目錄下執行,因為ota_from_target_files.py這個腳本里面寫定了相對路徑的引用文件。
./build/tools/releasetools/ota_from_target_files ?-i ??? 。
如:?./build/tools/releasetools/ota_from_target_files -i?~/OTA/A.zip?~/OTA/B.zip?~/OTA/update.zip
注:-i指定制作差分包,~/OTA/update.zip??就是升級用的差分包,這個腳本要在Android源碼的根目錄下執行。
8、升級原理
打開update.zip,有一個升級腳本META-INF/com/google/android/updater-script。Android就是根據這個腳本進行升級的,有興趣的可以研究一下。當然升級失敗了,最好從這個腳本中找原因了,因為這個文件會打印升級過程中的信息。通過adb shell,進入/tmp目錄,有個文件記錄了升級過程的信息,可通過這個文件查看升級失敗的原因。
9、應用升級包
差分包制作好后,可以用Android的recovery應用該升級包。應用該升級包的時候,遇到了兩個問題,這里給大家分享一下。
9.1時間戳失敗
時間戳失敗即OTA包必須比recovery的編譯時間要早,這個在編譯的時候控制一下即可。當然,你也可屏蔽OTA包的時間戳檢測,見http://blog.csdn.net/mike8825/article/details/49332249
9.2指紋校驗失敗。差分升級包就是比較現存基礎包與原來的基礎包的差異而生成的,即該OTA包有特定的應用背景(用于兩個差分包之間)。升級過程中,升級腳本(打開該升級包,如下圖所示)會檢測fingerprint,確保該升級包被正確應用。fingerprint這個屬性存在于/build.prop,可通過adb shell進入根路徑,通過cat build.prop查看這個屬性(或getprop)。如果自己做版本控制的話,這個也可以屏蔽。關于指紋校驗該篇博客有較詳細的介紹http://blog.csdn.net/huangyabin001/article/details/44465145。
9.3提示system分區不夠大,升級失敗。這里的system分區為500M,剩余200M。這里感覺挺奇怪的,200M的的空間還升級不了一個20多M的升級包。開始的時候認為是selinux引起的,因為串口會打印一下selinux的錯誤,嘗試改正這些錯誤后,升級包并沒有應用成功。這里,單純一點,它提示system分區容量不夠,那咱就給它大一點哦。嘗試修改將system分區的容量改為1G后,成功升級。
關于OTA包的詳解見
http://blog.csdn.net/thl789/article/details/8743743
總結
以上是生活随笔為你收集整理的linux差分包升级流程,OTA 差分升级包的制作的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: php 返回数组元素函数_php arr
- 下一篇: oracle outln用户,Oracl