Skip to content

Commit f29e73b

Browse files
Modified RAM Requirements for F/W Flash Process
Made changes in the memory requirements for routers with 512MB RAM to be less restrictive and allow to proceed with the F/W flash.
1 parent 42d99ec commit f29e73b

File tree

2 files changed

+197
-34
lines changed

2 files changed

+197
-34
lines changed

MerlinAU.sh

Lines changed: 196 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
#
55
# Original Creation Date: 2023-Oct-01 by @ExtremeFiretop.
66
# Official Co-Author: @Martinski W. - Date: 2023-Nov-01
7-
# Last Modified: 2025-May-31
7+
# Last Modified: 2025-Jun-02
88
###################################################################
99
set -u
1010

@@ -3587,8 +3587,65 @@ _HasRouterMoreThan256MBtotalRAM_()
35873587
{
35883588
local totalRAM_KB
35893589
totalRAM_KB="$(awk -F ' ' '/^MemTotal:/{print $2}' /proc/meminfo)"
3590-
[ -n "$totalRAM_KB" ] && [ "$totalRAM_KB" -gt 262144 ] && return 0
3591-
return 1
3590+
if [ -n "$totalRAM_KB" ] && [ "$totalRAM_KB" -gt 262144 ]
3591+
then return 0
3592+
else return 1
3593+
fi
3594+
}
3595+
3596+
##-------------------------------------##
3597+
## Added by Martinski W. [2025-Jun-01] ##
3598+
##-------------------------------------##
3599+
_HasRouterMoreThan512MBtotalRAM_()
3600+
{
3601+
local totalRAM_KB
3602+
totalRAM_KB="$(awk -F ' ' '/^MemTotal:/{print $2}' /proc/meminfo)"
3603+
if [ -n "$totalRAM_KB" ] && [ "$totalRAM_KB" -gt 524288 ]
3604+
then return 0
3605+
else return 1
3606+
fi
3607+
}
3608+
3609+
##-------------------------------------##
3610+
## Added by Martinski W. [2025-Jun-01] ##
3611+
##-------------------------------------##
3612+
#---------------------------------------------------------------------#
3613+
# We define TWO main phases for RAM requirement:
3614+
# In phase ONE, we ask for more RAM Available BEFORE downloading
3615+
# and extracting the F/W image file.
3616+
# In phase greater than ONE, we ask for less RAM Available AFTER
3617+
# the F/W image file has been downloaded and extracted.
3618+
#---------------------------------------------------------------------#
3619+
_GetAvailableRAM_PercentOverheadNum_()
3620+
{
3621+
local phaseNum=1 availableRAM_PercentOverheadNum
3622+
3623+
if [ $# -eq 0 ] || [ -z "$1" ] || \
3624+
! echo "$1" | grep -qE "^phase#[1-9]$"
3625+
then phaseNum=1
3626+
else phaseNum="$(echo "$1" | awk -F '#' '{print $2}')"
3627+
fi
3628+
3629+
if _HasRouterMoreThan512MBtotalRAM_
3630+
then ##Physical RAM is 1.0GB or more##
3631+
if [ "$phaseNum" -lt 3 ]
3632+
then availableRAM_PercentOverheadNum=50
3633+
else availableRAM_PercentOverheadNum=40
3634+
fi
3635+
elif _HasRouterMoreThan256MBtotalRAM_
3636+
then ##Physical RAM is 512.0MB##
3637+
if [ "$phaseNum" -lt 3 ]
3638+
then availableRAM_PercentOverheadNum=35
3639+
else availableRAM_PercentOverheadNum=25
3640+
fi
3641+
else ##Physical RAM is 256.0MB##
3642+
if [ "$phaseNum" -lt 3 ]
3643+
then availableRAM_PercentOverheadNum=35
3644+
else availableRAM_PercentOverheadNum=30
3645+
fi
3646+
fi
3647+
echo "$availableRAM_PercentOverheadNum"
3648+
return 0
35923649
}
35933650

35943651
##----------------------------------------##
@@ -3645,24 +3702,42 @@ _GetFreeRAM_KB_()
36453702
}
36463703

36473704
##----------------------------------------##
3648-
## Modified by Martinski W. [2024-Jun-05] ##
3705+
## Modified by Martinski W. [2025-Jun-01] ##
36493706
##----------------------------------------##
3707+
theZIP_FileSizeKB=0
3708+
theZIP_FileSizeBytes=0
3709+
36503710
_GetRequiredRAM_KB_()
36513711
{
3652-
local theURL="$1"
3653-
local zip_file_size_bytes zip_file_size_kb overhead_kb
3654-
local total_required_kb overhead_percentage=50
3712+
local theURL="$1" thePhase overhead_percentage
3713+
local overhead_KB total_required_KB
3714+
3715+
if [ $# -lt 2 ] || [ -z "$2" ] || \
3716+
! echo "$2" | grep -qE "^phase#[1-9]$"
3717+
then thePhase='phase#1'
3718+
else thePhase="$2"
3719+
fi
3720+
overhead_percentage="$(_GetAvailableRAM_PercentOverheadNum_ "$thePhase")"
3721+
3722+
if [ -z "$theZIP_FileSizeBytes" ] || \
3723+
[ "$theZIP_FileSizeBytes" = "0" ] || \
3724+
! echo "$theZIP_FileSizeBytes" | grep -qE "^[0-9]+$"
3725+
then
3726+
theZIP_FileSizeBytes="$(curl -LsI --retry 4 --retry-delay 5 "$theURL" | grep -i Content-Length | tail -1 | awk '{print $2}')"
3727+
fi
36553728

3656-
# Size of the ZIP file in bytes #
3657-
zip_file_size_bytes="$(curl -LsI --retry 4 --retry-delay 5 "$theURL" | grep -i Content-Length | tail -1 | awk '{print $2}')"
3658-
# Bytes to KBytes #
3659-
zip_file_size_kb="$((zip_file_size_bytes / 1024))"
3729+
if [ -n "$theZIP_FileSizeBytes" ] && \
3730+
[ "$theZIP_FileSizeBytes" -gt 0 ] && \
3731+
[ "$theZIP_FileSizeKB" -eq 0 ]
3732+
then
3733+
theZIP_FileSizeKB="$((theZIP_FileSizeBytes / 1024))"
3734+
fi
36603735

36613736
# Calculate overhead based on the percentage #
3662-
overhead_kb="$((zip_file_size_kb * overhead_percentage / 100))"
3737+
overhead_KB="$((theZIP_FileSizeKB * overhead_percentage / 100))"
36633738

3664-
total_required_kb="$((zip_file_size_kb + overhead_kb))"
3665-
echo "$total_required_kb"
3739+
total_required_KB="$((theZIP_FileSizeKB + overhead_KB))"
3740+
echo "$total_required_KB"
36663741
}
36673742

36683743
##----------------------------------------##
@@ -3672,12 +3747,12 @@ _ShutDownNonCriticalServices_()
36723747
{
36733748
for procName in nt_center nt_monitor nt_actMail
36743749
do
3675-
procNum="$(ps w | grep -w "$procName" | grep -cv "grep -w")"
3676-
if [ "$procNum" -gt 0 ]
3677-
then
3678-
printf "$procName: [$procNum]\n"
3679-
killall -9 "$procName" && sleep 1
3680-
fi
3750+
procNum="$(ps w | grep -w "$procName" | grep -cv "grep -w")"
3751+
if [ "$procNum" -gt 0 ]
3752+
then
3753+
printf "$procName: [$procNum]\n"
3754+
killall -9 "$procName" && sleep 1
3755+
fi
36813756
done
36823757

36833758
for service_name in conn_diag samba nasapps
@@ -3691,6 +3766,89 @@ _ShutDownNonCriticalServices_()
36913766
done
36923767
}
36933768

3769+
##-------------------------------------##
3770+
## Added by Martinski W. [2025-Jun-01] ##
3771+
##-------------------------------------##
3772+
#---------------------------------------------------------------------#
3773+
# As a last resort, to free more available RAM, we now attempt to
3774+
# disable and shutdown existing ASUS/TrendMicro services such as:
3775+
# AsusNat Tunnel, AiProtection, Traffic Analyzer/Monitor, and
3776+
# Bandwidth Monitor. These appear to use quite a lot of RAM.
3777+
#---------------------------------------------------------------------#
3778+
3779+
apps_analysis_SAVED=""
3780+
bwdpi_db_enable_SAVED=""
3781+
aae_disable_force_SAVED=""
3782+
wrs_protect_enable_SAVED=""
3783+
networkmap_fullscan_SAVED=""
3784+
AsusTrendMicroProcsDisabled=false
3785+
3786+
_DisableAsusTrendMicroProcesses_()
3787+
{
3788+
apps_analysis_SAVED="$(nvram get apps_analysis)"
3789+
bwdpi_db_enable_SAVED="$(nvram get bwdpi_db_enable)"
3790+
aae_disable_force_SAVED="$(nvram get aae_disable_force)"
3791+
wrs_protect_enable_SAVED="$(nvram get wrs_protect_enable)"
3792+
networkmap_fullscan_SAVED="$(nvram get networkmap_fullscan)"
3793+
3794+
if [ "$apps_analysis_SAVED" = "1" ] || \
3795+
[ "$bwdpi_db_enable_SAVED" = "1" ] || \
3796+
[ "$aae_disable_force_SAVED" = "0" ] || \
3797+
[ "$wrs_protect_enable_SAVED" = "1" ]
3798+
then
3799+
Say "Temporarily disabling some Asus/TrendMicro services..."
3800+
"$isInteractive" && printf "Please wait.\n"
3801+
nvram set apps_analysis=0 ; sleep 1
3802+
nvram set bwdpi_db_enable=0 ; sleep 1
3803+
nvram set aae_disable_force=1 ; sleep 1
3804+
nvram set wrs_protect_enable=0 ; sleep 1
3805+
nvram set networkmap_fullscan=2
3806+
AsusTrendMicroProcsDisabled=true
3807+
sleep 2
3808+
fi
3809+
3810+
for procName in aaews mastiff dcd wred bwdpi_wred_alive bwdpi_check hour_monitor netool
3811+
do
3812+
procNum="$(ps w | grep -w "$procName" | grep -cv "grep -w")"
3813+
if [ "$procNum" -gt 0 ]
3814+
then
3815+
printf "$procName: [$procNum]\n"
3816+
killall -9 "$procName" && sleep 1
3817+
fi
3818+
done
3819+
3820+
if "$isInteractive" && "$AsusTrendMicroProcsDisabled"
3821+
then printf "\nDone.\n" ; fi
3822+
}
3823+
3824+
##-------------------------------------##
3825+
## Added by Martinski W. [2025-Jun-01] ##
3826+
##-------------------------------------##
3827+
_ReEnableAsusTrendMicroProcesses_()
3828+
{
3829+
if ! "$AsusTrendMicroProcsDisabled"
3830+
then return 0 ; fi
3831+
3832+
Say "Re-enabling existing Asus/TrendMicro services..."
3833+
"$isInteractive" && printf "Please wait.\n"
3834+
3835+
nvram set apps_analysis="$apps_analysis_SAVED"
3836+
sleep 1
3837+
nvram set bwdpi_db_enable="$bwdpi_db_enable_SAVED"
3838+
sleep 1
3839+
nvram set aae_disable_force="$aae_disable_force_SAVED"
3840+
sleep 1
3841+
nvram set wrs_protect_enable="$wrs_protect_enable_SAVED"
3842+
sleep 1
3843+
nvram set networkmap_fullscan="$networkmap_fullscan_SAVED"
3844+
sleep 1
3845+
AsusTrendMicroProcsDisabled=false
3846+
3847+
"$isInteractive" && printf "\nDone.\n"
3848+
Say "A reboot may be necessary to fully restart Asus/TrendMicro services..."
3849+
return 0
3850+
}
3851+
36943852
##------------------------------------------##
36953853
## Modified by ExtremeFiretop [2024-Jan-26] ##
36963854
##------------------------------------------##
@@ -3764,7 +3922,7 @@ _LogMemoryDebugInfo_()
37643922
}
37653923

37663924
##----------------------------------------##
3767-
## Modified by Martinski W. [2024-Mar-26] ##
3925+
## Modified by Martinski W. [2025-Jun-01] ##
37683926
##----------------------------------------##
37693927
check_memory_and_prompt_reboot()
37703928
{
@@ -3790,6 +3948,7 @@ check_memory_and_prompt_reboot()
37903948

37913949
# Attempt to clear dentries and inodes. #
37923950
Say "Attempting to free up memory again more aggressively..."
3951+
_DisableAsusTrendMicroProcesses_
37933952
sync; echo 2 > /proc/sys/vm/drop_caches
37943953
sleep 2
37953954

@@ -3806,7 +3965,6 @@ check_memory_and_prompt_reboot()
38063965

38073966
# Stop Entware services to free some memory #
38083967
_EntwareServicesHandler_ stop
3809-
38103968
_ShutDownNonCriticalServices_
38113969

38123970
sync; echo 3 > /proc/sys/vm/drop_caches
@@ -3835,18 +3993,19 @@ check_memory_and_prompt_reboot()
38353993
Say "Insufficient memory to continue. Exiting script."
38363994
# Restart Entware services #
38373995
_EntwareServicesHandler_ start
3996+
_ReEnableAsusTrendMicroProcesses_
38383997

38393998
_DoCleanUp_ 1 "$keepZIPfile" "$keepWfile"
38403999
_DoExit_ 1
38414000
fi
38424001
else
3843-
Say "Successfully freed up memory. Available: ${availableRAM_kb}KB."
4002+
Say "Successfully freed up memory. RAM Available: ${availableRAM_kb} KB."
38444003
fi
38454004
else
3846-
Say "Successfully freed up memory. Available: ${availableRAM_kb}KB."
4005+
Say "Successfully freed up memory. RAM Available: ${availableRAM_kb} KB."
38474006
fi
38484007
else
3849-
Say "Successfully freed up memory. Available: ${availableRAM_kb}KB."
4008+
Say "Successfully freed up memory. RAM Available: ${availableRAM_kb} KB."
38504009
fi
38514010
fi
38524011
}
@@ -8738,11 +8897,11 @@ Please manually update to version ${GRNct}${MinSupportedFirmwareVers}${NOct} or
87388897
return 1
87398898
fi
87408899

8741-
##---------------------------------------##
8742-
## Added by ExtremeFiretop [2023-Dec-09] ##
8743-
##---------------------------------------##
8900+
##----------------------------------------##
8901+
## Modified by Martinski W. [2025-Jun-01] ##
8902+
##----------------------------------------##
87448903
# Get the required memory for the firmware download and extraction
8745-
requiredRAM_kb="$(_GetRequiredRAM_KB_ "$release_link")"
8904+
requiredRAM_kb="$(_GetRequiredRAM_KB_ "$release_link" 'phase#1')"
87468905
if ! _HasRouterMoreThan256MBtotalRAM_ && [ "$requiredRAM_kb" -gt 51200 ]
87478906
then
87488907
if ! _ValidateUSBMountPoint_ "$FW_ZIP_BASE_DIR" 1
@@ -8810,11 +8969,12 @@ Please manually update to version ${GRNct}${MinSupportedFirmwareVers}${NOct} or
88108969
fi
88118970
fi
88128971

8813-
##------------------------------------------##
8814-
## Modified by ExtremeFiretop [2024-Feb-18] ##
8815-
##------------------------------------------##
8972+
##----------------------------------------##
8973+
## Modified by Martinski W. [2025-Jun-01] ##
8974+
##----------------------------------------##
88168975
freeRAM_kb="$(_GetFreeRAM_KB_)"
88178976
availableRAM_kb="$(_GetAvailableRAM_KB_)"
8977+
requiredRAM_kb="$(_GetRequiredRAM_KB_ "$release_link" 'phase#2')"
88188978
Say "Required RAM: ${requiredRAM_kb} KB - RAM Free: ${freeRAM_kb} KB - RAM Available: ${availableRAM_kb} KB"
88198979
check_memory_and_prompt_reboot "$requiredRAM_kb" "$availableRAM_kb"
88208980

@@ -8838,6 +8998,7 @@ Please manually update to version ${GRNct}${MinSupportedFirmwareVers}${NOct} or
88388998

88398999
freeRAM_kb="$(_GetFreeRAM_KB_)"
88409000
availableRAM_kb="$(_GetAvailableRAM_KB_)"
9001+
requiredRAM_kb="$(_GetRequiredRAM_KB_ "$release_link" 'phase#3')"
88419002
Say "Required RAM: ${requiredRAM_kb} KB - RAM Free: ${freeRAM_kb} KB - RAM Available: ${availableRAM_kb} KB"
88429003
check_memory_and_prompt_reboot "$requiredRAM_kb" "$availableRAM_kb"
88439004

@@ -8859,6 +9020,7 @@ Please manually update to version ${GRNct}${MinSupportedFirmwareVers}${NOct} or
88599020

88609021
freeRAM_kb="$(_GetFreeRAM_KB_)"
88619022
availableRAM_kb="$(_GetAvailableRAM_KB_)"
9023+
requiredRAM_kb="$(_GetRequiredRAM_KB_ "$release_link" 'phase#4')"
88629024
Say "Required RAM: ${requiredRAM_kb} KB - RAM Free: ${freeRAM_kb} KB - RAM Available: ${availableRAM_kb} KB"
88639025
check_memory_and_prompt_reboot "$requiredRAM_kb" "$availableRAM_kb"
88649026

@@ -8945,10 +9107,11 @@ Please manually update to version ${GRNct}${MinSupportedFirmwareVers}${NOct} or
89459107
fi
89469108

89479109
##----------------------------------------##
8948-
## Modified by Martinski W. [2024-Mar-16] ##
9110+
## Modified by Martinski W. [2025-Jun-01] ##
89499111
##----------------------------------------##
89509112
freeRAM_kb="$(_GetFreeRAM_KB_)"
89519113
availableRAM_kb="$(_GetAvailableRAM_KB_)"
9114+
requiredRAM_kb="$(_GetRequiredRAM_KB_ "$release_link" 'phase#5')"
89529115
Say "Required RAM: ${requiredRAM_kb} KB - RAM Free: ${freeRAM_kb} KB - RAM Available: ${availableRAM_kb} KB"
89539116
check_memory_and_prompt_reboot "$requiredRAM_kb" "$availableRAM_kb"
89549117

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
# MerlinAU - AsusWRT-Merlin Firmware Auto Updater
22
## v1.4.7
3-
## 2025-May-18
3+
## 2025-Jun-??
44

55
## WebUI:
66
![image](https://github.com/user-attachments/assets/a2197262-ca35-451a-8645-311896e1495e)

0 commit comments

Comments
 (0)