OTA過程中更新自定義分區數據

製作target_files

make otapackage
可以將編譯的全部命令打出來跟蹤詳細編譯中間包的過程

製作差分包

ota_from_target_files.py製作全量包、或者增量包

./build/tools/releasetools/ota_from_target_files -v -p out/host/linux-x86 -k device/****/***Key -n -i A.zip B.zip
  • 覆蓋所有分支情況
    版本A的target_file到版本B的target_file中,會有下面四種情況
    (1)版本A中沒有分區custom,版本B中沒有分區custom
    (2)版本A中沒有分區custom,版本B中有分區custom
    (3)版本A中有分區custom,版本B中沒有分區custom
    (4)版本A中有分區custom,版本B中有分區custom
    因而對應這四種情況都需要考慮,參考《代碼大全》中防禦式編程
    直接讀取版本A,版本B中相關的文件,然後進行比較,如果不一樣則進行更新,如果一樣則不需要更新

製作差分包比較文件差異是,如果遇到解壓文件找不到臨時文件的情況,需要制定python解壓時不要刪除臨時文件
在這裏插入圖片描述

對zip簽名

  • 替換zip中updater

    unzip -o -q AtoB_update.zip -d AtoB
     cd AtoB
     zip -r ../AtoB_modified.zip ./       
    

修改updater後,需要進行手動簽名

java -Xms2048m -jar out/host/linux-x86/framework/signapk.jar -w device/AAAA/common/keys/AAAAKey.x509.pem device/AAAA/common/keys/AAAAKey.pk8 I1029toJ0601_unsigned.zip update.zip

執行updater

  • updater中讀取機型名稱,同樣需要防禦式編程
    機型名稱屬性是否存在
    機型名稱屬性值是否有異常字符,前後是否有空格,參考如下
    C語言去除字符串首尾空格,trim()函數實現

  • 解壓zip中文件到data分區
    參考install.cpp中代碼解壓文件到/data/分區,這樣就得要求此時/data分區已掛載
    在這裏插入圖片描述

利用現有函數掛載分區

load_volume_table()
ensure_path_mounted()

調用execl執行想要執行的命令
在updater.c中fork出一個進程後,調用execl("/sbin/busybox", "sh", "-c", cmd, (char *) 0));
區分execl與system——應用程序中執行命令

./updater 1 /tmp/update.log AtoB_signed.zip

參見C++ main函數中參數argc和argv含義及用法

參考:
https://www.cnblogs.com/cxchanpin/p/7020315.html
https://blog.csdn.net/huangyabin001/article/details/43965307

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章