本文硬體平台以飛淩嵌入式OK3399-C開發闆為基礎進行講解,其它RK3399産品,由于各個廠家設定不同會有所差異,請參考使用。本文檔主要介紹OTA相關方向的介紹,通過本文檔可快速了解RK3399平台android鏡像版本更新的兩種方式OTA 本地更新、OTA遠端更新以及OTA更新包編譯過程。
飛淩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版本為基礎版本用于燒寫到飛淩RK3399開發闆上,V.1.0.0更新到V1.0.1采用完全更新的方式測試完全更新功能,V1.0.1更新到V1.0.2采用增量更新模式測試增量更新功能。
檢視device/rockchip/rk3399/BoardConfig.mk
![](https://img.laitimes.com/img/__Qf2AjLwojIjJCLyojI0JCLicmbw5yNidjZhJTZxEWMjFWY1MGNmBTNkFGMlR2MhZGNkFWO38CX0JXZ252bj91Ztl2Lc52YucWbp5GZzNmLn9Gbi1yZtl2Lc9CX6MHc0RHaiojIsJye.png)
确認目前版本号為1.0.0,同時将ro.product.ota.host修改為用于OTA更新伺服器的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應用開發環境編譯章節安裝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版本。
https://mp.ofweek.com/ai/a356714981167