热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

TX2入门教程基础篇备份和恢复

说明:介绍如何为TX2进行备份和恢复(0)准备:准备好利用Jetpack刷过机的Ubuntu的主机(HOSTPC)在利

说明:

  • 介绍如何为TX2进行备份和恢复

(0)准备:

  • 准备好利用Jetpack刷过机的Ubuntu的主机(HOST PC)
  • 在利用Jetpack刷机时候,建立目录TX2,并保存有JetPack-L4T-*-linux-x64.run文件
  • 再进行第一次刷机之后会增加其他目录,并生成子目录64_TX2

(1) 备份:

  • 进入HOST PC的JetPack安装目录下bootloader目录

$ cd ~/TX2/64_TX2/Linux_for_Tegra_64_tx2/bootloader

  • 连上TX2,并进入recovery模式(通电,按住recovery键3秒,再按一下reset键)
  • 检查是否出现0955:7140 Nvidia Corp

$ lsusb

  • 效果如图:

![请输入图片描述][2]

  • 从TX2下载镜像:

$ sudo ./flashNew.sh -r -k APP -G my_backup.img jetson-tx2 mmcblk0p1

  • 原来的flash.sh缺少 -G 参数支持,改为新增加脚本flashNew.sh

  • flashNew.sh脚本如下:

#!/bin/bash# Copyright (c) 2011-2017, NVIDIA CORPORATION. All rights reserved.
#
# Redistribution and use in source and binary forms, with or without
# modification, are permitted provided that the following conditions
# are met:
# * Redistributions of source code must retain the above copyright
# notice, this list of conditions and the following disclaimer.
# * Redistributions in binary form must reproduce the above copyright
# notice, this list of conditions and the following disclaimer in the
# documentation and/or other materials provided with the distribution.
# * Neither the name of NVIDIA CORPORATION nor the names of its
# contributors may be used to endorse or promote products derived
# from this software without specific prior written permission.
#
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ``AS IS'' AND ANY
# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
# EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
# PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
# OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.#
# flash.sh: Flash the target board.
# flash.sh performs the best in LDK release environment.
#
# Usage: Place the board in recovery mode and run:
#
# flash.sh [options]
#
# for more detail enter 'flash.sh -h'
#
# Examples:
# ./flash.sh mmcblk0p1 - boot from eMMC
# ./flash.sh mmcblk1p1 - boot from SDCARD
# ./flash.sh sda1 - boot from USB device
# ./flash.sh -N :/nfsroot eth0 - boot from NFS
# ./flash.sh -k LNX mmcblk1p1 - update kernel
# ./flash.sh -k EBT mmcblk1p1 - update bootloader
#
# Optional Environment Variables:
# BCTFILE ---------------- Boot control table configuration file to be used.
# BOARDID ---------------- Pass boardid to override EEPROM value
# BOOTLOADER ------------- Bootloader binary to be flashed
# BOOTPARTLIMIT ---------- GPT data limit. (== Max BCT size + PPT size)
# BOOTPARTSIZE ----------- Total eMMC HW boot partition size.
# CFGFILE ---------------- Partition table configuration file to be used.
# CMDLINE ---------------- Target cmdline. See help for more information.
# DEVSECTSIZE ------------ Device Sector size. (default = 512Byte).
# DTBFILE ---------------- Device Tree file to be used.
# EMMCSIZE --------------- Size of target device eMMC (boot0+boot1+user).
# FLASHAPP --------------- Flash application running in host machine.
# FLASHER ---------------- Flash server running in target machine.
# IGNOREFASTBOOTCMDLINE -- Block fastboot from filling unspecified kernel
# cmdline parameters with its defaults.
# INITRD ----------------- Initrd image file to be flashed.
# KERNEL_IMAGE ----------- Linux kernel zImage file to be flashed.
# MTS -------------------- MTS file name such as mts_si.
# MTSPREBOOT ------------- MTS preboot file name such as mts_preboot_si.
# NFSARGS ---------------- Static Network assignments.
# :::
# NFSROOT ---------------- NFSROOT i.e. :/exported/rootfs_dir.
# ODMDATA ---------------- Odmdata to be used.
# ROOTFSSIZE ------------- Linux RootFS size (internal emmc/nand only).
# ROOTFS_DIR ------------- Linux RootFS directory name.
# SCEFILE ---------------- SCE firmware file such as camera-rtcpu-sce.bin.
# SPEFILE ---------------- SPE firmware file path such as bootloader/spe.bin.
# FAB -------------------- Target board's FAB ID.
# TEGRABOOT -------------- lowerlayer bootloader such as nvtboot.bin.
# WB0BOOT ---------------- Warmboot code such as nvtbootwb0.bin
#
chkerr ()
{if [ $? -ne 0 ]; thenif [ "$1" != "" ]; thenecho "$1";elseecho "failed.";fi;exit 1;fi;if [ "$1" = "" ]; thenecho "done.";fi;
}pr_conf()
{if [ "${zflag}" != "true" ]; thenreturn 0;fi;echo "target_board=${target_board}";echo "target_rootdev=${target_rootdev}";echo "rootdev_type=${rootdev_type}";echo "rootfssize=${rootfssize}";echo "odmdata=${odmdata}";echo "flashapp=${flashapp}";echo "flasher=${flasher}";echo "bootloader=${bootloader}";echo "tegraboot=${tegraboot}";echo "wb0boot=${wb0boot}";echo "mtspreboot=${mtspreboot}";echo "mts=${mts}";echo "bctfile=${bctfile}";echo "cfgfile=${cfgfile}";echo "kernel_fs=${kernel_fs}";echo "kernel_image=${kernel_image}";echo "rootfs_dir=${rootfs_dir}";echo "nfsroot=${nfsroot}";echo "nfsargs=${nfsargs}";echo "kernelinitrd=${kernelinitrd}";echo "cmdline=${cmdline}";echo "boardid=${boardid}";exit 0;
}validateIP ()
{local ip=$1;local ret=1;if [[ $ip =~ ^[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}$ ]]; thenOIFS=${IFS};IFS='.';ip=($ip);IFS=${OIFS};[[ ${ip[0]} -le 255 && ${ip[1]} -le 255 && \${ip[2]} -le 255 && ${ip[3]} -le 255 ]];ret=$?;fi;if [ ${ret} -ne 0 ]; thenecho "Invalid IP address: $1";exit 1;fi;
}netmasktbl=(\"255.255.255.252" \"255.255.255.248" \"255.255.255.240" \"255.255.255.224" \"255.255.255.192" \"255.255.255.128" \"255.255.255.0" \"255.255.254.0" \"255.255.252.0" \"255.255.248.0" \"255.255.240.0" \"255.255.224.0" \"255.255.192.0" \"255.255.128.0" \"255.255.0.0" \"255.254.0.0" \"255.252.0.0" \"255.248.0.0" \"255.240.0.0" \"255.224.0.0" \"255.192.0.0" \"255.128.0.0" \"255.0.0.0" \
);validateNETMASK ()
{local i;local nm&#61;$1;for (( i&#61;0; i<${#netmasktbl[&#64;]}; i&#43;&#43; )); doif [ "${nm}" &#61; ${netmasktbl[$i]} ]; thenreturn 0;fi;done;echo "Error: Invalid netmask($1)";exit 1;
}validateNFSargs ()
{local a&#61;$2;OIFS&#61;${IFS};IFS&#61;&#39;:&#39;;a&#61;($a);IFS&#61;${OIFS};if [ ${#a[&#64;]} -ne 4 ]; thenecho "Error: Invalid nfsargs($2)";exit 1;fi;validateIP ${a[0]};if [ "${serverip}" &#61; "" ]; thenvalidateIP ${a[1]};fi;validateIP ${a[2]};validateNETMASK ${a[3]};if [ "$1" !&#61; "" ]; theneval "$1&#61;$2";fi;return 0;
}validateNFSroot ()
{if [ "$2" &#61; "" ]; thenreturn 1;fi;OIFS&#61;${IFS};IFS&#61;&#39;:&#39;;local var&#61;$1;local a&#61;($2);IFS&#61;${OIFS};if [ ${#a[&#64;]} -ne 2 ]; thenecho "Error: Invalid nfsroot($2)";exit 1;fi;validateIP ${a[0]};if [[ "${a[1]}" !&#61; /* ]]; thenecho "Error: Invalid nfsroot($2)";exit 1;fi;eval "${var}&#61;$2";return 0;
}usage ()
{state&#61;$1;retval&#61;$2;if [[ $state &#61;&#61; allunknown ]]; thenecho -e "
Usage: sudo ./flash.sh [options] Where,target board: Valid target board name.rootdev: Proper root device.";elif [[ $state &#61;&#61; rootdevunknown ]]; thenecho -e "
Usage: sudo ./flash.sh [options] ${target_board} Where,rootdev for ${target_board}:${ROOT_DEV}";elseecho "
Usage: sudo ./flash.sh [options] ${target_board} ${target_rootdev}";fi;cat < --------- nvflash boot control table config file.-c --------- nvflash partition table config file.-d --------- device tree file.-e ------- Target device&#39;s eMMC size.-f -------- Path to flash application: nvflash or tegra-rcm.-h ------------------- print this message.-i ------------------- pass user kernel commandline as-is to kernel.-k ---- partition name or number specified in flash.cfg.-m ----- MTS preboot such as mts_preboot_si.-n -------- Static nfs network assignments:::-o --------- ODM data.-p --------- Total eMMC HW boot partition size.-r ------------------- skip building and reuse existing system.img.-t ------- tegraboot binary such as nvtboot.bin-u -------- PKC server in &#64; format.-w --------- warm boot binary such as nvtbootwb0.bin-x --------- Tegra CHIPID. default &#61; 0x18(jetson-tx2)0x21(jetson-tx1), 0x40(jetson-tk1).-y -------- PKC for secureboot, NS for non-secureboot.-z -------------- Serial Number of target board.-B --------- BoardId.-C --------- Kernel commandline arguments.WARNING:Each option in this kernel commandline getshigher preference over the same option fromfastboot. In case of NFS booting, this scriptadds NFS booting related arguments, if -i optionis omitted.-F --------- Flash server such as fastboot.bin.-G ------- Read partition and save image to file.-I ---------- initrd file. Null initrd is default.-K ---------- Kernel image file such as zImage or Image.-L ------ Bootloader such as cboot.bin or u-boot-dtb.bin.-M -------- MTS boot file such as mts_si.-N --------- i.e. :/my/exported/nfs/rootfs.-P -- Primary GPT start address &#43; size of PPT &#43; 1.-R ------ Sample rootfs directory.-S ------------ Rootfs size in bytes. Valid only for internalrootdev. KiB, MiB, GiB short hands are allowed,for example, 1GiB means 1024 * 1024 * 1024 bytes.-T -------- ITS file name. Valid only for u-boot.--no-flash ----------- perform all steps except physically flashing the board.This will create a system.img.
EOFexit $retval;
}setdflt ()
{local var&#61;"$1";if [ "${!var}" &#61; "" ]; theneval "${var}&#61;$2";fi;
}setval ()
{local var&#61;"$1";local val&#61;"$2";if [ "${!val}" &#61; "" ]; thenecho "Error: missing $val not defined.";exit 1;fi;eval "${var}&#61;${!val}";
}mkfilesoft ()
{local var&#61;"$1";local varname&#61;"$1name";eval "${var}&#61;$2";if [ "${!var}" &#61; "" -o ! -f "${!var}" ]; thenif [ "$3" !&#61; "" -a -f "$3" ]; theneval "${var}&#61;$3";fi;fi;if [ "${!var}" !&#61; "" ]; thenif [ ! -f ${!var} ]; thenecho "Warning: missing $var (${!var}), continue... ";eval "${var}&#61;\"\"";eval "${varname}&#61;\"\"";return 1;fi;eval "${var}&#61;&#96;readlink -f ${!var}&#96;";eval "${varname}&#61;&#96;basename ${!var}&#96;";fi;return 0;
}mkfilepath ()
{local var&#61;"$1";local varname&#61;"$1name";eval "${var}&#61;$2";setdflt "${var}" "$3";if [ "${!var}" !&#61; "" ]; theneval "${var}&#61;&#96;readlink -f ${!var}&#96;";if [ ! -f "${!var}" ]; thenecho "Error: missing $var (${!var}).";usage allknown 1;fi;eval "${varname}&#61;&#96;basename ${!var}&#96;";fi;
}mkdirpath ()
{local var&#61;"$1";eval "${var}&#61;$2";setdflt "$1" "$3";if [ "${!var}" !&#61; "" ]; theneval "${var}&#61;&#96;readlink -f ${!var}&#96;";if [ ! -d "${!var}" ]; thenecho "Error: missing $var (${!var}).";usage allknown 1;fi;fi;
}getsize ()
{local var&#61;"$1";local val&#61;"$2";if [[ ${!val} !&#61; *[!0-9]* ]]; theneval "${var}&#61;${!val}";elif [[ (${!val} &#61;&#61; *KiB) && (${!val} !&#61; *[!0-9]*KiB) ]]; theneval "${var}&#61;$(( ${!val%KiB} * 1024 ))";elif [[ (${!val} &#61;&#61; *MiB) && (${!val} !&#61; *[!0-9]*MiB) ]]; theneval "${var}&#61;$(( ${!val%MiB} * 1024 * 1024 ))";elif [[ (${!val} &#61;&#61; *GiB) && (${!val} !&#61; *[!0-9]*GiB) ]]; theneval "${var}&#61;$(( ${!val%GiB} * 1024 * 1024 * 1024))";elseecho "Error: Invalid $1: ${!val}";exit 1;fi;
}validatePartID ()
{local idx&#61;0;declare -A cf;while read aline; doif [ "$aline" !&#61; "" ]; thenarr&#61;( $(echo $aline | tr &#39;&#61;&#39; &#39; &#39;) );if [ "${arr[1]}" &#61;&#61; "name" ]; thenif [ "${arr[3]}" &#61;&#61; "id" ]; thencf[$idx,1]&#61;"${arr[2]}";cf[$idx,0]&#61;"${arr[4]}";elsecf[$idx,0]&#61;"${arr[2]}";fiidx&#61;$((idx&#43;1));fifi;done <$4;if [ "${arr[3]}" &#61;&#61; "id" ]; thenfor ((i &#61; 0; i }cp2local ()
{local src&#61;$1;if [ "${!src}" &#61; "" ]; then return 1; fi;if [ ! -f "${!src}" ]; then return 1; fi;if [ "$2" &#61; "" ]; then return 1; fi;if [ -f $2 -a ${!src} &#61; $2 ]; thenlocal sum1&#61;&#96;sum ${!src}&#96;;local sum2&#61;&#96;sum $2&#96;;if [ "$sum1" &#61; "$sum2" ]; thenecho "Existing ${src}($2) reused.";return 0;fi;fi;echo -n "copying ${src}(${!src})... ";cp -f ${!src} $2;chkerr;return 0;
}chsuffix ()
{local var&#61;"$1";local fname&#61;&#96;basename "$2"&#96;;local OIFS&#61;${IFS};IFS&#61;&#39;.&#39;;na&#61;($fname);IFS&#61;${OIFS};eval "${var}&#61;${na[0]}.${3}";
}build_fsimg ()
{echo "Making $1... ";local loop_dev&#61;"${LOOPDEV:-/dev/loop0}";if [ ! -b "${loop_dev}" ]; thenecho "${loop_dev} is not block device. Terminating..";exit 1;fi;loop_dev&#61;&#96;losetup --find&#96;;if [ $? -ne 0 ]; thenecho "Cannot find loop device. Terminating..";exit 1;fi;umount "${loop_dev}" > /dev/null 2>&1;losetup -d "${loop_dev}" > /dev/null 2>&1;rm -f $1; chkerr "clearing $1 failed.";rm -rf mnt; chkerr "clearing $4 mount point failed.";local bcnt&#61;$(( $3 / 512 ));local bcntdiv&#61;$(( $3 % 512 ));if [ $bcnt -eq 0 -o $bcntdiv -ne 0 ]; thenecho "Error: $4 file system size has to be 512 bytes allign.";exit 1;fiif [ "$2" !&#61; "" -a "$2" !&#61; "0" ]; thenlocal fc&#61;&#96;printf &#39;%d&#39; $2&#96;;local fillc&#61;&#96;printf \\\\$(printf &#39;%02o&#39; $fc)&#96;; $1;chkerr "making $1 with fillpattern($fillc}) failed.";elsetruncate --size $3 $1;chkerr "making $1 with zero fillpattern failed.";fi;losetup "${loop_dev}" $1 > /dev/null 2>&1;chkerr "mapping $1 to loop device failed.";if [ "$4" &#61; "FAT32" ]; thenmkfs.msdos -I -F 32 "${loop_dev}" > /dev/null 2>&1;elsemkfs -t $4 "${loop_dev}" > /dev/null 2>&1;fi;chkerr "formating $4 filesystem on $1 failed.";mkdir -p mnt; chkerr "make $4 mount point failed.";mount "${loop_dev}" mnt; chkerr "mount $1 failed.";mkdir -p mnt/boot/dtb; chkerr "make $1/boot/dtb failed.";cp -f "${kernel_fs}" mnt/boot;chkerr "Copying ${kernel_fs} failed.";if [ -f "${dtbfilename}" ]; thencp -f "${dtbfilename}" "mnt/boot/dtb/${dtbfilename}";chkerr "populating ${dtbfilename} to $1/boot/dtb failed.";fi;if [ "$4" &#61; "FAT32" ]; thentouch -f mnt/boot/cmdline.txt > /dev/null 2&>1;chkerr "Creating cmdline.txt failed.";fi;if [ "$5" !&#61; "" ]; thenpushd mnt > /dev/null 2>&1;echo -n -e "\tpopulating rootfs from $5 ... ";(cd $5; tar cf - *) | tar xf - ; chkerr;popd > /dev/null 2>&1;fi;echo -e -n "\tSync&#39;ing $1 ... ";sync; sync; sleep 5; # Give FileBrowser time to terminate gracefully.echo "done.";umount "${loop_dev}" > /dev/null 2>&1;losetup -d "${loop_dev}" > /dev/null 2>&1;rmdir mnt > /dev/null 2>&1;if [ "$2" !&#61; "" -a -x mksparse ]; thenecho -e "\tConverting RAW image to Sparse image... ";mv -f $1 $1.raw;./mksparse -v --fillpattern&#61;$2 $1.raw $1; chkerr;fi;echo "$1 built successfully. ";
}append_bootargs_to_dtb ()
{local trgdtbfilename&#61;"${1}";if [ "${flashappname}" !&#61; "tegraflash.py" ]; thenreturn 1;fi;default_cmd&#61;"console&#61;tty0 OS&#61;l4t ";dtc -I dtb -O dts "${trgdtbfilename}" -o temp.dts;sed -i &#39;/bootargs/d&#39; temp.dts;for string in ${default_cmd}; dolcl_str&#61;&#96;echo $string | sed "s|\(.*\)&#61;.*|\1|"&#96;;[[ "${cmdline}" &#61;~ $lcl_str ]] || cmdline&#43;&#61;" ${string}";donesed -i "/chosen {/ a \\\t\\tbootargs&#61;\"${cmdline} console&#61;ttyS0,115200n8 \";" temp.dts;sed -i "/stdout-path &#61; \"/ a \\\t\\tplugin-manager {\n\\t\t\todm-data {\n\t\t\t\tl4t;\n\t\t\t};\n\t\t};" temp.dts;dtc -I dts -O dtb temp.dts -o "${trgdtbfilename}";rm temp.dts;
}get_fuse_level ()
{local fuselevel&#61;"x";local ECID;if [ -f "${BL_DIR}/tegrarcm_v2" ]; thenpushd "${BL_DIR}" > /dev/null 2>&1;ECID&#61;$(./tegrarcm_v2 --uid | grep BR_CID | cut -d&#39; &#39; -f2);popd > /dev/null 2>&1;fuselevel&#61;"${ECID:2:1}";fi;case ${fuselevel} in0|1) echo "fuselevel_nofuse";;8|a|b|d|e|f) echo "fuselevel_production";;*) echo "fuselevel_unknown";;esac;
}function get_full_path ()
{local val&#61;"$1";local result&#61;"$2";local fullpath;fullpath&#61;$(readlink -f ${val}); # null if path is invalidif [ "${fullpath}" &#61;&#61; "" ]; thenecho "Invalid path/filename ${val}";exit 1;fi;eval "${result}&#61;${fullpath}";
}#
# XXX: This EEPROM read shall be replaced with new FAB agnostic function.
#
get_board_version ()
{local args&#61;"";local __board_id&#61;$1;local __board_version&#61;$2;local boardid;local boardversion;args&#43;&#61;"--chip ${CHIPID} ";args&#43;&#61;"--applet \"${LDK_DIR}/${SOSFILE}\" ";args&#43;&#61;"--cmd \"dump eeprom boardinfo cvm.bin\" ";args&#43;&#61;"${SKIPUID} ";SKIPUID&#61;"";local cmd&#61;"./tegraflash.py ${args}";pushd "${BL_DIR}" > /dev/null 2>&1;if [ "${dbmaster}" !&#61; "" ]; thenlocal keyfile;if [[ ${dbmaster} &#61;~ ^/ ]]; thenkeyfile&#61;"${dbmaster}";elsekeyfile&#61;&#96;readlink -f "../${dbmaster}"&#96;;fi;cmd&#43;&#61;"--key \"${keyfile} \"";fi;echo "${cmd}";eval "${cmd}";chkerr "Reading board information failed.";boardid&#61;&#96;./chkbdinfo -i cvm.bin&#96;;boardversion&#61;&#96;./chkbdinfo -f cvm.bin&#96;;chkerr "Parsing board information failed.";popd > /dev/null 2>&1;eval ${__board_id}&#61;"${boardid}";eval ${__board_version}&#61;"${boardversion}";
}if [ $# -lt 2 ]; thenusage allunknown 1;
fi;# if the user is not root, there is not point in going forward
if [ "${USER}" !&#61; "root" ]; thenecho "flash.sh requires root privilege";exit 1;
fi
nargs&#61;$#;
target_rootdev&#61;${!nargs};
nargs&#61;$(($nargs-1));
ext_target_board&#61;${!nargs};if [ ! -r ${ext_target_board}.conf ]; thenecho "Error: Invalid target board - ${ext_target_board}.";usage allunknown 1;
fi# set up LDK_DIR path
LDK_DIR&#61;$(cd &#96;dirname $0&#96; && pwd);
LDK_DIR&#61;&#96;readlink -f "${LDK_DIR}"&#96;;source ${ext_target_board}.conf# set up path variables
BL_DIR&#61;"${LDK_DIR}/bootloader";
TARGET_DIR&#61;"${BL_DIR}/${target_board}";
KERNEL_DIR&#61;"${LDK_DIR}/kernel";
export PATH&#61;"${KERNEL_DIR}:${PATH}"; # preference on our DTC
DTB_DIR&#61;"${KERNEL_DIR}/dtb";
if [ "${BINSARGS}" &#61; "" -a "${BINS}" !&#61; "" ]; then #COMPATBINARGS&#61;"--bins \""; #COMPAT
fi; #COMPAT
if [ "${BINSARGS}" !&#61; "" ]; thenSKIPUID&#61;"--skipuid";
fi;# get the fuse level and update the data accordingly
declare -F -f process_fuse_level > /dev/null 2>&1;
if [ $? -eq 0 ]; thenfuselevel&#61;"${FUSELEVEL}";if [ "${fuselevel}" &#61; "" ]; thenfuselevel&#61;$(get_fuse_level);fi;process_fuse_level "${fuselevel}";
fi;# Determine rootdev_type
#
rootdev_type&#61;"external";
if [[ "${target_rootdev}" &#61;&#61; mmcblk0p* ]]; thenrootdev_type&#61;"internal";
elif [ "${target_rootdev}" &#61; "eth0" -o "${target_rootdev}" &#61; "eth1" ]; thenrootdev_type&#61;"network";
elif [[ "${target_rootdev}" !&#61; mmcblk1p* && \"${target_rootdev}" !&#61; sd* ]]; thenecho "Error: Invalid target rootdev($target_rootdev).";usage rootdevunknown 1;
fi;read_part_name&#61;"";
no_flash&#61;0;
opstr&#43;&#61;"b:c:d:e:f:hik:m:n:o:p:rs:t:u:w:x:y:z:B:C:F:G:I:K:L:M:N:P:R:S:T:Z:-:";
while getopts "${opstr}" OPTION
docase $OPTION inb) BCTFILE&#61;${OPTARG}; ;;c) CFGFILE&#61;${OPTARG}; ;;d) DTBFILE&#61;${OPTARG}; ;;e) EMMCSIZE&#61;${OPTARG}; ;;f) FLASHAPP&#61;${OPTARG}; ;;h) usage allunknown 0; ;;i) IGNOREFASTBOOTCMDLINE&#61;"ignorefastboot"; ;;k) target_partname&#61;${OPTARG}; ;; # cmdline onlym) MTSPREBOOT&#61;${OPTARG}; ;;n) NFSARGS&#61;${OPTARG}; ;;o) ODMDATA&#61;${OPTARG}; ;;p) BOOTPARTSIZE&#61;${OPTARG}; ;;r) reuse_systemimg&#61;"true"; ;; # cmdline onlyt) TEGRABOOT&#61;${OPTARG}; ;;u) dbmaster&#61;"${OPTARG}"; ;;w) WB0BOOT&#61;${OPTARG}; ;;x) tegraid&#61;${OPTARG}; ;;y) fusetype&#61;${OPTARG}; ;;z) sn&#61;${OPTARG}; ;;B) BOARDID&#61;${OPTARG}; ;;C) CMDLINE&#61;"${OPTARG}"; ;;F) FLASHER&#61;${OPTARG}; ;;G) read_part_name&#61;${OPTARG}; ;;I) INITRD&#61;${OPTARG}; ;;K) KERNEL_IMAGE&#61;${OPTARG}; ;;L) BOOTLOADER&#61;${OPTARG}; ;;M) MTS&#61;${OPTARG}; ;;N) NFSROOT&#61;${OPTARG}; ;;P) BOOTPARTLIMIT&#61;${OPTARG}; ;;R) ROOTFS_DIR&#61;${OPTARG}; ;;S) ROOTFSSIZE&#61;${OPTARG}; ;;Z) zflag&#61;"true"; ;; # cmdline only-) case ${OPTARG} inno-flash) no_flash&#61;1; ;;esac;;*) usage allunknown 1; ;;esac;
done#
# Handle -G option for reading partition image to file
#
if [ "${read_part_name}" !&#61; "" ]; then# Exit if path is invalidget_full_path ${read_part_name} read_part_name;
fi;# get the board version and update the data accordingly
declare -F -f process_board_version > /dev/null 2>&1;
if [ $? -eq 0 ]; thenboard_version&#61;"${FAB}";if [ "${board_version}" &#61; "" ]; thenget_board_version board_id board_version;fi;process_board_version "${board_id}" "${board_version}";
fi;###########################################################################
# System default values: should be defined AFTER target_board value.
#
ROOTFS_TYPE&#61;"${ROOTFS_TYPE:-ext4}";
DEVSECTSIZE&#61;"${DEVSECTSIZE:-512}"; # default sector size &#61; 512
BOOTPARTLIMIT&#61;"${BOOTPARTLIMIT:-10485760}"; # 1MiB limit
fillpat&#61;"${FSFILLPATTERN:-0}"; # no cmdline: default&#61;0
boardid&#61;"${BOARDID}";
if [ "${tegraid}" &#61; "" ]; thentegraid&#61;"${CHIPID}";
fi;if [ -z "${DFLT_KERNEL}" ]; thenif [[ "${target_board}" &#61;&#61; ardbeg* ]]; thenDFLT_KERNEL&#61;${KERNEL_DIR}/zImage;elseDFLT_KERNEL&#61;${KERNEL_DIR}/Image;fi;
elsebasekernel&#61;&#96;basename "${DFLT_KERNEL}"&#96;;if [ "${DFLT_KERNEL}" &#61; "${basekernel}" ]; thenDFLT_KERNEL&#61;"${KERNEL_DIR}/${DFLT_KERNEL}";fi;
fi;
if [ -z "${DFLT_KERNEL_FS}" ]; thenDFLT_KERNEL_FS&#61;${DFLT_KERNEL};
fi;
if [ -z "${DFLT_KERNEL_IMAGE}" ]; thenDFLT_KERNEL_IMAGE&#61;${DFLT_KERNEL};
fi;###########################################################################
# System mandatory vars:
#
setval odmdata ODMDATA; # .conf mandatory
setval rootfs_type ROOTFS_TYPE;
setval devsectsize DEVSECTSIZE;
getsize rootfssize ROOTFSSIZE; # .conf mandatory
getsize emmcsize EMMCSIZE; # .conf mandatory
getsize bootpartsize BOOTPARTSIZE; # .conf mandatory
getsize bootpartlim BOOTPARTLIMIT;
mkfilepath flashapp "${FLASHAPP}" "${BL_DIR}/nvflash";
mkfilepath flasher "${FLASHER}" "${TARGET_DIR}/fastboot.bin";
mkfilepath bootloader "${BOOTLOADER}" "${TARGET_DIR}/fastboot.bin";
mkdirpath rootfs_dir "${ROOTFS_DIR}" "${LDK_DIR}/rootfs";
mkfilepath kernel_image "$KERNEL_IMAGE" "${DFLT_KERNEL_IMAGE}";
mkfilepath kernel_fs "$KERNEL_IMAGE" "${DFLT_KERNEL_FS}";
mkfilepath bctfile "${BCTFILE}" "${TARGET_DIR}/BCT/${EMMC_BCT}";
mkfilepath cfgfile "${CFGFILE}" "${TARGET_DIR}/cfg/${EMMC_CFG}";
mkfilepath dtbfile "${DTBFILE}" "${DTB_DIR}/${DTB_FILE}";if [[ "${bootloadername}" &#61;&#61; u-boot* ]]; thenbootloader_is_uboot&#61;1;
elsebootloader_is_uboot&#61;0;
fi;
if [[ "${kernel_imagename}" &#61;&#61; u-boot* ]]; thenkernel_image_is_uboot&#61;1;
elsekernel_image_is_uboot&#61;0;
fi;
if [ ${bootloader_is_uboot} -eq 1 -o ${kernel_image_is_uboot} -eq 1 ]; thenusing_uboot&#61;1;
elseusing_uboot&#61;0;
fi;
case "${target_board}" in
t210ref)uboot_replaces_tboot&#61;0;uboot_in_tboot_img&#61;1;if [ "${tegraid}" &#61; "" ]; thentegraid&#61;"0x21";fi;;;
t186ref)uboot_replaces_tboot&#61;0;uboot_in_tboot_img&#61;0;if [ "${tegraid}" &#61; "" ]; thentegraid&#61;"0x18";fi;;;
*)uboot_replaces_tboot&#61;1;uboot_in_tboot_img&#61;0;;;
esac;mkfilesoft kernelinitrd "${INITRD}" "";
if [ ${using_uboot} -eq 0 -o ${uboot_replaces_tboot} -eq 0 ]; thenmkfilesoft tegraboot "${TEGRABOOT}" "${TARGET_DIR}/nvtboot.bin";mkfilesoft wb0boot "${WB0BOOT}" "${TARGET_DIR}/nvtbootwb0.bin";
fi
mkfilesoft mtspreboot "${MTSPREBOOT}" "${BL_DIR}/mts_preboot_si";
mkfilesoft mts "${MTS}" "${BL_DIR}/mts_si";
mkfilesoft mb1file "${MB1FILE}" "${BL_DIR}/mb1_prod.bin";
mkfilesoft bpffile "${BPFFILE}" "${BL_DIR}/bpmp.bin";
mkfilesoft bpfdtbfile "${BPFDTBFILE}" "${TARGET_DIR}/${BPFDTB_FILE}";
if [ "${bpfdtbfile}" &#61; "" -a "${BPMPDTB_FILE}" !&#61; "" ]; then #COMPATmkfilesoft bpfdtbfile "${BL_DIR}/${BPMPDTB_FILE}" ""; #COMPAT
fi; #COMPAT
mkfilesoft nctfile "${NCTFILE}" "${TARGET_DIR}/cfg/${NCT_FILE}";
mkfilesoft tosfile "${TOSFILE}" "${TARGET_DIR}/tos.img";
mkfilesoft eksfile "${EKSFILE}" "${TARGET_DIR}/eks.img";
mkfilesoft fbfile "${FBFILE}" "";
mkfilesoft bcffile "${BCFFILE}" "";
mkfilesoft sosfile "${SOSFILE}" "";
mkfilesoft mb2blfile "${MB2BLFILE}" "";
mkfilesoft scefile "${SCEFILE}" "${BL_DIR}/camera-rtcpu-sce.bin";
mkfilesoft spefile "${SPEFILE}" "${BL_DIR}/spe.bin";mkfilesoft misc_config "${TARGET_DIR}/BCT/${MISC_CONFIG}" "";
mkfilesoft pinmux_config "${TARGET_DIR}/BCT/${PINMUX_CONFIG}" "";
mkfilesoft pmic_config "${TARGET_DIR}/BCT/${PMIC_CONFIG}" "";
mkfilesoft pmc_config "${TARGET_DIR}/BCT/${PMC_CONFIG}" "";
mkfilesoft prod_config "${TARGET_DIR}/BCT/${PROD_CONFIG}" "";
mkfilesoft scr_config "${TARGET_DIR}/BCT/${SCR_CONFIG}" "";
mkfilesoft dev_params "${TARGET_DIR}/BCT/${DEV_PARAMS}" "";
mkfilesoft bootrom_config "${TARGET_DIR}/BCT/${BOOTROM_CONFIG}" "";if [ ${using_uboot} -eq 0 -o ${uboot_replaces_tboot} -eq 0 ]; thenmkfilesoft tbcfile "${TBCFILE}" "";mkfilesoft tbcdtbfile "${TBCDTB_FILE}" "${DTB_DIR}/${DTB_FILE}";
fiif [ "${rootdev_type}" &#61; "network" ]; thenif [ "${NFSROOT}" &#61; "" -a "${NFSARGS}" &#61; "" ]; thenecho "Error: network argument(s) missing.";usage allknown 1;fi;if [ "${NFSROOT}" !&#61; "" ]; thenvalidateNFSroot nfsroot "${NFSROOT}";fi;if [ "${NFSARGS}" !&#61; "" ]; thenvalidateNFSargs nfsargs "${NFSARGS}";fi;if [ "${nfsroot}" !&#61; "" ]; thennfsdargs&#61;"root&#61;/dev/nfs rw netdevwait";cmdline&#43;&#61;"${nfsdargs} ";if [ "${nfsargs}" !&#61; "" ]; thennfsiargs&#61;"ip&#61;${nfsargs}";nfsiargs&#43;&#61;"::${target_rootdev}:off";elsenfsiargs&#61;"ip&#61;:::::${target_rootdev}:on";fi;cmdline&#43;&#61;"${nfsiargs} ";cmdline&#43;&#61;"nfsroot&#61;${nfsroot} ";fi;
elif [ "${flashappname}" &#61; "tegraflash.py" ]; thencmdline&#43;&#61;"root&#61;/dev/${target_rootdev} rw rootwait ";
fi;if [ "${CMDLINE_ADD}" !&#61; "" ]; thencmdline&#43;&#61;"${CMDLINE_ADD} ";
fi;if [ "${CMDLINE}" !&#61; "" ]; thenfor string in ${CMDLINE}; dolcl_str&#61;&#96;echo $string | sed "s|\(.*\)&#61;.*|\1|"&#96;if [[ "${cmdline}" &#61;~ $lcl_str ]]thencmdline&#61;&#96;echo "$cmdline" | sed "s|$lcl_str&#61;[0-9a-zA-Z:/]*|$string|"&#96;elsecmdline&#43;&#61;"${string} ";fidone
fi;if [ "${IGNOREFASTBOOTCMDLINE}" !&#61; "" ]; thencmdline&#43;&#61;"${IGNOREFASTBOOTCMDLINE} ";
fi;if [ ${using_uboot} -eq 1 ]; thenif [ "${rootdev_type}" &#61; "network" ]; thenSYSBOOTFILE&#61;"${TARGET_DIR}/${SYSBOOTFILE}.nfs";elif [[ "${target_rootdev}" &#61;&#61; mmcblk1p* ]]; thenSYSBOOTFILE&#61;"${TARGET_DIR}/${SYSBOOTFILE}.sdcard";elif [[ "${target_rootdev}" &#61;&#61; sd* ]]; thenSYSBOOTFILE&#61;"${TARGET_DIR}/${SYSBOOTFILE}.usb";elseSYSBOOTFILE&#61;"${TARGET_DIR}/${SYSBOOTFILE}.emmc";fi;mkfilesoft sysbootfile "${SYSBOOTFILE}";
fi;##########################################################################
pr_conf; # print config and terminate if requested.
##########################################################################pushd $BL_DIR > /dev/null 2>&1;### Localize files and build TAGS ########################################
# BCT_TAG:::
#
cp2local bctfile "${BL_DIR}/${bctfilename}";
if [ "${BINSARGS}" !&#61; "" ]; then# Build up BCT parameters:if [ "${misc_config}" !&#61; "" ]; thencp2local misc_config "${BL_DIR}/${misc_configname}";BCTARGS&#43;&#61;"--misc_config ${misc_configname} ";fi;if [ "${pinmux_config}" !&#61; "" ]; thencp2local pinmux_config "${BL_DIR}/${pinmux_configname}";BCTARGS&#43;&#61;"--pinmux_config ${pinmux_configname} ";fi;if [ "${pmic_config}" !&#61; "" ]; thencp2local pmic_config "${BL_DIR}/${pmic_configname}";BCTARGS&#43;&#61;"--pmic_config ${pmic_configname} ";fi;if [ "${pmc_config}" !&#61; "" ]; thencp2local pmc_config "${BL_DIR}/${pmc_configname}";BCTARGS&#43;&#61;"--pmc_config ${pmc_configname} ";fi;if [ "${prod_config}" !&#61; "" ]; thencp2local prod_config "${BL_DIR}/${prod_configname}";BCTARGS&#43;&#61;"--prod_config ${prod_configname} ";fi;if [ "${scr_config}" !&#61; "" ]; thencp2local scr_config "${BL_DIR}/${scr_configname}";BCTARGS&#43;&#61;"--scr_config ${scr_configname} ";fi;if [ "${bootrom_config}" !&#61; "" ]; thencp2local bootrom_config "${BL_DIR}/${bootrom_configname}";BCTARGS&#43;&#61;"--br_cmd_config ${bootrom_configname} ";fi;if [ "${dev_params}" !&#61; "" ]; thencp2local dev_params "${BL_DIR}/${dev_paramsname}";BCTARGS&#43;&#61;"--dev_params ${dev_paramsname} ";fi;if [ "${BCT}" &#61; "" ]; thenBCT&#61;"--sdram_config";fi;
elif [ "${BCT}" &#61; "" ]; thenBCT&#61;"--bct";
fi;# EBT_TAG:
#
if [ ${using_uboot} -eq 1 -a ${uboot_in_tboot_img} -eq 1 ]; thenbootloaderdir&#61;&#96;dirname "${bootloader}"&#96;;uboot_elf&#61;"${bootloaderdir}/u-boot";uboot_entry&#61;&#96;"${LDK_DIR}/elf-get-entry.py" "${uboot_elf}"&#96;;chkerr "Could not determine entry point of bootloader binary";"${BL_DIR}/gen-tboot-img.py" "${bootloader}" ${uboot_entry} "${BL_DIR}/${bootloadername}";chkerr "Failed to add TBOOT header to bootloader";
elsecp2local bootloader "${BL_DIR}/${bootloadername}";
fi;
EBT_TAG&#43;&#61;"-e s/fastboot.bin/${bootloadername}/ ";
EBT_TAG&#43;&#61;"-e s/EBTFILE/${bootloadername}/ ";# LNX_TAG:
#
localbootfile&#61;boot.img;
rm -f initrd; touch initrd;
if [ "$kernelinitrd" !&#61; "" -a -f "$kernelinitrd" ]; thenecho -n "copying initrd(${kernelinitrd})... ";cp -f "${kernelinitrd}" initrd;chkerr;
fi;
if [ ${using_uboot} -eq 1 ]; thenmkdir -p "${rootfs_dir}/boot" > /dev/null 2>&1;echo -e -n "\tpopulating kernel to rootfs... ";cp -f "${kernel_fs}" "${rootfs_dir}/boot"; chkerr;echo -e -n "\tpopulating initrd to rootfs... ";cp -f initrd "${rootfs_dir}/boot"; chkerr;echo -e -n "\tpopulating ${sysbootfilename} to rootfs... ";cp -f "${dtbfile}" "${rootfs_dir}/boot"; chkerr;echo -e -n "\tpopulating ${dtbfile} to rootfs... ";mkdir -p "${rootfs_dir}/boot/extlinux"; chkerr;cp -f "${sysbootfile}" "${rootfs_dir}/boot/extlinux/extlinux.conf";sed -i "s|fbcon&#61;map:.|${CMDLINE_ADD}|" "${rootfs_dir}/boot/extlinux/extlinux.conf";chkerr;
fiLNX_TAG&#43;&#61;"-e s/LNXNAME/kernel/ ";
LNX_TAG&#43;&#61;"-e s/LNXSIZE/67108864/ ";
if [ ${using_uboot} -eq 1 -a ${kernel_image_is_uboot} -eq 0 ]; thenLNX_TAG&#43;&#61;"-e /filename&#61;${localbootfile}/d ";LNX_TAG&#43;&#61;"-e /LNXFILE/d ";
elseecho -n "Making Boot image... ";MKBOOTARG&#43;&#61;"--kernel ${kernel_image} ";MKBOOTARG&#43;&#61;"--ramdisk initrd ";MKBOOTARG&#43;&#61;"--board ${target_rootdev} ";MKBOOTARG&#43;&#61;"--output ${localbootfile} ";./mkbootimg ${MKBOOTARG} --cmdline "${cmdline}" > /dev/null 2>&1;chkerr;LNX_TAG&#43;&#61;"-e s/LNXFILE/${localbootfile}/ ";
fi;# NCT_TAG:
#
if [ "${bcffile}" !&#61; "" ]; thencp2local bcffile "${BL_DIR}/${bcffilename}";NCTARGS&#43;&#61;"--boardconfig ${bcffilename} ";NCT_TAG&#43;&#61;"-e /NCTFILE/d ";NCT_TAG&#43;&#61;"-e s/NCTTYPE/data/ ";
elif [ "${boardid}" !&#61; "" ]; thenNCTARGS&#43;&#61;"--boardid $boardid";NCT_TAG&#43;&#61;"-e /NCTFILE/d ";NCT_TAG&#43;&#61;"-e s/NCTTYPE/data/ ";
elif [ "${nctfile}" !&#61; "" ]; thencp2local nctfile "${BL_DIR}/${nctfilename}";NCT_TAG&#43;&#61;"-e s/name&#61;NXT/name&#61;NCT/ ";NCT_TAG&#43;&#61;"-e s/NCTFILE/${nctfilename}/ ";NCT_TAG&#43;&#61;"-e s/NCTTYPE/config_table/ ";NCTARGS&#43;&#61;"--nct ${nctfilename}";
elseNCT_TAG&#43;&#61;"-e /NCTFILE/d ";NCT_TAG&#43;&#61;"-e s/NCTTYPE/data/ ";
fi;# SOS_TAG: XXX: recovery is yet to be implemented.
#
SOS_TAG&#43;&#61;"-e /SOSFILE/d ";
if [ "${sosfile}" !&#61; "" ]; thencp2local sosfile "${BL_DIR}/${sosfilename}";SOSARGS&#43;&#61;"--applet ${sosfilename} ";
elseSOS_TAG&#43;&#61;"-e /filename&#61;recovery.img/d ";
fi;# NVC_TAG:&#61;&#61; MB2
#
if [ "${tegraboot}" !&#61; "" ]; thencp2local tegraboot "${BL_DIR}/${tegrabootname}";NVC_TAG&#43;&#61;"-e s/NXC/NVC/ ";NVC_TAG&#43;&#61;"-e s/MB2NAME/mb2/ ";NVC_TAG&#43;&#61;"-e s/type&#61;data\s\&#43;#TEGRABOOT/type&#61;bootloader/ ";NVC_TAG&#43;&#61;"-e s/NVCTYPE/bootloader/ ";NVC_TAG&#43;&#61;"-e s/MB2TYPE/mb2_bootloader/ ";NVC_TAG&#43;&#61;"-e s/#filename&#61;nvtboot.bin/filename&#61;${tegrabootname}/ ";NVC_TAG&#43;&#61;"-e s/NVCFILE/${tegrabootname}/ ";NVC_TAG&#43;&#61;"-e s/MB2FILE/${tegrabootname}/ ";
elseNVC_TAG&#43;&#61;"-e s/NVCTYPE/data/ ";NVC_TAG&#43;&#61;"-e s/MB2TYPE/data/ ";NVC_TAG&#43;&#61;"-e /NVCFILE/d ";NVC_TAG&#43;&#61;"-e /MB2FILE/d ";NVC_TAG&#43;&#61;"-e /filename&#61;nvtboot.bin/d ";
fi;# MB2BL_TAG:&#61;&#61; tboot_recovery
#
if [ "${mb2blfile}" !&#61; "" ]; thencp2local mb2blfile "${BL_DIR}/${mb2blfilename}";if [ "${BINSARGS}" !&#61; "" ]; thenBINSARGS&#43;&#61;"mb2_bootloader ${mb2blfilename}; ";fi;
fi;# MPB_TAG:
#
if [ "${mtspreboot}" !&#61; "" ]; thencp2local mtspreboot "${BL_DIR}/${mtsprebootname}";MPB_TAG&#43;&#61;"-e s/MXB/MPB/ ";MPB_TAG&#43;&#61;"-e s/MPBNAME/mts-preboot/ ";MPB_TAG&#43;&#61;"-e s/type&#61;data\s\&#43;#MTSPREBOOT/type&#61;mts_preboot/ ";MPB_TAG&#43;&#61;"-e s/MPBTYPE/mts_preboot/ ";MPB_TAG&#43;&#61;"-e s/#filename&#61;mts_preboot_si/filename&#61;${mtsprebootname}/ ";MPB_TAG&#43;&#61;"-e s/MPBFILE/${mtsprebootname}/ ";if [ "${BINSARGS}" !&#61; "" ]; thenBINSARGS&#43;&#61;"mts_preboot ${mtsprebootname}; ";elseMTSARGS&#43;&#61;"--preboot ${mtsprebootname} ";fi;
elseMPB_TAG&#43;&#61;"-e s/MPBTYPE/data/ ";MPB_TAG&#43;&#61;"-e /#filename&#61;mts_preboot_si/d ";MPB_TAG&#43;&#61;"-e /MPBFILE/d ";
fi;# MBP_TAG:
#
if [ "${mts}" !&#61; "" ]; thencp2local mts "${BL_DIR}/${mtsname}";MBP_TAG&#43;&#61;"-e s/MXP/MBP/ ";MBP_TAG&#43;&#61;"-e s/MBPNAME/mts-bootpack/ ";MBP_TAG&#43;&#61;"-e s/type&#61;data\s\&#43;#MTSBOOTPACK/type&#61;mts_bootpack/ ";MBP_TAG&#43;&#61;"-e s/MBPTYPE/mts_bootpack/ ";MBP_TAG&#43;&#61;"-e s/#filename&#61;mts_si/filename&#61;${mtsname}/ ";MBP_TAG&#43;&#61;"-e s/MBPFILE/${mtsname}/ ";if [ "${BINSARGS}" !&#61; "" ]; thenBINSARGS&#43;&#61;"mts_bootpack ${mtsname}; ";elseMTSARGS&#43;&#61;"--bootpack ${mtsname} ";fi;
elseMBP_TAG&#43;&#61;"-e s/MBPTYPE/data/ ";MBP_TAG&#43;&#61;"-e /#filename&#61;mts_si/d ";MBP_TAG&#43;&#61;"-e /MBPFILE/d ";
fi;# MB1_TAG:
#
if [ "${mb1file}" !&#61; "" ]; thencp2local mb1file "${BL_DIR}/${mb1filename}";MB1_TAG&#43;&#61;"-e s/MB1NAME/mb1/ ";MB1_TAG&#43;&#61;"-e s/MB1TYPE/mb1_bootloader/ ";MB1_TAG&#43;&#61;"-e s/MB1FILE/${mb1filename}/ ";
elseMB1_TAG&#43;&#61;"-e s/MB1TYPE/data/ ";MB1_TAG&#43;&#61;"-e /MB1FILE/d ";
fi;# BPF_TAG:
#
if [ "${bpffile}" !&#61; "" ]; thencp2local bpffile "${BL_DIR}/${bpffilename}";BPF_TAG&#43;&#61;"-e s/BXF/BPF/ ";BPF_TAG&#43;&#61;"-e s/BPFNAME/bpmp-fw/ ";BPF_TAG&#43;&#61;"-e s/BPFFILE/${bpffilename}/ ";BPF_TAG&#43;&#61;"-e s/BPFSIGN/true/ ";if [ "${BINSARGS}" !&#61; "" ]; thenBINSARGS&#43;&#61;"bpmp_fw ${bpffilename}; ";fi;
elseBPF_TAG&#43;&#61;"-e /BPFFILE/d ";BPF_TAG&#43;&#61;"-e s/BPFSIGN/false/ ";
fi;# BPFDTB_TAG:
if [ "${bpfdtbfile}" !&#61; "" ]; thencp2local bpfdtbfile "${BL_DIR}/${bpfdtbfilename}";BPFDTB_TAG&#43;&#61;"-e s/BPFDTB-NAME/bpmp-fw-dtb/ ";BPFDTB_TAG&#43;&#61;"-e s/BPFDTB-FILE/${bpfdtbfilename}/ ";BPFDTB_TAG&#43;&#61;"-e s/BPMPDTB-SIGN/true/ ";BPFDTB_TAG&#43;&#61;"-e s/BPMPDTB/${bpfdtbfilename}/ "; #COMPATif [ "${BINSARGS}" !&#61; "" ]; thenBINSARGS&#43;&#61;"bpmp_fw_dtb ${bpfdtbfilename}; ";fi;
elseBPFDTB_TAG&#43;&#61;"-e /BPFDTB-FILE/d ";BPFDTB_TAG&#43;&#61;"-e s/BPMPDTB-SIGN/false/ ";
fi;# SCE_TAG:
if [ "${scefile}" !&#61; "" ]; thencp2local scefile "${BL_DIR}/${scefilename}";SCE_TAG&#43;&#61;"-e s/SCENAME/sce-fw/ ";SCE_TAG&#43;&#61;"-e s/SCESIGN/true/ ";SCE_TAG&#43;&#61;"-e s/SCEFILE/${scefilename}/ ";SCE_TAG&#43;&#61;"-e s/SCEFIRMWARE/${scefilename}/ "; #COMPAT
elseSCE_TAG&#43;&#61;"-e s/SCESIGN/flase/ ";SCE_TAG&#43;&#61;"-e /SCEFILE/d ";
fi;# SPE_TAG:
if [ "${spefile}" !&#61; "" ]; thencp2local spefile "${BL_DIR}/${spefilename}";SPE_TAG&#43;&#61;"-e s/SPENAME/spe-fw/ ";SPE_TAG&#43;&#61;"-e s/SPETYPE/spe_fw/ ";SPE_TAG&#43;&#61;"-e s/SPEFILE/${spefilename}/ ";SPE_TAG&#43;&#61;"-e s/spe.bin/${spefilename}/ ";
elseSPE_TAG&#43;&#61;"-e s/SPETYPE/data/ ";SPE_TAG&#43;&#61;"-e /SPEFILE/d ";
fi;# WB0_TAG:
#
if [ "${wb0boot}" !&#61; "" ]; thencp2local wb0boot "${BL_DIR}/${wb0bootname}";WB0_TAG&#43;&#61;"-e s/WX0/WB0/ ";WB0_TAG&#43;&#61;"-e s/SC7NAME/sc7/ ";WB0_TAG&#43;&#61;"-e s/WB0SIZE/20480/ ";WB0_TAG&#43;&#61;"-e s/type&#61;data\s\&#43;#WB0BOOT/type&#61;WB0/ ";WB0_TAG&#43;&#61;"-e s/WB0TYPE/WB0/ ";WB0_TAG&#43;&#61;"-e s/#filename&#61;warmboot.bin/filename&#61;${wb0bootname}/ ";WB0_TAG&#43;&#61;"-e s/WB0FILE/${wb0bootname}/ ";
elseWB0_TAG&#43;&#61;"-e s/WB0TYPE/data/ ";WB0_TAG&#43;&#61;"-e s/WB0SIZE/20480/ ";WB0_TAG&#43;&#61;"-e /WB0FILE/d ";WB0_TAG&#43;&#61;"-e /filename&#61;warmboot.bin/d ";
fi;# TOS_TAG:
#
if [ "${tosfile}" !&#61; "" ]; thencp2local tosfile "${BL_DIR}/${tosfilename}";TOS_TAG&#43;&#61;"-e s/TXS/TOS/ ";TOS_TAG&#43;&#61;"-e s/TOSNAME/secure-os/ ";TOS_TAG&#43;&#61;"-e s/TOSFILE/${tosfilename}/ ";if [ "${BINSARGS}" !&#61; "" ]; thenBINSARGS&#43;&#61;"tlk ${tosfilename}; ";fi;
elseTOS_TAG&#43;&#61;"-e /TOSFILE/d ";
fi;# EKS_TAG:
#
EKS_TAG&#43;&#61;"-e s/EXS/EKS/ ";
if [ "${eksfile}" !&#61; "" ]; thencp2local eksfile "${BL_DIR}/${eksfilename}";EKS_TAG&#43;&#61;"-e s/EKSFILE/${eksfilename}/ ";if [ "${BINSARGS}" !&#61; "" ]; thenBINSARGS&#43;&#61;"eks ${eksfilename}; ";fi;
elseEKS_TAG&#43;&#61;"-e /EKSFILE/d ";
fi;# FB_TAG:
#
if [ "${fbfile}" !&#61; "" ]; thenchsuffix fbfilebin ${fbfilename} "bin";fbfilexml&#61;"reserved_fb.xml";cp2local fbfile "${BL_DIR}/${fbfilename}";FB_TAG&#43;&#61;"-e s/FBFILE/${fbfilebin}/ ";FB_TAG&#43;&#61;"-e s/FX/FB/ ";FB_TAG&#43;&#61;"-e s/FBNAME/fusebypass/ ";FB_TAG&#43;&#61;"-e s/FBTYPE/fuse_bypass/ ";FB_TAG&#43;&#61;"-e s/FBSIGN/true/ ";if [ "${flashappname}" &#61; "tegraflash.py" ]; thenFBARGS&#43;&#61;"--fb ${fbfilebin} "FBARGS&#43;&#61;"--cmd \"parse fusebypass ${fbfilename} ";FBARGS&#43;&#61;"non-secure;flash;reboot\" ";fi;
elseFB_TAG&#43;&#61;"-e s/FBTYPE/data/ ";FB_TAG&#43;&#61;"-e s/FBSIGN/false/ ";FB_TAG&#43;&#61;"-e /FBFILE/d ";if [ "${flashappname}" &#61; "tegraflash.py" ]; thenFBARGS&#43;&#61;"--cmd \"flash;reboot\" ";fi;
fi;# DTB_TAG: Kernel DTB
#
if [ "${dtbfile}" !&#61; "" ]; thencp2local dtbfile "${BL_DIR}/${dtbfilename}";append_bootargs_to_dtb "${dtbfilename}";DTB_TAG&#43;&#61;"-e s/DXB/DTB/ ";DTB_TAG&#43;&#61;"-e s/KERNELDTB-NAME/kernel-dtb/ ";DTB_TAG&#43;&#61;"-e s/#filename&#61;tegra.dtb/filename&#61;${dtbfilename}/ ";DTB_TAG&#43;&#61;"-e s/DTBFILE/${dtbfilename}/ ";DTB_TAG&#43;&#61;"-e s/KERNELDTB-FILE/${dtbfilename}/ ";DTB_TAG&#43;&#61;"-e s/KERNEL-DTB/${dtbfilename}/ "; #COMPATif [ "${flashappname}" &#61; "tegraflash.py" ]; thenif [ "${tegraid}" !&#61; "0x18" ]; thenDTBARGS&#43;&#61;"--bldtb ${dtbfilename} ";fielseDTBARGS&#43;&#61;"--dtbfile ${dtbfilename} ";fi;
elseDTB_TAG&#43;&#61;"-e /tegra.dtb/d ";DTB_TAG&#43;&#61;"-e /DTBFILE/d ";DTB_TAG&#43;&#61;"-e /KERNELDTB-FILE/d ";
fi;# APP_TAG: RootFS
#
localsysfile&#61;system.img;
APP_TAG&#43;&#61;"-e s/size&#61;1073741824/size&#61;${rootfssize}/ ";
APP_TAG&#43;&#61;"-e s/APPSIZE/${rootfssize}/ ";
APP_TAG&#43;&#61;"-e /recovery.img/d ";
if [ "${reuse_systemimg}" &#61; "true" ]; thenAPP_TAG&#43;&#61;"-e s/filename&#61;system.img/filename&#61;${localsysfile}/ ";APP_TAG&#43;&#61;"-e s/APPFILE/${localsysfile}/ ";if [ "${read_part_name}" &#61;&#61; "" ]; thenecho "Reusing existing ${localsysfile}... ";if [ ! -e "${localsysfile}" ]; thenecho "file does not exist.";exit 1;fi;echo "done.";fi;
elif [ "${rootdev_type}" &#61; "internal" ]; thenAPP_TAG&#43;&#61;"-e s/filename&#61;system.img/filename&#61;${localsysfile}/ ";APP_TAG&#43;&#61;"-e s/APPFILE/${localsysfile}/ ";if [ "${target_partname}" &#61; "" -o "${target_partname}" &#61; "APP" ]; thenbuild_fsimg "$localsysfile" "$fillpat" \"$rootfssize" "$rootfs_type" "$rootfs_dir";fi;
elif [ "${rootdev_type}" &#61; "network" -o "${rootdev_type}" &#61; "external" -a \${using_uboot} -eq 1 ]; thenecho -n "generating /boot/extlinux/extlinux.conf files... ";APP_TAG&#43;&#61;"-e s/filename&#61;system.img/filename&#61;${localsysfile}/ ";APP_TAG&#43;&#61;"-e s/APPFILE/${localsysfile}/ ";NFSCONV&#61;"-e s/NFSARGS/${nfsiargs}/ ";NFSCONV&#43;&#61;"-e s%NFSROOT%${nfsroot}% ";sed ${NFSCONV} <"${rootfs_dir}/boot/extlinux/extlinux.conf" > ./extlinux.conf;mv ./extlinux.conf "${rootfs_dir}/boot/extlinux/extlinux.conf";echo "done.";echo "generating system.img for booting... ";tmpdir&#61;&#96;mktemp -d&#96;;mkdir -p "${tmpdir}/boot/extlinux" > /dev/null 2>&1;cp -f "${rootfs_dir}/boot/extlinux/extlinux.conf" "${tmpdir}/boot/extlinux" > /dev/null 2>&1;cp -f "${kernel_fs}" "${tmpdir}/boot" > /dev/null 2>&1;cp -f "${dtbfile}" "${tmpdir}/boot" > /dev/null 2>&1;cp -f initrd "${tmpdir}/boot" > /dev/null 2>&1;build_fsimg "$localsysfile" "$fillpat" \"$rootfssize" "$rootfs_type" "$tmpdir";
elseAPP_TAG&#43;&#61;"-e /filename&#61;system.img/d ";APP_TAG&#43;&#61;"-e /system.img/d ";APP_TAG&#43;&#61;"-e /APPFILE/d ";
fi;# TBC_TAG:&#61;&#61; EBT
#
if [ "${tbcfile}" !&#61; "" ]; thencp2local tbcfile "${BL_DIR}/${tbcfilename}";TBC_TAG&#43;&#61;"-e s/TXC/TBC/ ";TBC_TAG&#43;&#61;"-e s/TBCNAME/cpu-bootloader/ ";TBC_TAG&#43;&#61;"-e s/TBCTYPE/bootloader/ ";TBC_TAG&#43;&#61;"-e s/TBCFILE/${tbcfilename}/ ";
elseTBC_TAG&#43;&#61;"-e s/TBCTYPE/data/ ";TBC_TAG&#43;&#61;"-e /TBCFILE/d ";
fi;# TBCDTB_TAG:&#61;&#61; Bootloader DTB
#
if [ "${tbcdtbfile}" !&#61; "" ]; thencp2local tbcdtbfile "${BL_DIR}/${tbcdtbfilename}";append_bootargs_to_dtb "${tbcdtbfilename}";TBCDTB_TAG&#43;&#61;"-e s/TBCDTB-NAME/bootloader-dtb/ ";TBCDTB_TAG&#43;&#61;"-e s/TBCDTB-FILE/${tbcdtbfilename}/ ";if [ "${BINSARGS}" !&#61; "" ]; thenBINSARGS&#43;&#61;"bootloader_dtb ${tbcdtbfilename}; ";fi;
elseTBCDTB_TAG&#43;&#61;"-e s/TBCTYPE/data/ ";TBCDTB_TAG&#43;&#61;"-e /TBCDTB-FILE/d ";
fi;# EFI_TAG: Minimum FAT32 partition size is 64MiB (&#61;&#61; 1 FAT cluster)
#
localefifile&#61;efi.img;
efifs_size&#61;$(( 64 * 1024 * 1024 ));
EFI_TAG&#43;&#61;"-e s/size&#61;67108864\s\&#43;#EFISIZE/size&#61;${efifs_size}/ ";
EFI_TAG&#43;&#61;"-e s/EFISIZE/${efifs_size}/ ";
if [ "${bootloadername}" &#61; "uefi.bin" ]; thenbuild_fsimg $localefifile "" $efifs_size "FAT32" "";EFI_TAG&#43;&#61;"-e s/EXI/EFI/ ";EFI_TAG&#43;&#61;"-e s/#filename&#61;efi.img/filename&#61;${localefifile}/ ";EFI_TAG&#43;&#61;"-e s/EFIFILE/${localefifile}/ ";
elseEFI_TAG&#43;&#61;"-e /EFIFILE/d ";
fi;# GPT_TAG: tag should created before cfg and actual img should be
# created after cfg.
#
localpptfile&#61;ppt.img;
localsptfile&#61;gpt.img;
if [ ! -z "${bootpartsize}" -a ! -z "${emmcsize}" ]; thenbplmod&#61;$(( ${bootpartlim} % ${devsectsize} ));if [ ${bplmod} -ne 0 ]; thenecho "Error: Boot partition limit is not modulo ${devsectsize}";exit 1;fi;bpsmod&#61;$(( ${bootpartsize} % ${devsectsize} ));if [ ${bpsmod} -ne 0 ]; thenecho "Error: Boot partition size is not modulo ${devsectsize}";exit 1;fi;gptsize&#61;$(( ${bootpartlim} - ${bootpartsize} ));if [ ${gptsize} -lt ${devsectsize} ]; thenecho "Error: No space for primary GPT.";exit 1;fi;GPT_TAG&#43;&#61;"-e s/size&#61;2097152\s\&#43;#BCTSIZE/size&#61;${bootpartsize}/ ";GPT_TAG&#43;&#61;"-e s/size&#61;8388608\s\&#43;#PPTSIZE/size&#61;${gptsize}/ ";GPT_TAG&#43;&#61;"-e s/PPTSIZE/${gptsize}/ ";GPT_TAG&#43;&#61;"-e s/#filename&#61;ppt.img/filename&#61;${localpptfile}/ ";GPT_TAG&#43;&#61;"-e s/#filename&#61;spt.img/filename&#61;${localsptfile}/ ";
elseGPT_TAG&#43;&#61;"-e s/PPTSIZE/16896/ ";
fi;# CFG:
#
if [[ ${cfgfile} &#61;~ \.xml$ ]]; thenlocalcfgfile&#61;flash.xml;
elselocalcfgfile&#61;flash.cfg;
fi;
echo -n "copying cfgfile(${cfgfile}) to ${localcfgfile}... ";
if [ "${BINSARGS}" !&#61; "" ]; then# Close BINSARGS before get used for the first time.BINSARGS&#43;&#61;"\"";BINSCONV&#43;&#61;"-e s/\"[[:space:]]*/\"/ ";BINSCONV&#43;&#61;"-e s/\;[[:space:]]*\"/\"/ ";BINSARGS&#61;&#96;echo "${BINSARGS}" | sed ${BINSCONV}&#96;;
fi;
CFGCONV&#43;&#61;"${EBT_TAG} ";
CFGCONV&#43;&#61;"${LNX_TAG} ";
CFGCONV&#43;&#61;"${SOS_TAG} ";
CFGCONV&#43;&#61;"${NCT_TAG} ";
CFGCONV&#43;&#61;"${NVC_TAG} ";
CFGCONV&#43;&#61;"${MB2BL_TAG} ";
CFGCONV&#43;&#61;"${MPB_TAG} ";
CFGCONV&#43;&#61;"${MBP_TAG} ";
CFGCONV&#43;&#61;"${MB1_TAG} ";
CFGCONV&#43;&#61;"${BPF_TAG} ";
CFGCONV&#43;&#61;"${BPFDTB_TAG} ";
CFGCONV&#43;&#61;"${SCE_TAG} ";
CFGCONV&#43;&#61;"${SPE_TAG} ";
CFGCONV&#43;&#61;"${TOS_TAG} ";
CFGCONV&#43;&#61;"${EKS_TAG} ";
CFGCONV&#43;&#61;"${FB_TAG} ";
CFGCONV&#43;&#61;"${WB0_TAG} ";
CFGCONV&#43;&#61;"${APP_TAG} ";
CFGCONV&#43;&#61;"${EFI_TAG} ";
CFGCONV&#43;&#61;"${DTB_TAG} ";
CFGCONV&#43;&#61;"${TBC_TAG} ";
CFGCONV&#43;&#61;"${TBCDTB_TAG} ";
CFGCONV&#43;&#61;"${GPT_TAG} ";
cat ${cfgfile} | sed ${CFGCONV} > ${localcfgfile}; chkerr;# GPT:
# mkgpt need to update as per new flash_t186_l4t.xml,
# currently skipping mkgpt as gpt partition is taken care by tegraflash.
if [ ! -z "${bootpartsize}" -a ! -z "${emmcsize}" -a \"${tegraid}" !&#61; "0x18" ]; thenecho "creating gpt(${localpptfile})... ";MKGPTOPTS&#61;"-c ${localcfgfile} -P ${localpptfile} ";MKGPTOPTS&#43;&#61;"-t ${emmcsize} -b ${bootpartsize} -s 4KiB ";MKGPTOPTS&#43;&#61;"-a GPT -v GP1 ";MKGPTOPTS&#43;&#61;"-V ${MKGPTCMD} ";./mkgpt ${MKGPTOPTS};chkerr "creating gpt(${localpptfile}) failed.";
fi;# FLASH:
#
cp2local flasher "${BL_DIR}/${flashername}";
cp2local flashapp "${BL_DIR}/${flashappname}";if [ "${target_partname}" !&#61; "" ]; thenvalidatePartID target_partid target_partname $target_partname $localcfgfile;tmp_updateid&#61;"${target_partid}:${target_partname}";sigheader&#61;0;sigext&#61;bin;case ${target_partname} inBCT) target_partfile&#61;"${bctfilename}";FLASHARGS&#61;"${BCT} ${target_partfile} --updatebct SDRAM ";;;mb2) target_partfile&#61;"nvtboot.bin";need_sign&#61;1;sigheader&#61;1;;;bpmp-fw)target_partfile&#61;"${bpffile}";need_sign&#61;1;sigheader&#61;1;;;bpmp-fw-dtb)target_partfile&#61;"${bpfdtbfile}";need_sign&#61;1;sigheader&#61;1;sigext&#61;dtb;;;PPT) target_partfile&#61;"${localpptfile}"; ;;EBT) target_partfile&#61;"${bootloadername}"; need_sign&#61;1; ;;cpu-bootloader)target_partfile&#61;"${tbcfilename}";need_sign&#61;1;sigheader&#61;1;;;secure-os)target_partfile&#61;"${tosfilename}";need_sign&#61;1;sigheader&#61;1;sigext&#61;img;;;eks) target_partfile&#61;"${eksfilename}";need_sign&#61;1;sigheader&#61;1;sigext&#61;img;;;LNX) target_partfile&#61;"${localbootfile}";pre_cmds&#61;"write DTB ${dtbfilename}; ";;;kernel)target_partfile&#61;"${localbootfile}";pre_cmds&#61;"write kernel-dtb ${dtbfilename}; ";;;kernel-dtb) target_partfile&#61;"${dtbfilename}"; ;;NCT) target_partfile&#61;"${nctfilename}"; ;;SOS) target_partfile&#61;"${sosfilename}"; ;;NVC) target_partfile&#61;"${tegrabootname}"; need_sign&#61;1; ;;MPB) target_partfile&#61;"${mtsprebootname}"; ;;MBP) target_partfile&#61;"${mtsname}"; ;;BPF) target_partfile&#61;"${bpffilename}"; ;;APP) target_partfile&#61;"${localsysfile}"; ;;DTB) target_partfile&#61;"${dtbfilename}"; ;;EFI) target_partfile&#61;"${localefifile}"; ;;TOS) target_partfile&#61;"${tosfilename}"; ;;EKS) target_partfile&#61;"${eksfilename}"; ;;FB) target_partfile&#61;"${fbfilename}"; ;;WB0) target_partfile&#61;"${wb0bootname}"; ;;GPT) target_partfile&#61;"${localsptfile}"; ;;spe-fw)target_partfile&#61;"${spefilename}";need_sign&#61;1;sigheader&#61;1;;;*) echo "*** Update ${tmp_updateid} is not supported. ***";exit 1; ;;esac;if [ "${read_part_name}" !&#61; "" ]; thentarget_partfile&#61;"${read_part_name}";echo "*** Reading ${tmp_updateid} and storing to ${target_partfile} ***";elseecho "*** Updating ${tmp_updateid} with ${target_partfile} ***";fi;if [ "${FLASHARGS}" &#61; "" ]; thenFLASHARGS&#43;&#61;" --bl ${flashername} ${DTBARGS} ";FLASHARGS&#43;&#61;" --chip ${tegraid} --applet ${sosfilename} ";fi;if [ ${need_sign} -eq 1 ]; thenpf_dir&#61;"$(dirname "${target_partfile}")";pf_fn&#61;"$(basename "${target_partfile}")";if [ ${sigheader} -eq 1 ]; thensighdr&#61;"_sigheader.${sigext}.encrypt";target_partfile&#61;&#96;echo "${pf_fn}" | awk -F &#39;.&#39; &#39;{print $1}&#39;&#96;;target_partfile&#61;"${pf_dir}/signed/${target_partfile}${sighdr}";elsetarget_partfile&#61;"${pf_dir}/signed/${pf_fn}.encrypt";fi;FLASHARGS&#43;&#61;" --cfg ${localcfgfile} ";FLASHARGS&#43;&#61;" ${BCT} ${bctfilename} ";pre_cmds&#43;&#61;"sign; ";fiFLASHARGS&#43;&#61;"$BCT ${bctfilename} ";FLASHARGS&#43;&#61;"${BCTARGS} ";FLASHARGS&#43;&#61;"--cfg ${localcfgfile} ${BINSARGS} ";FLASHARGS&#43;&#61;" --cmd \"";FLASHARGS&#43;&#61;"${pre_cmds}";if [ "${read_part_name}" !&#61; "" ]; thenFLASHARGS&#43;&#61;"read ${target_partname} ${target_partfile};\"";elseFLASHARGS&#43;&#61;"write ${target_partname} ${target_partfile};\"";fiecho "./${flashappname} ${FLASHARGS}";cmd&#61;"./${flashappname} ${FLASHARGS}";eval ${cmd};chkerr "Failed to flash/read ${target_board}.";if [ "${read_part_name}" !&#61; "" ]; thenecho "*** The ${tmp_updateid} has been read successfully. ***";if [ "${target_partname}" &#61; "APP" -a -x mksparse ]; thenecho -e "\tConverting RAW image to Sparse image... ";mv -f ${target_partfile} ${target_partfile}.raw;./mksparse -v --fillpattern&#61;0 ${target_partfile}.raw ${target_partfile};fi;elseecho "*** The ${tmp_updateid} has been updated successfully. ***";fi;exit 0;
fi;if [ -f odmsign.func ]; thensource odmsign.func;odmsign;if [ $? -ne 0 ]; thenexit 1;fi;
fi;FLASHARGS&#43;&#61;"--bl ${flashername} ${BCT} ${bctfilename} ";
FLASHARGS&#43;&#61;"--odmdata ${odmdata} ";
FLASHARGS&#43;&#61;"${DTBARGS}${MTSARGS}${SOSARGS}${NCTARGS}${FBARGS} ";
if [ "${flashappname}" &#61; "tegraflash.py" ]; thenFLASHARGS&#43;&#61;"--cfg ${localcfgfile} ";FLASHARGS&#43;&#61;"--chip ${tegraid} ";FLASHARGS&#43;&#61;"${BCTARGS} ";FLASHARGS&#43;&#61;"${BINSARGS} ";FLASHARGS&#43;&#61;"${SKIPUID} ";
elseFLASHARGS&#43;&#61;"--configfile ${localcfgfile} ";FLASHARGS&#43;&#61;"--setbct --create --wait -s 0 --go ";
fi;
flashcmd&#61;"./${flashappname} ${FLASHARGS}";
echo "${flashcmd}";
flashcmdfile&#61;"${BL_DIR}/flashcmd.txt";
echo "saving flash command in ${flashcmdfile}";
echo "${flashcmd}" | tee "${flashcmdfile}";if [ ${no_flash} -ne 0 ]; thenecho "*** no-flash flag enabled. Exiting now... *** ";exit 0;
fi;echo "*** Flashing target device started. ***"
eval "${flashcmd}";
chkerr "Failed flashing ${target_board}.";
echo "*** The target ${target_board} has been flashed successfully. ***"
if [ "${rootdev_type}" &#61; "internal" ]; thenecho "Reset the board to boot from internal eMMC.";
elif [ "${rootdev_type}" &#61; "network" ]; thenif [ "${nfsroot}" !&#61; "" ]; thenecho -n "Make target nfsroot(${nfsroot}) exported ";echo "on the network and reset the board to boot";elseecho -n "Make the target nfsroot exported on the ";echo -n "network, configure your own DHCP server ";echo -n "with \"option-root&#61;;\" ";echo "properly and reset the board to boot";fi;
elseecho -n "Make the target filesystem available to the device ";echo -n "and reset the board to boot from external ";echo "${target_rootdev}.";
fi;
echo;
exit 0;# vi: ts&#61;8 sw&#61;8 noexpandtab

  • 大概要花30分钟左右完成镜像下载。
  • 备份在~/TX2/64_TX2/Linux_for_Tegra_64_tx2/目录下
  • 分配权限&#xff0c;并压缩保存&#xff1a;

$ sudo chmod 744 my_backup.img
$ tar -zcvf my_backup.img.zip my_backup.img

  • 备份后也可以挂载到ubuntu下进行相应编辑

mkdir testimg
sudo mount -o loop my_backup.img testimg

(2) 恢复:

  • 进入HOST PC的JetPack安装目录下bootloader目录

$ cd ~/TX2/64_TX2/Linux_for_Tegra_64_tx2/bootloader

  • 复制my_backup.img为system.img

$ sudo cp my_backup.img system.img

  • 连上TX2&#xff0c;并进入recovery模式(通电&#xff0c;按住recovery键3秒&#xff0c;再按一下reset键)
  • 检查是否出现0955:7140 Nvidia Corp

$ lsusb

  • 退出到上一层目录&#xff0c;使用flash.sh开始烧录

$ cd ../
# As an example, you should be in ~/TX2/64_TX2/Linux_for_Tegra_64_tx2/
$ sudo ./flash.sh -r jetson-tx2 mmcblk0p1

  • 如果想恢复到SD卡或U盘&#xff0c;[参考编译文章][1]
  • 大概要花费15分钟时间完成恢复镜像。

参考&#xff1a;

  • https://devtalk.nvidia.com/default/topic/1000105/jetson-tx2/tx2-cloning/post/5111893/#5111893
  • http://elinux.org/Jetson/TX2_Cloning

推荐阅读
  • 在Kubernetes上部署JupyterHub的步骤和实验依赖
    本文介绍了在Kubernetes上部署JupyterHub的步骤和实验所需的依赖,包括安装Docker和K8s,使用kubeadm进行安装,以及更新下载的镜像等。 ... [详细]
  • 学习SLAM的女生,很酷
    本文介绍了学习SLAM的女生的故事,她们选择SLAM作为研究方向,面临各种学习挑战,但坚持不懈,最终获得成功。文章鼓励未来想走科研道路的女生勇敢追求自己的梦想,同时提到了一位正在英国攻读硕士学位的女生与SLAM结缘的经历。 ... [详细]
  • CSS3选择器的使用方法详解,提高Web开发效率和精准度
    本文详细介绍了CSS3新增的选择器方法,包括属性选择器的使用。通过CSS3选择器,可以提高Web开发的效率和精准度,使得查找元素更加方便和快捷。同时,本文还对属性选择器的各种用法进行了详细解释,并给出了相应的代码示例。通过学习本文,读者可以更好地掌握CSS3选择器的使用方法,提升自己的Web开发能力。 ... [详细]
  • 本文介绍了Oracle数据库中tnsnames.ora文件的作用和配置方法。tnsnames.ora文件在数据库启动过程中会被读取,用于解析LOCAL_LISTENER,并且与侦听无关。文章还提供了配置LOCAL_LISTENER和1522端口的示例,并展示了listener.ora文件的内容。 ... [详细]
  • sklearn数据集库中的常用数据集类型介绍
    本文介绍了sklearn数据集库中常用的数据集类型,包括玩具数据集和样本生成器。其中详细介绍了波士顿房价数据集,包含了波士顿506处房屋的13种不同特征以及房屋价格,适用于回归任务。 ... [详细]
  • 本文介绍了Windows操作系统的版本及其特点,包括Windows 7系统的6个版本:Starter、Home Basic、Home Premium、Professional、Enterprise、Ultimate。Windows操作系统是微软公司研发的一套操作系统,具有人机操作性优异、支持的应用软件较多、对硬件支持良好等优点。Windows 7 Starter是功能最少的版本,缺乏Aero特效功能,没有64位支持,最初设计不能同时运行三个以上应用程序。 ... [详细]
  • 本文介绍了Shell中for命令的基本格式和用法,通过提供一个值列表来迭代执行一系列命令。同时还介绍了如何读取列表中的值,并给出了for命令与其他命令的结合使用示例。 ... [详细]
  • 【shell】网络处理:判断IP是否在网段、两个ip是否同网段、IP地址范围、网段包含关系
    本文介绍了使用shell脚本判断IP是否在同一网段、判断IP地址是否在某个范围内、计算IP地址范围、判断网段之间的包含关系的方法和原理。通过对IP和掩码进行与计算,可以判断两个IP是否在同一网段。同时,还提供了一段用于验证IP地址的正则表达式和判断特殊IP地址的方法。 ... [详细]
  • 树莓派语音控制的配置方法和步骤
    本文介绍了在树莓派上实现语音控制的配置方法和步骤。首先感谢博主Eoman的帮助,文章参考了他的内容。树莓派的配置需要通过sudo raspi-config进行,然后使用Eoman的控制方法,即安装wiringPi库并编写控制引脚的脚本。具体的安装步骤和脚本编写方法在文章中详细介绍。 ... [详细]
  • Android日历提醒软件开源项目分享及使用教程
    本文介绍了一款名为Android日历提醒软件的开源项目,作者分享了该项目的代码和使用教程,并提供了GitHub项目地址。文章详细介绍了该软件的主界面风格、日程信息的分类查看功能,以及添加日程提醒和查看详情的界面。同时,作者还提醒了读者在使用过程中可能遇到的Android6.0权限问题,并提供了解决方法。 ... [详细]
  • express工程中的json调用方法
    本文介绍了在express工程中如何调用json数据,包括建立app.js文件、创建数据接口以及获取全部数据和typeid为1的数据的方法。 ... [详细]
  • 微软评估和规划(MAP)的工具包介绍及应用实验手册
    本文介绍了微软评估和规划(MAP)的工具包,该工具包是一个无代理工具,旨在简化和精简通过网络范围内的自动发现和评估IT基础设施在多个方案规划进程。工具包支持库存和使用用于SQL Server和Windows Server迁移评估,以及评估服务器的信息最广泛使用微软的技术。此外,工具包还提供了服务器虚拟化方案,以帮助识别未被充分利用的资源和硬件需要成功巩固服务器使用微软的Hyper - V技术规格。 ... [详细]
  • node.jsrequire和ES6导入导出的区别原 ... [详细]
  • Spring框架《一》简介
    Spring框架《一》1.Spring概述1.1简介1.2Spring模板二、IOC容器和Bean1.IOC和DI简介2.三种通过类型获取bean3.给bean的属性赋值3.1依赖 ... [详细]
  • 本文详细介绍了在Linux虚拟化部署中进行VLAN配置的方法。首先要确认Linux系统内核是否已经支持VLAN功能,然后配置物理网卡、子网卡和虚拟VLAN网卡的关系。接着介绍了在Linux配置VLAN Trunk的步骤,包括将物理网卡添加到VLAN、检查添加的VLAN虚拟网卡信息以及重启网络服务等。最后,通过验证连通性来确认配置是否成功。 ... [详细]
author-avatar
hyl7758521_948
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有