本文硬件平臺以[color=inherit !important]飛凌嵌入式[color=inherit !important]OK3399-[color=inherit !important]C[color=inherit !important]開發板為基礎進行講解,其它[color=inherit !important]RK3399產品,由于各個廠家設置不同會有所差異,請參考使用。本文檔主要介紹OTA相關方向的介紹,通過本文檔可快速了解RK3399平臺[color=inherit !important]android鏡像版本升級的兩種方式OTA 本地升級、OTA遠程升級以及OTA升級包編譯過程。 [color=inherit !important]飛凌[color=inherit !important]RK3399開發板 OTA測試OTA (over the air)升級是Android 系統提供的標準軟件升級方式。它功能強大,提供了完全升級(完整包)、增量升級模式(差異包),可以通過本地升級,也可以通過網絡升級。 注意:OTA鏡像的打包方式和rk update.img的打包方式有所差異,沒有單獨的kernel分區,內核設備樹存在于boot.img中,因此如果使用OTA升級時,需要保證當前系統中的鏡像也是按照OTA方式打包的。 一、OTA 升級包編譯本節我們將編譯三個版本的android鏡像,V1.0.0版本、V1.0.1版本、V1.0.2版本,其中V1.0.0版本為基礎版本用于燒寫到飛凌RK[color=inherit !important]3399開發板上,V.1.0.0升級到V1.0.1采用完全升級的方式測試完全升級功能,V1.0.1升級到V1.0.2采用增量升級模式測試增量升級功能。 查看device/rockchip/rk3399/BoardConfig.mk 確認當前版本號為1.0.0,同時將ro.product.ota.host修改為用于OTA升級服務器的[color=inherit !important]Linux主機地址,8888為端口號(服務器搭建參考后續章節)。 1、 編譯V1.0.0版本鏡像lunch rk3399_all-userdebug rm out/target/product/rk3399_all/system/build.prop make -j4 ./mkimage.sh ota 將rockdev/Image-rk3399_all目錄的鏡像備份 mkdir images_v1.0.0 cp rockdev/Image-rk3399_all/* images_v1.0.0 以單獨燒寫的方式,將鏡像燒寫到飛凌RK3399開發板上,注意不要燒寫kernel.img。 2、編譯V1.0.1版本完全升級包修改device/rockchip/rk3399/BoardConfig.mk 將當前的版本號修改為:1.0.1 lunch rk3399_all-userdebug rm out/target/product/rk3399_all/system/build.prop make -j4 ./mkimage.sh ota make otapackage -j4 mv out/target/product/rk3399_all/rk3399_all-ota-eng.root.zip 1.0.1.zip mv out/target/product/rk3399_all/obj/PACKAGING/target_files_intermediates/rk3399_all-target_files-eng.root.zip target_1.0.1.zip 其中1.0.1.zip是用于測試的完全升級包,target_1.0.1.zip是用于制作V1.0.2版本增量升級包的基礎素材。 3、編譯V1.0.2版本增量升級包修改device/rockchip/rk3399/BoardConfig.mk 將當前的版本號修改為:1.0.2 lunch rk3399_all-userdebug rm out/target/product/rk3399_all/system/build.prop make -j4 ./mkimage.sh ota make otapackage -j4 mv out/target/product/rk3399_all/obj/PACKAGING/target_files_intermediates/rk3399_all-target_files-eng.root.zip target_1.0.2.zip 使用target_1.0.1.zip和target_1.0.2.zip制作V1.0.2版本增量升級包。 ./build/tools/releasetools/ota_from_target_files -v --block \ -i target_1.0.1.zip \ -p out/host/linux-x86 \ -k build/target/product/security/testkey \ target_1.0.2.zip \ 1.0.2.zip 經過前面幾小節的編譯,我們得到最終得到了以下文件: images_v1.0.0目錄的基礎鏡像:v1.0.0版本的鏡像,用于燒寫到飛凌RK3399開發板上。 1.0.1.zip:v1.0.1版本的完全升級包。 1.0.2.zip:v1.0.2版本的增量升級包。 二、OTA 本地升級啟動RK3399開發板并輸入: getprop ro.product.version 確認版本號是否為1.0.0。 將1.0.1.zip 拷貝到TF卡根目錄(如果之前做成了燒寫TF卡請先還原為普通TF卡),并重新命名為update.zip。啟動開發板,插入TF卡。系統將自動檢測到升級文件的存在彈出升級確認菜單,點擊Install。將自動進入升級模式,升級完成之前請勿插拔TF卡。 升級完成后將自動重新啟動,提示升級成功,詢問是否需要刪除升級文件避免再次升級。 同時可以在飛凌RK3399開發板上輸入getprop ro.product.version 確認版本號是否為1.0.1。 下面,將1.0.2.zip拷貝到TF卡根目錄,并重命名為update.zip,由于是增量升級可以看到update.zip只有幾十MB,當然這根修改的代碼多少有關。將TF卡插入開發板,與前面完全升級的步驟一樣。 系統將自動檢測到升級文件的存在彈出升級確認菜單,點擊Install。將自動進入升級模式,升級完成之前請勿插拔TF卡。 升級完成后將自動重新啟動,提示升級成功,詢問是否需要刪除升級文件避免再次升級。 同時可以在飛凌 RK3399 開發板上輸入getprop ro.product.version 確認版本號是否為1.0.2。 三、OTA 遠程升級1、搭建OTA升級服務器打開飛凌提供的RK3399用戶資料,將資料工具目錄中的apache-tomcat-7.0.29.zip拷貝到Linux主機/home/forlinx目錄。 注意:如果您的主機沒有jdk環境,請參考上篇建立Android應用[color=inherit !important]開發環境編譯章節安裝jdk環境。 unzip apache-tomcat-7.0.29.zip chmod 775 -R apache-tomcat-7.0.29 cd apache-tomcat-7.0.29/webapps/OtaUpdater/WEB-INF cat manifast.xml 其中,product name需要與device/rockchip/rk3399/BoardConfig.mk中定義的PRODUCT_MODEL一致。 version name 選項對應升級前版本,package_path選項對應該版本的升級包路徑。 將1.0.1.zip和1.0.2.zip拷貝到對應的目錄: 修改端口號:apache-tomcat-7.0.29/conf/server.xml 啟動服務: cd apache-tomcat-7.0.29/bin ./startup.sh 2、測試OTA遠程升級首先將之前備份在images_v1.0.0鏡像燒寫到開發板上。getprop ro.product.version 確認版本號是否為1.0.0。 正常情況下系統啟動完畢幾秒鐘后將提示升級,如果沒有提示請: getprop ro.product.ota.host 確認OTA升級服務器參數是否正確。 同時確認網絡是否連通。 點擊Yes將自動進入升級流程。由于是完全升級,因此需要稍微等待一會。 點擊Yes刪除本地升級包。同時查看當前版本:getprop ro.product.version 正常情況下已經升級到1.0.1版本。 重啟系統,由于我們當前版本已經升級到了1.0.1版本,系統將檢測到最新的1.0.2版本,提示升級。 由于是增量升級,升級包非常小,升級速度也比較快。 點擊Yes刪除本地升級包。同時查看當前版本:getprop ro.product.version 正常情況下已經升級到1.0.2版本。
|