Merge pull request #6709 from Moondarker/mr90x-advanced-reboot

luci-app-advanced-reboot: add support for Mercusys MR90X v1
This commit is contained in:
Stan Grishin 2023-11-20 13:57:54 -07:00 committed by GitHub
commit 191cd74cc5
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
2 changed files with 36 additions and 13 deletions

View file

@ -23,7 +23,7 @@ is_alt_mountable() {
} }
alt_partition_mount() { alt_partition_mount() {
local ubi_dev op_ubi="$1" local ubi_dev op_ubi="$1" ubi_vol="${2:-0}"
mkdir -p /var/alt_rom mkdir -p /var/alt_rom
ubi_dev="$(ubiattach -m "$op_ubi")" ubi_dev="$(ubiattach -m "$op_ubi")"
ubi_dev="$(echo "$ubi_dev" | sed -n "s/^UBI device number\s*\(\d*\),.*$/\1/p")" ubi_dev="$(echo "$ubi_dev" | sed -n "s/^UBI device number\s*\(\d*\),.*$/\1/p")"
@ -31,12 +31,12 @@ alt_partition_mount() {
ubidetach -m "$op_ubi" ubidetach -m "$op_ubi"
return 1 return 1
fi fi
ubiblock --create "/dev/ubi${ubi_dev}_0" && \ ubiblock --create "/dev/ubi${ubi_dev}_${ubi_vol}" && \
mount -t squashfs -r "/dev/ubiblock${ubi_dev}_0" /var/alt_rom mount -t squashfs -r "/dev/ubiblock${ubi_dev}_${ubi_vol}" /var/alt_rom
} }
alt_partition_unmount() { alt_partition_unmount() {
local mtdCount i=0 op_ubi="$1" local mtdCount i=0 op_ubi="$1" ubi_vol="${2:-0}"
mtdCount="$(ubinfo | grep 'Present UBI devices' | tr ',' '\n' | grep -c 'ubi')" mtdCount="$(ubinfo | grep 'Present UBI devices' | tr ',' '\n' | grep -c 'ubi')"
[ -z "$mtdCount" ] && mtdCount=10 [ -z "$mtdCount" ] && mtdCount=10
[ -d /var/alt_rom ] && umount /var/alt_rom [ -d /var/alt_rom ] && umount /var/alt_rom
@ -46,7 +46,7 @@ alt_partition_unmount() {
fi fi
ubi_mtd="$(cat /sys/devices/virtual/ubi/ubi${i}/mtd_num)" ubi_mtd="$(cat /sys/devices/virtual/ubi/ubi${i}/mtd_num)"
if [ -n "$ubi_mtd" ] && [ "$ubi_mtd" = "$op_ubi" ]; then if [ -n "$ubi_mtd" ] && [ "$ubi_mtd" = "$op_ubi" ]; then
ubiblock --remove /dev/ubi${i}_0 ubiblock --remove /dev/ubi${i}_${ubi_vol}
ubidetach -m "$op_ubi" ubidetach -m "$op_ubi"
rm -rf /var/alt_rom rm -rf /var/alt_rom
fi fi
@ -66,18 +66,21 @@ get_main_partition_os_info(){
} }
get_alt_partition_os_info(){ get_alt_partition_os_info(){
local op_info op_ubi="$1" local op_info op_ubi="$1" vendor_name="$2" ubi_vol="$3"
logger "attempting to mount alternative partition (mtd${op_ubi})" logger "attempting to mount alternative partition (mtd${op_ubi})"
alt_partition_unmount "$op_ubi" alt_partition_unmount "$op_ubi" "$ubi_vol"
alt_partition_mount "$op_ubi" alt_partition_mount "$op_ubi" "$ubi_vol"
if [ -s "/var/alt_rom/etc/os-release" ]; then if [ -s "/var/alt_rom/etc/os-release" ]; then
op_info="$(. /var/alt_rom/etc/os-release && echo "$PRETTY_NAME")" op_info="$(. /var/alt_rom/etc/os-release && echo "$PRETTY_NAME")"
if [ "${op_info//SNAPSHOT}" != "$op_info" ]; then if [ "${op_info//SNAPSHOT}" != "$op_info" ]; then
op_info="$(. /var/alt_rom/etc/os-release && echo "${OPENWRT_RELEASE%%-*}")" op_info="$(. /var/alt_rom/etc/os-release && echo "${OPENWRT_RELEASE%%-*}")"
fi fi
fi fi
if [ -s "/var/alt_rom/etc/partition_config/soft-version" ]; then
op_info="${vendor_name:+$vendor_name }$(awk -F: '$1=="soft_ver" { print $2 ;}' /var/alt_rom/etc/partition_config/soft-version)"
fi
logger "attempting to unmount alternative partition (mtd${op_ubi})" logger "attempting to unmount alternative partition (mtd${op_ubi})"
alt_partition_unmount "$op_ubi" alt_partition_unmount "$op_ubi" "$ubi_vol"
echo "$op_info" echo "$op_info"
} }
@ -102,6 +105,7 @@ print_json() { json_init; json_add_string "$1" "$2"; json_dump; json_cleanup; }
obtain_device_info(){ obtain_device_info(){
local romBoardName p zyxelFlagPartition i local romBoardName p zyxelFlagPartition i
local vendorName deviceName partition1MTD partition2MTD labelOffset local vendorName deviceName partition1MTD partition2MTD labelOffset
local opOffset ubiVolume
local bootEnv1 bootEnv1Partition1Value bootEnv1Partition2Value local bootEnv1 bootEnv1Partition1Value bootEnv1Partition2Value
local bootEnv2 bootEnv2Partition1Value bootEnv2Partition2Value local bootEnv2 bootEnv2Partition1Value bootEnv2Partition2Value
local p1_label p1_version p2_label p2_version p1_os p2_os local p1_label p1_version p2_label p2_version p1_os p2_os
@ -122,7 +126,8 @@ obtain_device_info(){
json_load_file "$p" json_load_file "$p"
for i in vendorName deviceName partition1MTD partition2MTD labelOffset \ for i in vendorName deviceName partition1MTD partition2MTD labelOffset \
bootEnv1 bootEnv1Partition1Value bootEnv1Partition2Value \ bootEnv1 bootEnv1Partition1Value bootEnv1Partition2Value \
bootEnv2 bootEnv2Partition1Value bootEnv2Partition2Value; do bootEnv2 bootEnv2Partition1Value bootEnv2Partition2Value \
opOffset ubiVolume; do
json_get_var $i "$i" json_get_var $i "$i"
done done
json_cleanup json_cleanup
@ -185,13 +190,15 @@ obtain_device_info(){
fi fi
if is_alt_mountable "$partition1MTD" "$partition2MTD"; then if is_alt_mountable "$partition1MTD" "$partition2MTD"; then
opOffset="${opOffset:-1}"
ubiVolume="${ubiVolume:-0}"
if [ "$current_partition" = "$bootEnv1Partition1Value" ]; then if [ "$current_partition" = "$bootEnv1Partition1Value" ]; then
op_ubi=$(( ${partition2MTD:3:3} + 1 )) op_ubi=$(( ${partition2MTD:3:3} + $opOffset ))
else else
op_ubi=$(( ${partition1MTD:3:3} + 1 )) op_ubi=$(( ${partition1MTD:3:3} + $opOffset ))
fi fi
cp_info="$(get_main_partition_os_info $op_ubi)" cp_info="$(get_main_partition_os_info $op_ubi)"
op_info="$(get_alt_partition_os_info $op_ubi)" op_info="$(get_alt_partition_os_info $op_ubi $vendorName $ubiVolume)"
if [ "$current_partition" = "$bootEnv1Partition1Value" ]; then if [ "$current_partition" = "$bootEnv1Partition1Value" ]; then
p1_os="${cp_info:-$p1_os}" p1_os="${cp_info:-$p1_os}"
p2_os="${op_info:-$p2_os}" p2_os="${op_info:-$p2_os}"

View file

@ -0,0 +1,16 @@
{
"vendorName": "MERCUSYS",
"deviceName": "MR90X v1",
"boardNames": [ "mercusys,mr90x-v1" ],
"partition1MTD": "mtd2",
"partition2MTD": "mtd3",
"opOffset": 0,
"ubiVolume": 2,
"labelOffset": null,
"bootEnv1": "tp_boot_idx",
"bootEnv1Partition1Value": 0,
"bootEnv1Partition2Value": 1,
"bootEnv2": null,
"bootEnv2Partition1Value": null,
"bootEnv2Partition2Value": null
}