blob: 0a496ec6b2d19ca9c58663784e5fbdd9ad26844c [file] [log] [blame]
Adriana Kobylake8606da2020-07-15 09:16:56 -05001#!/bin/sh
2
3mmc_init() {
4 base_dir="/media/hostfw"
5 running_dir="${base_dir}/running"
6 prsv_dir="${base_dir}/prsv"
7
8 if [ ! -d "${running_dir}" ]; then
9 mkdir -p ${running_dir}
10 fi
11 if [ ! -d "${prsv_dir}" ]; then
12 mkdir -p "${prsv_dir}"
13 fi
14
15 # Determine if the running dir contains the running version
16 boot_label="$(fw_printenv -n bootside)"
17 running_label=""
18 running_label_file="${running_dir}/partlabel"
19 if [ -f "${running_label_file}" ]; then
20 running_label=$(cat ${running_label_file})
21 fi
22 if [ "${running_label}" != "${boot_label}" ]; then
23 # Copy off the preserved partitions
24 # A line in the pnor.toc looks like this:
25 # partition05=SECBOOT,0x00381000,0x003a5000,00,ECC,PRESERVED
26 rm -f ${prsv_dir}/*
27 if [ -f ${running_dir}/pnor.toc ]; then
28 prsvs=$(grep PRESERVED ${running_dir}/pnor.toc)
29 for prsv in ${prsvs}; do
30 prsv=${prsv##partition*=}
31 prsv=$(echo ${prsv} | cut -d "," -f 1)
32 cp -p ${running_dir}/${prsv} ${prsv_dir}
33 done
34 fi
35
36 # Copy contents of running image to running dir
37 tmp_dir="/tmp/hostfw"
38 mkdir -p "${tmp_dir}"
39 mount ${base_dir}/hostfw-${boot_label} ${tmp_dir} -o ro
40 rm -f ${running_dir}/*
41 cp -p ${tmp_dir}/* ${running_dir}/
42 umount ${tmp_dir}
43 rm -rf ${tmp_dir}
44
45 # Restore the preserved partitions
46 cp -p ${prsv_dir}/* ${running_dir}/ || true
47 rm -f ${prsv_dir}/*
48
49 # Save the label
50 echo "${boot_label}" > "${running_label_file}"
51
52 # Remove patches
53 rm -f ${base_dir}/patch/*
54 fi
55
56 # Mount alternate dir
57 if [ "${boot_label}" = "a" ]; then
58 alternate_label="b"
59 else
60 alternate_label="a"
61 fi
62 alternate_dir="${base_dir}/alternate"
63 if [ ! -d "${alternate_dir}" ]; then
64 mkdir -p ${alternate_dir}
65 fi
66 mount ${base_dir}/hostfw-${alternate_label} ${alternate_dir} -o ro
67}
68
69mmc_patch() {
70 # Patching is disabled if field mode is set
71 if [[ "$(fw_printenv fieldmode 2>/dev/null)" == "fieldmode=true" ]]; then
72 return 0
73 fi
74
75 target="/media/hostfw/patch"
76 if [ ! -d "${target}" ]; then
77 mkdir -p "${target}"
78 fi
79
80 patchdir="/usr/local/share"
81 if [ ! -d "${patchdir}" ]; then
82 mkdir -p "${patchdir}"
83 fi
84
85 ln -s "${target}" "${patchdir}/hostfw"
86 ln -s "${target}" "${patchdir}/pnor"
87}
88
89case "$1" in
90 mmc-init)
91 mmc_init
92 ;;
93 mmc-patch)
94 mmc_patch
95 ;;
96 *)
97 echo "Invalid argument"
98 exit 1
99 ;;
100esac