ARM40-A5应用——ARM40文件的半自动远程更新示例(ARM40-semiauto-OTA)
2018.9.21
在应用程序升级以后,希望ARM40能够从远程服务器下载并安装新版本的应用程序。
本文提供一种应用程序的手动远程更新的参考方法。
一、半自动远程更新的步骤
1.1、服务器端文件
服务器端涉及到的目录和文件如下:
/home/ARM40-A5/ARM40-A5-projects/rdace/APP_20180925/MANAGER #目录,存在管理文件
/home/ARM40-A5/ARM40-A5-projects/rdace/APP_20180925/RELEASE #目录,存放下载到ARM40的文件
/home/ARM40-A5/ARM40-A5-projects/rdace/APP_20180925/MANAGER/update.sh #脚本文件
1.2、ARM40上的操作
(1)建立/opt/user/ota-dbg.sh文件
(2)执行/opt/user/ota-dbg.sh
(3)reboot重启ARM40,检查并测试。
二、服务器端文件
服务端需要开启rsync服务,参考《ARM40-A5应用——使用rsync与Linux服务器的远程数据同步》。
本示例中,服务器47.98.140.167上rsync的ARM40_IDC模块的地址为:
/home/ARM40-A5/ARM40-A5-projects/rdace/APP_20180925
含MANAGER和RELEASE两个目录。
MANAGER目录中存放update.sh脚本。
RELEASE目录中存放需要下载到ARM40的文件。
update.sh的内容见附录。
三、 ARM40上的操作
(1)建立/opt/user/ota-dbg.sh文件
touch /opt/user/ota-dbg.sh
chmod 755 /opt/user/ota-dbg.sh
其内容为:
#!/bin/sh
echo "hello ARM40_IDC"
SERVER_IDC=ARM40-A5@47.98.140.167::ARM40_IDC
rsync -avz --timeout=60 --password-file=/etc/rsync.passwd $SERVER_IDC/MANAGER/update.sh /tmp/
chmod 755 /tmp/update.sh
/tmp/update.sh
(2)执行 /opt/user/ota-dbg.sh
ota-dbg.sh会将服务器上的update.sh脚本下载到ARM40的/tmp/update.sh,并运行该脚本。
脚本update.sh会依次把 BATCH_FILES 中罗列的文件拷贝到ARM40相应的位置,并修改各文件的chmod。
脚本/opt/user/ota-dbg.sh的执行示例(删去了部分rsync的log):
root@ARM40:# /opt/user/ota-dbg.sh
hello ARM40_IDC
receiving incremental file list
update.sh
hello ARM40
/opt/user/AutoStartTest.sh OK
/opt/user/RS485-RS422-select.sh OK
/etc/init.d/S40network OK
/etc/init.d/S41network OK
/home/test/test_ad7689_4ch
/home/test/test_leds.sh OK
batch_files OK
(3)reboot重启ARM40,检查并测试。
参考文章:
ARM40-A5应用——使用rsync与Linux服务器的远程数据同步
ARM40-A5应用——ARM40文件的自动远程更新(ARM40-auto-OTA)
ARM40应用——ARM40文件的拓荒部署示例(ARM40-reclaim-OTA)
嵌入式Linux固件升级
https://blog.csdn.net/jsfzdd/article/details/6158258
Linux下远程升级脚本
https://blog.csdn.net/sdvch/article/details/14109997
Android应用增量更新 - Smart App Updates
https://github.com/cundong/SmartAppUpdates
荟聚计划:共商 共建 共享 Grant
附:
(1)脚本 update.sh 的内容如下:
#!/bin/sh
#update.sh
#/opt/user/ota-dbg.sh
echo "hello ARM40"
SERVER_IDC=ARM40-A5@47.98.140.167::ARM40_IDC
cp_file_to_ARM40()
{
rsync -avz --password-file=/etc/rsync.passwd $SERVER_IDC/RELEASE/$1 /$1
if [ "$?" != "0" ]; then # rsync is not OK, game over
return 1
fi
echo "/$1 OK"
return 0
}
BATCH_FILES="opt/user/AutoStartTest.sh
opt/user/RS485-RS422-select.sh
etc/init.d/S40network
etc/init.d/S41network
home/test/test_ad7689_4ch
home/test/test_leds.sh"
batch_files()
{
for batch in $BATCH_FILES
do
cp_file_to_ARM40 $batch
if [ "$?" != "0" ]; then
return 1
fi
done
echo "batch_files OK"
return 0
}
if [ ! -d /home/test ]; then
mkdir -p /home/test
fi
batch_files
chmod 755 /opt/user/AutoStartTest.sh
chmod 755 /opt/user/RS485-RS422-select.sh
chmod 755 /etc/init.d/S40network
chmod 755 /etc/init.d/S41network
chmod 555 /opt/user/me.info
chmod 755 /tmp/setby-meinfo.sh
chmod 755 /home/test/test_ad7689_4ch
chmod 755 /home/test/test_leds.sh