| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667 |
- # The U-Boot loader with the datachk patchset for dualbooting requires image
- # sizes and checksums to be provided in the U-Boot environment.
- # The devices come with 2 main partitions - while one is active
- # sysupgrade will flash the other. The boot order is changed to boot the
- # newly flashed partition. If the new partition can't be booted due to
- # upgrade failures the previously used partition is loaded.
- platform_do_upgrade_dualboot_datachk() {
- local next_boot_part=1
- local tar_file="$1"
- local bootseq
- local setenv_script="/tmp/fw_env_upgrade"
- if [ "$(grep 'ubi.mtd=firmware1' /proc/cmdline)" ]; then
- next_boot_part=2
- bootseq="2,1"
- else
- next_boot_part=1
- bootseq="1,2"
- fi
- local board_dir="$(tar tf "${tar_file}" | grep -m 1 '^sysupgrade-.*/$')"
- board_dir="${board_dir%/}"
- local kernel_length="$(tar xf "${tar_file}" "${board_dir}/kernel" -O | wc -c)"
- local rootfs_length="$(tar xf "${tar_file}" "${board_dir}/root" -O | wc -c)"
- local kernel_md5="$(tar xf "${tar_file}" "${board_dir}/kernel" -O | md5sum)"
- kernel_md5="${kernel_md5%% *}"
- local rootfs_md5="$(tar xf "${tar_file}" "${board_dir}/root" -O | md5sum)"
- rootfs_md5="${rootfs_md5%% *}"
- CI_UBIPART="firmware${next_boot_part}"
- CI_KERNPART="kernel"
- CI_ROOTPART="rootfs"
- nand_upgrade_prepare_ubi "${rootfs_length}" "squashfs" "$kernel_length" "0"
- local ubidev="$(nand_find_ubi "${CI_UBIPART}")"
- local kern_ubivol="$(nand_find_volume "${ubidev}" "${CI_KERNPART}")"
- tar xf "${tar_file}" "${board_dir}/kernel" -O | \
- ubiupdatevol "/dev/${kern_ubivol}" -s "${kernel_length}" -
- local root_ubivol="$(nand_find_volume "${ubidev}" "${CI_ROOTPART}")"
- tar xf "${tar_file}" "${board_dir}/root" -O | \
- ubiupdatevol "/dev/${root_ubivol}" -s "${rootfs_length}" -
- [ -f "${UPGRADE_BACKUP}" ] && nand_restore_config "${UPGRADE_BACKUP}"
- # write new new uboot-env
- printf "bootseq ${bootseq}\n" > "${setenv_script}"
- printf "kernel_%i_size 0x%08x\n" "${next_boot_part}" "${kernel_length}" >> "${setenv_script}"
- printf "kernel_%i_checksum %s\n" "${next_boot_part}" "${kernel_md5}" >> "${setenv_script}"
- printf "rootfs_%i_size 0x%08x\n" "${next_boot_part}" "${rootfs_length}" >> "${setenv_script}"
- printf "rootfs_%i_checksum %s\n" "${next_boot_part}" "${rootfs_md5}" >> "${setenv_script}"
- mkdir -p /var/lock
- fw_setenv -s "${setenv_script}" || {
- echo "failed to update U-Boot environment"
- return 1
- }
- }
|