9. 根文件系统备份与重新烧录

本章主要介绍如何对根文件系统进行备份以及重新烧录。

当用户在样机上完成了功能开发,一个迫切的需求就是对根文件系统进行备份。 该备份的文件系统将用于系统恢复与实际产品烧录等环节。为方便大家实际使用,野火提供u盘备份系统与sd卡备份系统两种方式, 用户可以根据自己的实际需求进行选择。

9.1. 根文件系统备份

1.首先用户需要准备一个u盘或者是sd卡,注意u盘/sd卡的容量一定要比当前系统占用的磁盘空间要大,否则备份过程将会失败。 用户可通过在控制台终端输入以下命令,查看当前系统大小:

df -h

如下图:表示当前系统占用357M硬盘空间,用户需要确保u盘容量大于357M

未找到图片00|

2.插入u盘,确保当前系统识别到相应设备文件,设备文件为:/dev/sdx(x为具体英文字母),如果系统只有一个u盘设备, 那么该设备文件通常为:/dev/sda,用户可通过输入以下命令确认:

ls /dev/sd*

如下图:表示u盘被设别为/dev/sda

未找到图片00|

建议大家在插入u盘前后,都输入该命令查看系统识别的存储设备,确保新增的设备文件为u盘设备。

注意:如果是使用sd卡备份,相应的设备文件则为:/dev/mmcblk0。

3.在当前系统中,执行野火提供的系统备份脚本,该备份脚本已经在野火最新发布的系统镜像中提供, 具体路径为:/opt/scripts/tools/backup/backup_rootfs.sh

用户执行该脚本时,需要输入u盘的设备文件作为参数,如以下命令所示:

sudo /opt/scripts/tools/backup/backup_rootfs.sh /dev/sda

执行该文件后,系统将自动开始备份,如下图:

未找到图片00|

用户耐心等待备份过程结束即可,如下图:

未找到图片00|
  1. 下面给用户讲解该备份脚本的根文件系统备份原理,该脚本的内容如下所示:

1:      #!/bin/bash -e
2:
3:
4:      _exit_trap() {
5:          umount ${tmp_rootfs_dir}
6:          rmdir ${tmp_rootfs_dir}
7:      }
8:
9:      _err_trap() {
10:          umount ${tmp_rootfs_dir}
11:          rmdir ${tmp_rootfs_dir}
12:      }
13:
14:      dpkg -l | grep exfat-fuse || deb_pkgs="${deb_pkgs}exfat-fuse "
15:      dpkg -l | grep exfat-utils || deb_pkgs="${deb_pkgs}exfat-utils "
16:
17:      if [ "${deb_pkgs}" ] ; then
18:          echo "Installing: ${deb_pkgs}"
19:          sudo apt-get update
20:          sudo apt-get -y install ${deb_pkgs}
21:      fi
22:
23:      tmp_rootfs_dir=/mnt/rootfs_backup
24:
25:      if [ $# -gt 0 ]; then
26:          DEV="$1"
27:      else
28:          echo "please input a storage device!"
29:          exit 0
30:      fi
31:
32:      mkfs.exfat -n rootfs $DEV
33:
34:      trap _exit_trap EXIT
35:      trap _err_trap ERR
36:
37:      if [ ! -d ${tmp_rootfs_dir} ] ; then
38:          mkdir ${tmp_rootfs_dir}
39:      fi
40:
41:      mount -t exfat $DEV $tmp_rootfs_dir
42:
43:      tar -cvf ${tmp_rootfs_dir}/rootfs.tar --exclude={/dev/*,/proc/*,/sys/*,/tmp/*,/run/*,/mnt/*,/media/*,/lost+found,/boot} /*
44:
45:      echo "roofs backup finished!!"

第1行:表示使用bash解释器解析该脚本,-e参数代表命令一旦执行出错,脚本马上停止执行。

第4~12行:设置脚本执行错误和退出时应当执行的函数,这里主要是卸载和删除临时挂载目录。

第14~21行:判断系统是否安装了exfat-fuse和exfat-utils两个工具包。这里通过u盘备份获取的根文件系统, 用户最终还需要在windows平台上重新烧录到其他芯片。因此,为方便在windows平台上从u盘拷贝出根文件系统, u盘应当格式化为exfat文件系统,该文件系统格式可以直接被windows平台识别。但是,在linux系统中挂载和 格式化exfat文件系统,则需要使用上面的两个工具。如果系统未安装这两个工具包,应该使用apt工具进行安装。

第23行:设置u盘挂载时使用的临时文件夹。

第25~30行:判断执行脚本的传参,这里需要传入u盘相关设备文件。

第32行:以exfat格式化u盘设备。

第34~35行:捕捉脚本执行错误和退出的信号,如果捕捉成功,则执行相应处理函数。

第37~41行:创建临时文件夹,并挂载u盘设备。

第43行:用tar工具打包当前根文件系统。注意,当前系统目录有一系列虚拟文件系统和临时文件,用户无需备份, 用–exclude参数排除这部分目录和文件即可。打包得到的根文件系统命令为rootfs.tar。

第45行:提示用户文件系统备份完毕!

5、系统备份成功后,拔下u盘,查入到windows电脑上,可查看到rootfs.tar文件。

9.2. mfg工具烧录rootfs.tar

上面获取到rootfs.tar文件后,我们可以使用mfg工具,重新把该文件系统烧录到芯片中。

首先,打开野火最新提供的mfg烧录工具,把rootfs.tar文件拷贝到mfgtools-release/Profiles/Linux/OS Firmware/release目录下, 替换旧的系统文件,按照”烧录NXP官方固件”章节进行重新烧写系统即可。

注意:此处根文件系统的命名(如rootfs.tar),需要与mfgtools-release/cfg.ini文件中my_rootfs的变量值相同!