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。

...