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