diff options
author | Piotr Dymacz <pepe2k@gmail.com> | 2019-10-29 23:25:56 +0100 |
---|---|---|
committer | Piotr Dymacz <pepe2k@gmail.com> | 2019-11-13 21:45:31 +0100 |
commit | bc173ddd8381b03dde8cc2e6c66d0cd392c62bbd (patch) | |
tree | 97d4cf58f923ed1d08482537227fd61f16a311e8 /target/linux | |
parent | b20b997c680e38f999e4608b158ef08718527ca0 (diff) | |
download | upstream-bc173ddd8381b03dde8cc2e6c66d0cd392c62bbd.tar.gz upstream-bc173ddd8381b03dde8cc2e6c66d0cd392c62bbd.tar.bz2 upstream-bc173ddd8381b03dde8cc2e6c66d0cd392c62bbd.zip |
ramips: support dual image feature on ALFA Network boards
New U-Boot version for MediaTek MT76x8/MT762x based ALFA Network boards
includes support for a 'dual image' feature. Users can enable it using
U-Boot environment variable 'dual_image' ('1' -> enabled).
When 'dual image' feature is enabled, U-Boot will modify DTB and divide
the original 'firmware' flash area into two, equal in size and aligned
to 64 KB partitions: 'firmware' and 'backup'. U-Boot will also adjust
size of 'firmware' area to match installed flash chip size.
U-Boot will load kernel from active partition which is marked with env
variable 'bootactive' ('1' -> first partition, '2' -> second partition)
and rename both partitions accordingly ('firmware' <-> 'backup').
There are 3 additional env variables used to control 'dual image' mode:
- bootlimit - maximum number of unsuccessful boot tries (default: '3')
- bootcount - current number of boot tries
- bootchanged - flag which informs that active partition was changed; if
it is set and 'bootcount' reaches 'bootlimit' value,
U-Boot will start web-based recovery which then updates
both partitions with provided image
Signed-off-by: Piotr Dymacz <pepe2k@gmail.com>
Diffstat (limited to 'target/linux')
4 files changed, 48 insertions, 0 deletions
diff --git a/target/linux/ramips/mt7620/base-files/etc/init.d/bootcount b/target/linux/ramips/mt7620/base-files/etc/init.d/bootcount new file mode 100755 index 0000000000..c7b6919926 --- /dev/null +++ b/target/linux/ramips/mt7620/base-files/etc/init.d/bootcount @@ -0,0 +1,13 @@ +#!/bin/sh /etc/rc.common + +START=99 + +boot() { + case $(board_name) in + alfa-network,ac1200rm|\ + alfa-network,tube-e4g) + [ -n "$(fw_printenv bootcount bootchanged 2>/dev/null)" ] &&\ + echo -e "bootcount\nbootchanged\n" | /usr/sbin/fw_setenv -s - + ;; + esac +} diff --git a/target/linux/ramips/mt7620/base-files/lib/upgrade/platform.sh b/target/linux/ramips/mt7620/base-files/lib/upgrade/platform.sh index 786d57fc70..aad243c1f9 100755 --- a/target/linux/ramips/mt7620/base-files/lib/upgrade/platform.sh +++ b/target/linux/ramips/mt7620/base-files/lib/upgrade/platform.sh @@ -5,6 +5,9 @@ PART_NAME=firmware REQUIRE_IMAGE_METADATA=1 +RAMFS_COPY_BIN='fw_printenv fw_setenv' +RAMFS_COPY_DATA='/etc/fw_env.config /var/lock/fw_printenv.lock' + platform_check_image() { return 0 } @@ -13,6 +16,19 @@ platform_do_upgrade() { local board=$(board_name) case "$board" in + alfa-network,ac1200rm|\ + alfa-network,tube-e4g) + [ "$(fw_printenv -n dual_image 2>/dev/null)" = "1" ] &&\ + [ -n "$(find_mtd_part backup)" ] && { + PART_NAME=backup + if [ "$(fw_printenv -n bootactive 2>/dev/null)" = "1" ]; then + fw_setenv bootactive 2 || exit 1 + else + fw_setenv bootactive 1 || exit 1 + fi + } + default_do_upgrade "$1" + ;; *) default_do_upgrade "$1" ;; diff --git a/target/linux/ramips/mt76x8/base-files/etc/init.d/bootcount b/target/linux/ramips/mt76x8/base-files/etc/init.d/bootcount index 0d64deb9e0..3c21433cc5 100755 --- a/target/linux/ramips/mt76x8/base-files/etc/init.d/bootcount +++ b/target/linux/ramips/mt76x8/base-files/etc/init.d/bootcount @@ -4,6 +4,10 @@ START=99 boot() { case $(board_name) in + alfa-network,awusfree1) + [ -n "$(fw_printenv bootcount bootchanged 2>/dev/null)" ] &&\ + echo -e "bootcount\nbootchanged\n" | /usr/sbin/fw_setenv -s - + ;; xiaomi,miwifi-nano) fw_setenv flag_boot_success 1 ;; diff --git a/target/linux/ramips/mt76x8/base-files/lib/upgrade/platform.sh b/target/linux/ramips/mt76x8/base-files/lib/upgrade/platform.sh index 606a9f2bf6..a3de97abf7 100755 --- a/target/linux/ramips/mt76x8/base-files/lib/upgrade/platform.sh +++ b/target/linux/ramips/mt76x8/base-files/lib/upgrade/platform.sh @@ -5,6 +5,9 @@ PART_NAME=firmware REQUIRE_IMAGE_METADATA=1 +RAMFS_COPY_BIN='fw_printenv fw_setenv' +RAMFS_COPY_DATA='/etc/fw_env.config /var/lock/fw_printenv.lock' + platform_check_image() { return 0 } @@ -13,6 +16,18 @@ platform_do_upgrade() { local board=$(board_name) case "$board" in + alfa-network,awusfree1) + [ "$(fw_printenv -n dual_image 2>/dev/null)" = "1" ] &&\ + [ -n "$(find_mtd_part backup)" ] && { + PART_NAME=backup + if [ "$(fw_printenv -n bootactive 2>/dev/null)" = "1" ]; then + fw_setenv bootactive 2 || exit 1 + else + fw_setenv bootactive 1 || exit 1 + fi + } + default_do_upgrade "$1" + ;; tplink,archer-c50-v4) MTD_ARGS="-t romfile" default_do_upgrade "$1" |