On 2016-10-24 09:51, André Valentin wrote: > Hi! > > Am 23.10.2016 um 16:44 schrieb Felix Fietkau: >> 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. > > I'll remove it. >> >>> + *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. > > I think we need to store the blocksize in the sysupgrade/control. Because it > could > change between 2 firmwares. What dou you think. In this case an fstools patch > is > not needed. You're right. I don't think we have a good place to store it though. I still would prefer to unify the code in fstools anyway instead of open-coding the same in the shell script.
- Felix _______________________________________________ Lede-dev mailing list Lede-dev@lists.infradead.org http://lists.infradead.org/mailman/listinfo/lede-dev