#!/system/bin/sh
MODE=$1
log_print() {
echo "($MODE) $1"
log -p i -t launch_daemonsu "($MODE) $1"
}
log_print "start"
if [ `mount | grep " /data " >/dev/null 2>&1; echo $?` -ne 0 ]; then
# /data not mounted yet, we will be called again later
log_print "abort: /data not mounted #1"
exit
fi
if [ `mount | grep " /data " | grep "tmpfs" >/dev/null 2>&1; echo $?` -eq 0 ]; then
# /data not mounted yet, we will be called again later
log_print "abort: /data not mounted #2"
exit
fi
SBIN=
DAEMONSU=
LOGFILE=
if [ ! -d "/su" ]; then
log_print "/sbin mode"
# sbin mode
SBIN=true
SUFILES=/data/adb/su
DAEMONSU=/sbin/daemonsu
LOGFILE=/sbin/.launch_daemonsu.log
# in case of factory reset
if [ ! -d "/data/adb" ]; then
mkdir /data/adb
chmod 0700 /data/adb
restorecon /data/adb
fi
# cleanup /su mode
rm -rf /data/su.img
else
log_print "/su mode"
# normal systemless mode
SBIN=false
SUFILES=/su
DAEMONSU=/su/bin/daemonsu
LOGFILE=/dev/.launch_daemonsu.log
# cleanup /sbin mode
rm -rf /data/adb/su
fi
if ($SBIN) || [ `cat /proc/mounts | grep $SUFILES >/dev/null 2>&1; echo $?` -eq 0 ]; then
if [ -d "$SUFILES/bin" ]; then
if [ `ps | grep -v "launch_daemonsu.sh" | grep "daemonsu" >/dev/null 2>&1; echo $?` -eq 0 ] || [ `ps -A | grep -v "launch_daemonsu.sh" | grep "daemonsu" >/dev/null 2>&1; echo $?` -eq 0 ]; then
# nothing to do here
log_print "abort: daemonsu already running"
exit
fi
fi
fi
setprop sukernel.daemonsu.launch $MODE
if ($SBIN); then
# make sure our SUFILES directory exists
# not needed in /su mode, created by boot image patcher
mkdir $SUFILES
chown 0.0 $SUFILES
chmod 0755 $SUFILES
chcon u:object_r:system_file:s0 $SUFILES
fi
loopsetup() {
LOOPDEVICE=
for DEV in $(ls /dev/block/loop*); do
if [ `losetup $DEV $1 >/dev/null 2>&1; echo $?` -eq 0 ]; then
LOOPDEVICE=$DEV
break
fi
done
log_print "loopsetup($1): $LOOPDEVICE"
}
resize() {
local LAST=
local SIZE=
for i in `ls -l /data/su.img`; do
if [ "$LAST" = "root" ]; then
if [ "$i" != "root" ]; then
SIZE=$i
break;
fi
fi
LAST=$i
done
log_print "/data/su.img: $SIZE bytes"
if [ "$SIZE" -lt "96000000" ]; then
log_print "resizing /data/su.img to 96M"
e2fsck -p -f /data/su.img
resize2fs /data/su.img 96M
fi
}
REBOOT=false
# copy boot image backups
log_print "copying boot image backups from /cache to /data"
cp -f /cache/stock_boot_* /data/. 2>/dev/null
if ($SBIN); then
if [ -d "/data/supersu_install" ] || [ -d "/cache/supersu_install" ]; then
log_print "merging from [/data|/cache]/supersu_install"
cp -af /data/supersu_install/. $SUFILES
cp -af /cache/supersu_install/. $SUFILES
rm -rf /data/supersu_install
rm -rf /cache/supersu_install
log_print "merge complete"
fi
elif [ ! -d "$SUFILES/bin" ]; then
# not mounted yet, and doesn't exist already, merge
log_print "$SUFILES not mounted yet"
if [ -f "/data/su.img" ]; then
log_print "/data/su.img found"
e2fsck -p -f /data/su.img
# make sure the image is the right size
resize
fi
# newer image in /cache ?
# only used if recovery couldn't mount /data
if [ -f "/cache/su.img" ]; then
log_print "/cache/su.img found"
e2fsck -p -f /cache/su.img
OVERWRITE=true
if [ -f "/data/su.img" ]; then
# attempt merge, this will fail pre-M
# will probably also fail with /system installed busybox,
# but then again, is there anything busybox doesn't break?
# falls back to overwrite
log_print "/data/su.img found"
log_print "attempting merge"
mkdir /cache/data_img
mkdir /cache/cache_img
# setup loop devices
loopsetup /data/su.img
LOOPDATA=$LOOPDEVICE
log_print "$LOOPDATA /data/su.img"
loopsetup /cache/su.img
LOOPCACHE=$LOOPDEVICE
log_print "$LOOPCACHE /cache/su.img"
if [ ! -z "$LOOPDATA" ]; then
if [ ! -z "$LOOPCACHE" ]; then
# if loop devices have been setup, mount images
OK=true
if [ `mount -t ext4 -o rw,noatime $LOOPDATA /cache/data_img >/dev/null 2>&1; echo $?` -ne 0 ]; then
OK=false
fi
if [ `mount -t ext4 -o rw,noatime $LOOPCACHE /cache/cache_img >/dev/null 2>&1; echo $?` -ne 0 ]; then
OK=false
fi
if ($OK); then
# if mounts have succeeded, merge the images
if [ `cp -af /cache/cache_img/. /cache/data_img >/dev/null 2>&1; echo $?` -eq 0 ]; then
log_print "merge complete"
OVERWRITE=false
fi
fi
umount /cache/data_img
umount /cache/cache_img
fi
fi
losetup -d $LOOPDATA
losetup -d $LOOPCACHE
rmdir /cache/data_img
rmdir /cache/cache_img
fi
if ($OVERWRITE); then
# no /data/su.img or merge failed, replace
log_print "replacing /data/su.img with /cache/su.img"
mv /cache/su.img /data/su.img
# make sure the new image is the right size
resize
fi
rm /cache/su.img
fi
if [ ! -f "/data/su.img" ]; then
if [ -d "/.sufrp" ]; then
# create empty image
make_ext4fs -l 96M -a $SUFILES -S /.sufrp/file_contexts_image /data/su.img
chown 0.0 /data/su.img
chmod 0600 /data/su.img
chcon u:object_r:system_data_file:s0 /data/su.img
# make sure the new image is the right size
resize
fi
fi
fi
# do we have an APK to install ?
if [ -f "/cache/SuperSU.apk" ]; then
cp /cache/SuperSU.apk /data/SuperSU.apk
rm /cache/SuperSU.apk
fi
if [ -f "/data/SuperSU.apk" ]; then
log_print "installing SuperSU APK in /data"
APKPATH=eu.chainfire.supersu-1
for i in `ls /data/app | grep eu.chainfire.supersu- | grep -v eu.chainfire.supersu.pro`; do
if [ `cat /data/system/packages.xml | grep $i >/dev/null 2>&1; echo $?` -eq 0 ]; then
APKPATH=$i
break;
fi
done
rm -rf /data/app/eu.chainfire.supersu-*
log_print "SUFILES path: /data/app/$APKPATH"
mkdir /data/app/$APKPATH
chown 1000.1000 /data/app/$APKPATH
chmod 0755 /data/app/$APKPATH
chcon u:object_r:apk_data_file:s0 /data/app/$APKPATH
cp /data/SuperSU.apk /data/app/$APKPATH/base.apk
chown 1000.1000 /data/app/$APKPATH/base.apk
chmod 0644 /data/app/$APKPATH/base.apk
chcon u:object_r:apk_data_file:s0 /data/app/$APKPATH/base.apk
rm /data/SuperSU.apk
sync
# just in case
REBOOT=true
fi
# sometimes we need to reboot, make it so
if ($REBOOT); then
log_print "rebooting"
if [ "$MODE" = "post-fs-data" ]; then
# avoid device freeze (reason unknown)
sh -c "sleep 5; reboot" &
else
reboot
fi
exit
fi
if (! $SBIN) && [ ! -d "$SUFILES/bin" ]; then
# not mounted yet, and doesn't exist already, mount
log_print "preparing mount"
# fix permissions
chown 0.0 /data/su.img
chmod 0600 /data/su.img
chcon u:object_r:system_data_file:s0 /data/su.img
# losetup is unreliable pre-M
if [ `cat /proc/mounts | grep $SUFILES >/dev/null 2>&1; echo $?` -ne 0 ]; then
loopsetup /data/su.img
if [ ! -z "$LOOPDEVICE" ]; then
MOUNT=$(mount -t ext4 -o rw,noatime $LOOPDEVICE $SUFILES 2>&1)
log_print "mount error (if any): $MOUNT"
fi
fi
# trigger mount, should also work pre-M, but on post-fs-data trigger may
# be processed only after this script runs, causing a fallback to service launch
if [ `cat /proc/mounts | grep $SUFILES >/dev/null 2>&1; echo $?` -ne 0 ]; then
setprop sukernel.mount 1
sleep 1
fi
# exit if all mount attempts have failed, script is likely to be called again
if [ `cat /proc/mounts | grep $SUFILES >/dev/null 2>&1; echo $?` -ne 0 ]; then
log_print "abort: mount failed"
exit
fi
log_print "mount succeeded"
fi
if [ ! -d "$SUFILES/bin" ]; then
log_print "FRP: empty $SUFILES"
if [ -d "/.sufrp" ]; then
log_print "FRP: install"
/.sufrp/frp_install

江西省遂川县常驻深圳大使
- 粉丝: 6171
最新资源
- 跨平台Python环境配置与多版本管理工具_支持Linux_OSX_Windows系统_Python3安装_版本切换_路径配置_包管理_开发环境搭建_适用于初学者和开发者_解决Py.zip
- liuyangnorway_tensorflow-anaconda_54428_1754228236474.zip
- shxiangyan_emacsd_25036_1754228238278.zip
- 基于S3C2440硬件平台与Linux34系统的激光打靶自动识别系统_使用UVC兼容USB摄像头采集绿色背景胸环靶图像_通过图像处理算法实时计算弹着点环数并通过串口发送至STM3.zip
- 2023年TI杯全国大学生电子设计竞赛控制E题_基于STM32与OpenMV的激光追踪系统_运动目标控制与自动追踪系统_嵌入式视觉识别与PID控制算法_双轴舵机云台精确定位系统_红.zip
- 《AutoUpdate软件自动更新包》
- 激光打靶与三子棋游戏控制上位机_基于Java开发的安卓应用程序_用于激光打靶游戏和三子棋游戏的控制与交互_包含游戏逻辑控制_用户界面设计_蓝牙通信模块_传感器数据处理_游戏状态管理.zip
- 2024年TI杯全国大学生电子设计竞赛H题智能小车控制系统完整解决方案_基于M0G3507主控芯片的自动循迹避障遥控多功能智能车_包含完整硬件电路设计软件算法开发及系统调试文档的竞.zip
- 2024年全国大学生电子设计竞赛H题智能小车控制系统_基于M0微控制器的四轮驱动智能循迹避障小车_包含四个子任务模块其中第三四问共用key3信号处理_初始位置需略微前移调整_实现自.zip
- CZH-jiezhou_smart_car_36224_1754228015519.zip
- ashkorehennessy_nuedc-2024-H_54428_1754228012785.zip
- hawav_ds2024_54428_1754228058989.zip
- HXBJ1737_car0_54428_1754228021780.zip
- zhanivgit_2025-0716_24844_1754228027808.zip
- JamieK32_ti-contest_36224_1754228018582.zip
- 基于ESP32微控制器的智能自动驾驶小车系统_2024全国大学生电子设计竞赛H题参赛项目_包含多传感器融合定位导航_超声波避障_OpenMV视觉识别_蓝牙遥控_OLED显示_锂电池.zip
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈


