131c75014Sopenharmony_ci#!/bin/bash
231c75014Sopenharmony_ci# Copyright (c) 2020 Huawei Device Co., Ltd.
331c75014Sopenharmony_ci# Licensed under the Apache License, Version 2.0 (the "License");
431c75014Sopenharmony_ci# you may not use this file except in compliance with the License.
531c75014Sopenharmony_ci# You may obtain a copy of the License at
631c75014Sopenharmony_ci#
731c75014Sopenharmony_ci#     http://www.apache.org/licenses/LICENSE-2.0
831c75014Sopenharmony_ci#
931c75014Sopenharmony_ci# Unless required by applicable law or agreed to in writing, software
1031c75014Sopenharmony_ci# distributed under the License is distributed on an "AS IS" BASIS,
1131c75014Sopenharmony_ci# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1231c75014Sopenharmony_ci# See the License for the specific language governing permissions and
1331c75014Sopenharmony_ci# limitations under the License.
1431c75014Sopenharmony_ci
1531c75014Sopenharmony_ciset -e
1631c75014Sopenharmony_cicurrent_user_name=$(whoami)
1731c75014Sopenharmony_ciif [ "$current_user_name" != "root" ]
1831c75014Sopenharmony_cithen
1931c75014Sopenharmony_ci    echo "请使用root用户执行该脚本,程序退出"
2031c75014Sopenharmony_ci    exit 1
2131c75014Sopenharmony_cifi
2231c75014Sopenharmony_ci
2331c75014Sopenharmony_ci# 检查输入参数数量
2431c75014Sopenharmony_ciif [ $# -lt 3 ]
2531c75014Sopenharmony_cithen
2631c75014Sopenharmony_ci    echo "输入参数不足3个,程序退出!"
2731c75014Sopenharmony_ci    exit 1
2831c75014Sopenharmony_cifi
2931c75014Sopenharmony_ci
3031c75014Sopenharmony_ciset +e
3131c75014Sopenharmony_cimtd_str=$(dpkg -l|grep mtd-utils)
3231c75014Sopenharmony_ciset -e
3331c75014Sopenharmony_ci
3431c75014Sopenharmony_ciif [ "$mtd_str" ]
3531c75014Sopenharmony_cithen
3631c75014Sopenharmony_ci    echo "已经安装了mtd-utils"
3731c75014Sopenharmony_cielse
3831c75014Sopenharmony_ci    echo "开始安装mtd-utils"
3931c75014Sopenharmony_ci    apt-get install mtd-utils
4031c75014Sopenharmony_ci    echo "mtd-utils安装成功"
4131c75014Sopenharmony_cifi
4231c75014Sopenharmony_ci
4331c75014Sopenharmony_cimtd_device="/dev/mtdblock0"
4431c75014Sopenharmony_ciif [ ! -b "$mtd_device" ]
4531c75014Sopenharmony_cithen
4631c75014Sopenharmony_ci    # 安装并初始化mtd模块
4731c75014Sopenharmony_ci    echo "安装并初始化mtd模块"
4831c75014Sopenharmony_ci    modprobe mtdblock
4931c75014Sopenharmony_ci    modprobe mtdram total_size=102400
5031c75014Sopenharmony_ci    chmod 666 /dev/mtdblock0
5131c75014Sopenharmony_ci    echo "mtd模块操作完成"
5231c75014Sopenharmony_cielse
5331c75014Sopenharmony_ci    echo "mtd模块已安装"
5431c75014Sopenharmony_cifi
5531c75014Sopenharmony_ciecho "环境部署完成"
5631c75014Sopenharmony_ci
5731c75014Sopenharmony_ciold_img_path=$1
5831c75014Sopenharmony_ci# 检查文件是否存在
5931c75014Sopenharmony_ciif [ ! -e "$old_img_path" ]
6031c75014Sopenharmony_cithen
6131c75014Sopenharmony_ci    echo "Line:$LINENO,ERROR:$old_img_path can not be found, exit!"
6231c75014Sopenharmony_ci    exit 1
6331c75014Sopenharmony_cifi
6431c75014Sopenharmony_ci
6531c75014Sopenharmony_ci# 检查输入数据目录
6631c75014Sopenharmony_ciinput_dir=$2
6731c75014Sopenharmony_ciif [ ! -d "$input_dir" ]
6831c75014Sopenharmony_cithen
6931c75014Sopenharmony_ci    echo "Line:$LINENO,ERROR:intput_dir $input_dir can not be found, exit!"
7031c75014Sopenharmony_ci    exit 1
7131c75014Sopenharmony_cifi
7231c75014Sopenharmony_ci
7331c75014Sopenharmony_ci# 检查输出目录
7431c75014Sopenharmony_cioutput_dir=$3
7531c75014Sopenharmony_cioutput_filepath="$output_dir/new_rootfs.img"
7631c75014Sopenharmony_ciif [ ! -d "$output_dir" ]
7731c75014Sopenharmony_cithen
7831c75014Sopenharmony_ci    echo "Line:$LINENO,INFO:output_dir $output_dir not exists and it will be created!"
7931c75014Sopenharmony_ci    mkdir -p $output_dir
8031c75014Sopenharmony_cifi
8131c75014Sopenharmony_ci
8231c75014Sopenharmony_ci# 检查挂在目录
8331c75014Sopenharmony_cimount_dir="$HOME/mnt"
8431c75014Sopenharmony_ciif [ ! -d "$mount_dir" ]
8531c75014Sopenharmony_cithen
8631c75014Sopenharmony_ci    echo "Line:$LINENO,WARN:$mount_dir not exists and it will be created!"
8731c75014Sopenharmony_ci    mkdir -p $mount_dir
8831c75014Sopenharmony_cifi
8931c75014Sopenharmony_ci
9031c75014Sopenharmony_ciset +e
9131c75014Sopenharmony_cimount_flag=$(df|grep "$mount_dir")
9231c75014Sopenharmony_ciset -e
9331c75014Sopenharmony_ci# 将块设备挂载到本地目录,并赋予相关权限
9431c75014Sopenharmony_ciif [ "$mount_flag" ]
9531c75014Sopenharmony_cithen
9631c75014Sopenharmony_ci    echo "$mount_dir 已挂在其他设备,卸载该目录"
9731c75014Sopenharmony_ci    umount $mount_dir
9831c75014Sopenharmony_ci    # 将镜像文件写入块设备 
9931c75014Sopenharmony_ci    dd if=$old_img_path of=$mtd_device
10031c75014Sopenharmony_ci    mount -t jffs2 $mtd_device $mount_dir
10131c75014Sopenharmony_ci    chmod -R 755 $mount_dir
10231c75014Sopenharmony_ci    echo "$mtd_device 挂在到本地成功"
10331c75014Sopenharmony_cielse
10431c75014Sopenharmony_ci    dd if=$old_img_path of=$mtd_device
10531c75014Sopenharmony_ci    mount -t jffs2 $mtd_device $mount_dir
10631c75014Sopenharmony_ci    chmod -R 755 $mount_dir
10731c75014Sopenharmony_ci    echo "$mtd_device 挂在到本地成功"
10831c75014Sopenharmony_cifi
10931c75014Sopenharmony_ci
11031c75014Sopenharmony_ciif [ ! -d "$mount_dir/bin" ]
11131c75014Sopenharmony_cithen
11231c75014Sopenharmony_ci    echo "Line:$LINENO,INFO:$mount_dir/bin not exists and it will be created!"
11331c75014Sopenharmony_ci    mkdir -p $mount_dir/bin
11431c75014Sopenharmony_cifi
11531c75014Sopenharmony_ci# 遍历目录拷贝数据文件
11631c75014Sopenharmony_cifor file_name in $(ls $input_dir)
11731c75014Sopenharmony_cido
11831c75014Sopenharmony_ci    file_path=$input_dir"/"$file_name
11931c75014Sopenharmony_ci    if [ -f "$file_path" ]
12031c75014Sopenharmony_ci    then
12131c75014Sopenharmony_ci        \cp $file_path $mount_dir/bin
12231c75014Sopenharmony_ci        echo "文件$file_name 拷贝成功"
12331c75014Sopenharmony_ci    fi
12431c75014Sopenharmony_cidone
12531c75014Sopenharmony_ci
12631c75014Sopenharmony_ci# 制作jffs2镜像文件
12731c75014Sopenharmony_ci/usr/sbin/mkfs.jffs2 -q -d $mount_dir -o $output_filepath
12831c75014Sopenharmony_cichmod 755 $output_filepath
12931c75014Sopenharmony_ciecho "新镜像 $output_filepath 制作成功"
13031c75014Sopenharmony_ci# 卸载块设备
13131c75014Sopenharmony_ciumount $mount_dir
13231c75014Sopenharmony_ciecho "$mount_dir 卸载成功"
13331c75014Sopenharmony_cimodprobe -r mtdram
13431c75014Sopenharmony_cimodprobe -r mtdblock
13531c75014Sopenharmony_ciecho "mtd模块卸载成功"
13631c75014Sopenharmony_ciecho "Normal completion,OK!"
13731c75014Sopenharmony_ciexit 0
138