Force kernel to load rootfs only for legacy SAR devices

This commit is contained in:
vvb2060 2023-07-09 23:53:59 +08:00 committed by John Wu
parent 275208e81b
commit d12d9e82f1
6 changed files with 23 additions and 7 deletions

View File

@ -28,6 +28,7 @@ object Info {
// Device state // Device state
@JvmStatic val env by lazy { loadState() } @JvmStatic val env by lazy { loadState() }
@JvmField var isSAR = false @JvmField var isSAR = false
var legacySAR = false
var isAB = false var isAB = false
@JvmField val isZygiskEnabled = System.getenv("ZYGISK_ENABLED") == "1" @JvmField val isZygiskEnabled = System.getenv("ZYGISK_ENABLED") == "1"
@JvmStatic val isFDE get() = crypto == "block" @JvmStatic val isFDE get() = crypto == "block"

View File

@ -492,7 +492,7 @@ abstract class MagiskInstallImpl protected constructor(
"KEEPVERITY=${Config.keepVerity} " + "KEEPVERITY=${Config.keepVerity} " +
"PATCHVBMETAFLAG=${Config.patchVbmeta} " + "PATCHVBMETAFLAG=${Config.patchVbmeta} " +
"RECOVERYMODE=${Config.recovery} " + "RECOVERYMODE=${Config.recovery} " +
"SYSTEM_ROOT=${Info.isSAR} " + "LEGACYSAR=${Info.legacySAR} " +
"sh boot_patch.sh $srcBoot") "sh boot_patch.sh $srcBoot")
val isSuccess = cmds.sh().isSuccess val isSuccess = cmds.sh().isSuccess

View File

@ -78,6 +78,7 @@ class ShellInit : Shell.Initializer() {
Info.vbmeta = getBool("VBMETAEXIST") Info.vbmeta = getBool("VBMETAEXIST")
Info.isAB = getBool("ISAB") Info.isAB = getBool("ISAB")
Info.crypto = getVar("CRYPTOTYPE") Info.crypto = getVar("CRYPTOTYPE")
Info.legacySAR = getBool("LEGACYSAR")
// Default presets // Default presets
Config.recovery = getBool("RECOVERYMODE") Config.recovery = getBool("RECOVERYMODE")

View File

@ -154,7 +154,7 @@ check_boot_ramdisk() {
$ISAB && return 0 $ISAB && return 0
# If we are using legacy SAR, but not A/B, assume we do not have ramdisk # If we are using legacy SAR, but not A/B, assume we do not have ramdisk
if grep ' / ' /proc/mounts | grep -q '/dev/root'; then if $LEGACYSAR; then
# Override recovery mode to true # Override recovery mode to true
RECOVERYMODE=true RECOVERYMODE=true
return 1 return 1
@ -211,6 +211,11 @@ get_flags() {
PATCHVBMETAFLAG=false PATCHVBMETAFLAG=false
# Make sure RECOVERYMODE has value # Make sure RECOVERYMODE has value
[ -z $RECOVERYMODE ] && RECOVERYMODE=false [ -z $RECOVERYMODE ] && RECOVERYMODE=false
if grep ' / ' /proc/mounts | grep -q '/dev/root'; then
LEGACYSAR=true
else
LEGACYSAR=false
fi
} }
run_migrations() { return; } run_migrations() { return; }
@ -223,9 +228,9 @@ grep_prop() { return; }
app_init() { app_init() {
mount_partitions mount_partitions
get_flags
RAMDISKEXIST=false RAMDISKEXIST=false
check_boot_ramdisk && RAMDISKEXIST=true check_boot_ramdisk && RAMDISKEXIST=true
get_flags
run_migrations run_migrations
SHA1=$(grep_prop SHA1 $MAGISKTMP/.magisk/config) SHA1=$(grep_prop SHA1 $MAGISKTMP/.magisk/config)
check_encryption check_encryption

View File

@ -6,7 +6,7 @@
# Usage: boot_patch.sh <bootimage> # Usage: boot_patch.sh <bootimage>
# #
# The following flags can be set in environment variables: # The following flags can be set in environment variables:
# KEEPVERITY, KEEPFORCEENCRYPT, PATCHVBMETAFLAG, RECOVERYMODE, SYSTEM_ROOT # KEEPVERITY, KEEPFORCEENCRYPT, PATCHVBMETAFLAG, RECOVERYMODE, LEGACYSAR
# #
# This script should be placed in a directory with the following files: # This script should be placed in a directory with the following files:
# #
@ -73,7 +73,7 @@ fi
[ -z $KEEPFORCEENCRYPT ] && KEEPFORCEENCRYPT=false [ -z $KEEPFORCEENCRYPT ] && KEEPFORCEENCRYPT=false
[ -z $PATCHVBMETAFLAG ] && PATCHVBMETAFLAG=false [ -z $PATCHVBMETAFLAG ] && PATCHVBMETAFLAG=false
[ -z $RECOVERYMODE ] && RECOVERYMODE=false [ -z $RECOVERYMODE ] && RECOVERYMODE=false
[ -z $SYSTEM_ROOT ] && SYSTEM_ROOT=false [ -z $LEGACYSAR ] && LEGACYSAR=false
export KEEPVERITY export KEEPVERITY
export KEEPFORCEENCRYPT export KEEPFORCEENCRYPT
export PATCHVBMETAFLAG export PATCHVBMETAFLAG
@ -233,7 +233,7 @@ if [ -f kernel ]; then
# Force kernel to load rootfs for legacy SAR devices # Force kernel to load rootfs for legacy SAR devices
# skip_initramfs -> want_initramfs # skip_initramfs -> want_initramfs
$SYSTEM_ROOT && ./magiskboot hexpatch kernel \ $LEGACYSAR && ./magiskboot hexpatch kernel \
736B69705F696E697472616D667300 \ 736B69705F696E697472616D667300 \
77616E745F696E697472616D667300 \ 77616E745F696E697472616D667300 \
&& PATCHEDKERNEL=true && PATCHEDKERNEL=true

View File

@ -312,7 +312,7 @@ mount_partitions() {
# After calling this method, the following variables will be set: # After calling this method, the following variables will be set:
# KEEPVERITY, KEEPFORCEENCRYPT, RECOVERYMODE, PATCHVBMETAFLAG, # KEEPVERITY, KEEPFORCEENCRYPT, RECOVERYMODE, PATCHVBMETAFLAG,
# ISENCRYPTED, VBMETAEXIST # ISENCRYPTED, VBMETAEXIST, LEGACYSAR
get_flags() { get_flags() {
getvar KEEPVERITY getvar KEEPVERITY
getvar KEEPFORCEENCRYPT getvar KEEPFORCEENCRYPT
@ -350,6 +350,15 @@ get_flags() {
fi fi
fi fi
[ -z $RECOVERYMODE ] && RECOVERYMODE=false [ -z $RECOVERYMODE ] && RECOVERYMODE=false
local IS_DYNAMIC=false
grep -q 'androidboot.super_partition' /proc/cmdline && IS_DYNAMIC=true
[ -b "/dev/block/by-name/super" ] && IS_DYNAMIC=true
if $SYSTEM_ROOT && ! $IS_DYNAMIC; then
LEGACYSAR=true
ui_print "- legacy SAR, force kernel to load rootfs"
else
LEGACYSAR=false
fi
} }
find_boot_image() { find_boot_image() {