[LEDE-DEV] [PATCH v3 3/5] ipq806x/nbg6817: add sysupgrade support
Felix Fietkau
nbd at nbd.name
Sun Oct 23 07:44:49 PDT 2016
On 2016-10-23 16:25, André Valentin wrote:
> Add new way of flashing to mmc devices based on rootfs split with loop devices.
>
> Signed-off-by: André Valentin <avalentin at marcant.net>
> ---
> .../ipq806x/base-files/lib/upgrade/platform.sh | 12 +++
> .../linux/ipq806x/base-files/lib/upgrade/zyxel.sh | 94 ++++++++++++++++++++++
> 2 files changed, 106 insertions(+)
> create mode 100644 target/linux/ipq806x/base-files/lib/upgrade/zyxel.sh
>
> diff --git a/target/linux/ipq806x/base-files/lib/upgrade/zyxel.sh b/target/linux/ipq806x/base-files/lib/upgrade/zyxel.sh
> new file mode 100644
> index 0000000..d228dab
> --- /dev/null
> +++ b/target/linux/ipq806x/base-files/lib/upgrade/zyxel.sh
> @@ -0,0 +1,94 @@
> +#
> +# Copyright (C) 2016 lede-project.org
> +#
> +
> +zyxel_get_rootfs() {
> + local rootfsdev
> +
> + if read cmdline < /proc/cmdline; then
> + case "$cmdline" in
> + *block2mtd=*)
> + rootfsdev="${cmdline##*block2mtd=}"
> + rootfsdev="${rootfsdev%%,*}"
> + ;;
You can drop the block2mtd part here.
> + *root=*)
> + rootfsdev="${cmdline##*root=}"
> + rootfsdev="${rootfsdev%% *}"
> + ;;
> + esac
> +
> + echo "${rootfsdev}"
> + fi
> +}
> +
> +zyxel_do_flash() {
> + local tar_file=$1
> + local board=$2
> + local kernel=$3
> + local rootfs=$4
> + local blocksize=65536
> +
> + # keep sure its unbound
> + losetup --detach-all || {
> + echo Failed to detach all loop devices. Skip this try.
> + reboot -f
> + }
> +
> + echo "flashing kernel to /dev/${kernel}"
> + tar xf $tar_file sysupgrade-$board/kernel -O >/dev/$kernel
> +
> + echo "flashing rootfs to ${rootfs}"
> + tar xf $tar_file sysupgrade-$board/root -O >"${rootfs}"
> +
> + local offset=$(tar xf $tar_file sysupgrade-$board/root -O | wc -c)
> + offset=$(( (($offset + $blocksize - 1) / $blocksize) * $blocksize ))
> +
> + # Sanity
> + [ $offset -lt $blocksize ] && {
> + echo Wrong size for rootfs: $offset
> + sleep 10
> + reboot -f
> + }
> +
> + # Mount loop for rootfs_data
> + losetup -o $offset /dev/loop0 "${rootfs}" || {
> + echo "Failed to mount looped rootfs_data."
> + sleep 10
> + reboot -f
> + }
> +
> + echo "Format new rootfs_data at position ${offset}."
> + mkfs.ext4 -F -L rootfs_data /dev/loop0
> + mkdir /tmp/new_root
> + mount -t ext4 /dev/loop0 /tmp/new_root && {
> + echo "Saving config to rootfs_data at position ${offset}."
> + cp -v /tmp/sysupgrade.tgz /tmp/new_root/
> + umount /tmp/new_root
> + }
> +
> + # Cleanup
> + losetup -d /dev/loop0 >/dev/null 2>&1
I think trying to guesstimate the offset for the ext4 part here, when
fstools already handles some of that is a bit fragile. Things like the
block size might be changed at some point, so I think it would be a good
idea to extend fstools to be able deal with this stuff.
- Felix
More information about the Lede-dev
mailing list