updata.sh 4.0 KB
#! /bin/bash 
echo "updata.sh"

Update_PsdkPack="JZ*"
Update_Package="Package"
HardwareIdentification="HardwareIdeNum" #硬件码文件
TarPackage_second=UpgradePackage.tar.gz #二次解压包的名字
MD5saveFile=UpdateMD5num #md5文件内部的md5值文件


#得到二次解压包和md5校验文件

# 校验mp5  失败直接删除
# 获取文件的md5值
md5_File="$(md5sum "${TarPackage_second}" | cut -d ' ' -f 1)"
echo 文件的md5为:$md5_File

# 读取文件第一行并删除不可见字符
md5_save=$(sed '1s/[^[:print:]]//g' "$MD5saveFile")
echo 读取的md5为:$md5_save

# 比较md5值是否匹配
if [ "$md5_File" == "$md5_save" ]; then
    echo "MD5 matches: $md5_File"
else
    delete_updateFile; #删除更新文件
    #mkdir /root/sdcard/MP5校验失败;
    rm /root/sdcard/update_log.txt
    echo "MP5校验失败" > /root/sdcard/update_log.txt


    # 播报升级失败
    ./defeat;
    
    exit;
fi


# 二次解压
tar -zxvf $TarPackage_second;


#标准更新

# 定义一个名为 HardwareNum 的数组
declare -a HardwareNum

echo "___识别更新用的序列号,判断该机器是否能够更新____"

# 补充添加
# 添加硬件区分 

# 硬件版本号 4位
#  ① 芯片型号
#  ② 硬件大型改动
#  ③ 硬件非通用改动
#  ④ 通用改动

#1、读取硬件号
if [ ! -f /root/${HardwareIdentification} ]; then
    echo "____硬件序列号不存在___"
else
    # 逐行读取文件,将每一行内容保存到数组中
    while read line; do
        HardwareNum+=("$line")
    done < /root/${HardwareIdentification}

    # 打印数组的每个元素
    for i in "${HardwareNum[@]}"; do
    echo "$i"
    done
fi


echo "____更新步骤____"

# u3和u3d增加一个移库步骤,用于适配新的音频库
if [ ! -d " /home/audio/alsa-lib_output/share/alsa" ]; then
    echo "新音频库 alsa 文件夹不存在,正在创建..."
    mkdir /home
    mkdir /home/audio
    mkdir /home/audio/alsa-lib_output
    mkdir /home/audio/alsa-lib_output/share
    mkdir /home/audio/alsa-lib_output/share/alsa
    echo "alsa 文件夹已创建"
    cp /usr/share/alsa/alsa.conf /home/audio/alsa-lib_output/share/alsa/
    echo "alsa.conf 文件已复制"

    echo "____解除静音____"
    amixer sset -c 0 'Headphone' 30% unmute
else
    echo "alsa 文件夹已存在"
fi

#1、更新app
mv /root/Package/app/ffmpeg /bin/              #将滤波器移动到bin目录
mv /root/Package/app/ffprobe /bin/             #将app移动到usr/bin目录
mv /root/Package/app/* /root/            #如h1start h1error等报语音程序

#2、更新配置文件
cp /root/Package/config/* /root/         #将logger.yaml移动到/root

#3、更新lib文件
mv /root/Package/lib/* /lib/             #更新lib文件

#4、更新psdk
mv /root/Package/psdk/* /root/               #更新psdk

#5、更新驱动文件kofile
mkdir /root/kofile
mv /root/Package/kofile/*.ko /root/kofile      #更新ko驱动文件

#6、更新杂项
mv /root/Package/others/*   /root/           #将others下的所有文件移动到root
tar xvf /root/espeak-data.tar   #如果本地有海外版的压缩包 进行解压
rm /root/espeak-data.tar

#7、更新脚本文件
# 备注,由于脚本文件是执行一行行的格式 自身被覆盖不会导致出错
# 但是后续的执行后会被改变,所以即使updata.sh和up.sh被打开 也能执行mv
# 但是为了保证更新正常, up.sh的操作 最好只加不改
mv /root/Package/sh/*.sh         /root/               #更新剩下的脚本

#8、更新启动文件
mv /root/Package/ProFile/profile /etc/profile   #更新启动文件
mv /root/Package/ProFile/asound.conf /etc/asound.conf   #更新语音配置
rm /usr/sbin/NetworkManager     #删除linux上的网络管理工具

echo "____更新完成,删除文件____"
rm -rf /root/sdcard/$Update_PsdkPack             #删除psdk更新包
rm -rf /root/$Update_Package          #删除解压后的更新包
rm -rf /root/$TarPackage_second #删除二次更新包
rm -rf /root/$MD5saveFile;     #删除md5校准文件
rm -rf /root/FactoryReset.sh

echo "___updata.sh____";