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