ARM40-A5应用——ARM40文件的拓荒部署示例(ARM40-reclaim-OTA)
2018.10.9
本文适合ARM40文件的半自动拓荒部署(即首次部署)。
一、ARM40文件拓荒部署的步骤
1.1、服务器端文件
服务器端涉及到的目录和文件如下:
/home/ARM40-A5/ARM40-A5-projects/noise_rdace/APP_20181009/MANAGER #目录,存在管理文件
/home/ARM40-A5/ARM40-A5-projects/noise_rdace/APP_20181009/RELEASE #目录,存放下载到ARM40的文件
/home/ARM40-A5/ARM40-A5-projects/noise_rdace/APP_20181009/MANAGER/update-rtchip.sh #脚本文件
/home/ARM40-A5/ARM40-A5-projects/noise_rdace/APP_20181009/MANAGER/product-list/A5A1890001 #产品ID文件
1.2、ARM40上的操作
(1)建立/opt/user/ota-rtchip.sh文件
(2)执行/opt/user/ota-rtchip.sh A5A1890001 (A5A1890001为产品ID文件名)
(3)reboot重启ARM40,检查并测试。。
二、服务器端文件
服务端需要开启rsync服务,参考《ARM40-A5应用——使用rsync与Linux服务器的远程数据同步》。
本示例中,服务器192.168.1.130上rsync的RDACE_IDC模块的地址为:
/home/ARM40-A5/ARM40-A5-projects/noise_rdace/APP_20181009
含MANAGER和RELEASE两个目录,部分文件示例如下:
MANAGER目录中存放update-rtchip.sh脚本和product-list目录。product-list目录中存放产品ID文件。
RELEASE目录中存放需要下载到ARM40的文件,其中RELEASE/tmp目录下的文件,在ARM40上是临时文件,重新上电后不会存在。
update-rtchip.sh、A5A1880001、setby-meinfo.sh等文件的内容见附录。
三、 ARM40上的操作
(1)建立/opt/user/ota-rtchip.sh文件
touch /opt/user/ota-rtchip.sh
chmod 755 /opt/user/ota-rtchip.sh
其内容为:
#!/bin/sh
echo "hello ARM40_IDC"
SERVER_IDC=ARM40-A5@192.168.1.130::RDACE_IDC
#先拷贝MANAGER/tmp中的存放的rsync和libpopt.so.0
scp -r ritserver@192.168.1.130:/home/ARM40-A5/ARM40-A5-projects/noise_rdace/APP_20181009/MANAGER/tmp/* /tmp/
echo "123456" > /etc/rsync.passwd
chmod 0600 /etc/rsync.passwd
cp /tmp/rsync /usr/bin/
cp /tmp/libpopt.so.0 /usr/lib/
rsync -avz --timeout=60 --password-file=/etc/rsync.passwd $SERVER_IDC/MANAGER/update-rtchip.sh /tmp/
chmod 755 /tmp/update-rtchip.sh
/tmp/update-rtchip.sh $1
(2)执行 /opt/user/ota-rtchip.sh A5A1880001
ota-rtchip.sh会将服务器上的update-rtchip.sh脚本下载到ARM40的/tmp/update-rtchip.sh,并运行该脚本。
脚本update-rtchip.sh会依次把 BATCH_FILES 中罗列的文件拷贝到ARM40相应的位置,并修改各文件的chmod。
脚本update-rtchip.sh的最后会执行setby-meinfo.sh $1
,例如 setby-meinfo.sh A5A1880001
,根据A5A1880001的内容,生成MAC地址、产品ID、holer-key等产品自身相关的信息。若更新时无此需要,则注释掉update-rtchip.sh中的setby-meinfo.sh $1
即可。
脚本/opt/user/ota-rtchip.sh的执行示例(删去了部分rsync的log和setby-meinfo.sh的log):
root@ARM40:# /opt/user/ota-rtchip.sh A5A1880001
hello ARM40_IDC
receiving incremental file list
update-rtchip.sh
hello ARM40
/etc/init.d/S40network OK
/etc/init.d/S41network OK
/opt/user/setby-meinfo.sh OK
batch_files OK
(3) 需手工完成的部分
- 1、增加armholer用户名
adduser armholer
#passwd:armholer
若此处的用户名、密码与/opt/rdace-manager/rdace.info中的不同,请修改rdace.info中的信息。 - 2、免密登陆ARM40
修改 /etc/inittab中的
console::respawn:/sbin/getty -L console 0 vt100 # GENERIC_SERIAL
#console::respawn:-/bin/sh
为:
#console::respawn:/sbin/getty -L console 0 vt100 # GENERIC_SERIAL
console::respawn:-/bin/sh
- 3、重启
reboot
参考文章:
ARM40-A5应用——使用rsync与Linux服务器的远程数据同步
ARM40-A5应用——ARM40文件的自动远程更新(ARM40-auto-OTA)
ARM40-A5应用——ARM40文件的半自动远程更新(ARM40-semiauto-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-rtchip.sh 的内容如下:
#!/bin/sh
#update-rtchip.sh
#/opt/user/ota-rtchip.sh A5A1880001 #download A5A1880001 to /opt/rdace-manager/rdace.info
echo "hello ARM40"
SERVER_IDC=ARM40-A5@192.168.1.130::RDACE_IDC
MEINFO=/opt/rdace-manager/rdace.info
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="usr/bin/holer
etc/holer-key
etc/init.d/S40network
etc/init.d/S41network
etc/hosts
opt/user/ota-dbg.sh
etc/profile
etc/profile.local
tmp/setby-meinfo.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 /opt/rdace-manager ]; then
mkdir -p /opt/rdace-manager
fi
# cp product-list/$1 to /opt/rdace-manager/rdace.info (on ARM40-A5)
cp_meinfo_to_ARM40()
{
rsync -avz --password-file=/etc/rsync.passwd $SERVER_IDC/MANAGER/product-list/$1 $MEINFO
if [ "$?" != "0" ]; then # rsync is not OK, game over
return 1
fi
echo "$1 OK"
return 0
}
batch_files
cp_meinfo_to_ARM40 $1 #eg: A5A1880001
/tmp/setby-meinfo.sh $MEINFO
chmod 755 /usr/bin/holer
chmod 777 /etc/holer-key
chmod 755 /etc/init.d/S40network
chmod 755 /etc/init.d/S41network
chmod 644 /etc/hosts
chmod 644 /etc/profile
chmod 755 /etc/profile.local
(2)A5A1880001的内容示例如下:
ME_ID=A5A1880001
ME_MASTER=EC5002
ETH0_IP=192.168.0.250
ETH0_MAC=C8:1B:5C:05:86:9C
ETH0_GATEWAY=192.168.0.1
ETH0_DNS=223.5.5.5
ETH1_IP=192.168.6.6
ETH1_MAC=C8:1B:5C:05:86:9D
ETH1_GATEWAY=192.168.6.1
ETH1_DNS=223.5.5.5
GPRS_ID=PPA1880001
GPRS_SIM=null
HOLER_KEY=cbf1bea217f9608fa4b1f3361ae
HOLER_ACCESS=armholer:armholer
HOLER_PORT=63301
HOLER_FEE=154057203@qq.com
HOLER_VALIDITY=2018.8.21:180
UPS_ID=UPA1880001
MFG_DATE=2018.8.21
MFG_COO=SHANGHAI
FIX_ADDR=SHANGHAI:JINSHAN
(3)setby-meinfo.sh的内容示例如下:
#!/bin/sh
echo "hello me.info"
ETH0_MAC=`awk '/ETH0_MAC/ {print $1}' $1 |cut -d '=' -f 2`
ETH0_IP=`awk '/ETH0_IP/ {print $1}' $1 |cut -d '=' -f 2`
ETH0_GATEWAY=`awk '/ETH0_GATEWAY/ {print $1}' $1 |cut -d '=' -f 2`
ETH0_DNS=`awk '/ETH0_DNS/ {print $1}' $1 |cut -d '=' -f 2`
ETH1_MAC=`awk '/ETH1_MAC/ {print $1}' $1 |cut -d '=' -f 2`
ETH1_IP=`awk '/ETH1_IP/ {print $1}' $1 |cut -d '=' -f 2`
ETH1_GATEWAY=`awk '/ETH1_GATEWAY/ {print $1}' $1 |cut -d '=' -f 2`
ETH1_DNS=`awk '/ETH1_DNS/ {print $1}' $1 |cut -d '=' -f 2`
echo "# Configure eth0" > /etc/network/interfaces.eth0
echo "MACADDRESS=$ETH0_MAC" >> /etc/network/interfaces.eth0
echo "IPADDRESS=$ETH0_IP" >> /etc/network/interfaces.eth0
echo "NETMASK=255.255.255.0" >> /etc/network/interfaces.eth0
echo "GATEWAY=$ETH0_GATEWAY" >> /etc/network/interfaces.eth0
echo "DNS=$ETH0_DNS" >> /etc/network/interfaces.eth0
echo "# Configure eth1" > /etc/network/interfaces.eth1
echo "MACADDRESS=$ETH1_MAC" >> /etc/network/interfaces.eth1
echo "IPADDRESS=$ETH1_IP" >> /etc/network/interfaces.eth1
echo "NETMASK=255.255.255.0" >> /etc/network/interfaces.eth1
echo "GATEWAY=$ETH1_GATEWAY" >> /etc/network/interfaces.eth1
echo "DNS=$ETH1_DNS" >> /etc/network/interfaces.eth1
HOLER_KEY=`awk '/HOLER_KEY/ {print $1}' $1 |cut -d '=' -f 2`
echo "$HOLER_KEY" > /etc/holer-key
chmod 664 /etc/network/interfaces.eth0
chmod 664 /etc/network/interfaces.eth1
chmod 777 /etc/holer-key
chmod 777 /opt/rdace-manager/rdace.info
echo "********************************"
cat /etc/network/interfaces.eth0
echo "********************************"
cat /etc/network/interfaces.eth1
echo "********************************"
cat $1