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 <avalen...@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

_______________________________________________
Lede-dev mailing list
Lede-dev@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/lede-dev

Reply via email to