OTA Q&A
Q1:OTA升级过程中报错,提示Open device err/Device or resource busy。
升级某分区前,该分区未umount,umount成功后就可以正常升级。
Q2:umount过程失败,提示umount: can't umount /customer: Device or resource busy
对应的mount被其他应用占用,使用fuser -m /customer
查询占用的进程。
Q3:如何在测试阶段强制kill掉mount分区的占用?
直接使用fuser -km /customer
。
Q4:如何在OTA升级中做一些自定义动作?
OTA打包时,用户选择是否需要打包start.sh/end.sh
,其中start.sh
在升级前执行,end.sh
升级完成后执行(默认没有这两个脚本,如有需要请自行定义)。
Q5:start.sh/end.sh
一般在什么情况下使用?
start.sh
用于umount动作;end.sh
用于升级后动作处理,如判断升级是否成功,成功或失败后需要如何处理。
start.sh:
fuser -km /dev/fb0 fuser -km /customer fuser -km /config fuser -km /appconfigs sleep 2 umount /customer umount /config umount /appconfigs
end.sh:
echo $OTA_STATUS if [ $OTA_STATUS -eq 0 ]; then /etc/fw_setenv use_bak_rootfs 0 else /etc/fw_setenv use_bak_rootfs 1 fi
Q6:Fastboot版本使用OTA升级rootfs分区,启动失败,但从uboot启动正常。
Fastboot版本启动从IPL load rootfs分区,load时通过env 变量initrd_size制定的大小来load,ota升级不改变该变量,当新升级的rootfs大小大于initrd_size,load rootfs缺失导致启动失败。
解决方法:将initrd_size按实际分区的大小load。
...