123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687 |
- #
- # Copyright (C) 2016 lede-project.org
- #
- zyxel_get_rootfs() {
- local rootfsdev
- if read cmdline < /proc/cmdline; then
- case "$cmdline" in
- *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
- # 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}"
- # a padded rootfs is needed for overlay fs creation
- local offset=$(tar xf $tar_file sysupgrade-$board/root -O | wc -c)
- [ $offset -lt 65536 ] && {
- 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
- sync
- umount -a
- reboot -f
- }
- zyxel_do_upgrade() {
- local tar_file="$1"
- local board=$(cat /tmp/sysinfo/board_name)
- local rootfs="$(zyxel_get_rootfs)"
- local kernel=
- [ -b "${rootfs}" ] || return 1
- case "$board" in
- nbg6817)
- kernel=mmcblk0p4
- ;;
- *)
- return 1
- esac
- zyxel_do_flash $tar_file $board $kernel $rootfs
- return 0
- }
|