小米电视 2.10 版本 Magisk ROOT 教程
本帖最后由 JaxsonWang 于 2026-7-20 19:57 编辑前言
我的电视系统是 2.10.3982,设备型号:L75MA-AC,Android9,理论上版本号差不多本教程通用的。下面教程不涉及到 Magisk 补丁 root,第三方 recovery 刷入等教程,并且我使用的是 macOS 环境,不提供其他系统教程,可以根据文章实际情况来变动。本教程是利用小米电视里面的服务名 TvService 作为入口,这个服务名把一个脚本路径交给高权限服务,由 uid=0 的 misysdiagnose SELinux 域执行:service call TvService 4400 s16 s s16 <script-path>:ADB shell
uid=2000(shell)
SELinux=u:r:shell:s0
│
│ Binder transaction 4400
▼
Xiaomi TvService
│
│ 将脚本路径交给厂商诊断执行组件
▼
misysdiagnose 执行脚本
uid=0(root)
SELinux=u:r:misysdiagnose:s0
利用上面特性配合我写的脚本通过 UART/CP2102 → U-Boot/Recovery → 部署 Magisk 启动链实现的持久 root。TvService 临时 Root
│
│ 尝试部署持久化文件、修改启动入口
▼
Magisk 持久 Root
准备
下载我的附件,然后新建 xiaomi 文件夹将附件里面内容解压进去,不要根解压。使用 CP2102 UART 连接电视:这边参考论坛教程:
2022新款小米电视(安卓6以上)硬核root教程(需要USB转TTL)小米电视硬核root教程(需要USB转TTL硬件工具)
建议下载附件文本手册查阅,论坛吞字太厉害了,好多命令被吞了。
电脑设置终端环境变量:# 小米电视ip地址
export TV=192.168.50.202:5555
# 工作目录地址
export XIAOMI=/Users/jaxson/Downloads/xiaomi
# 附件地址,放在工作目录地址里面
export ROOT_BUNDLE=$XIAOMI/final-root-bundle
# magisk 安装包
export MAGISK_APK=$ROOT_BUNDLE/apps/Magisk-v27.0.apk
CP2102:921600 baud / 8N1 / 无流控。
HDMI 1CP2102
14+5V
15TXD
16RXD
20 / 屏蔽地GND
核对设备打开终端输入:adb connect "$TV"
adb -s "$TV" shell '
getprop ro.product.model
getprop ro.product.device
getprop ro.build.version.release
getprop ro.build.version.sdk
getenforce
'
必须得到:敏感词-ASTP0
mulan
9
28
Enforcing
进入 Recovery Root
启动 UART,注意在 window 使用 putty 的话,设置波特921600,新开一个终端A,输入:mkdir -p "$XIAOMI/logs"
"$ROOT_BUNDLE/tools/uart921600" \
/dev/cu.usbserial-0001 \
921600 \
"$XIAOMI/logs/mulan-root-install.raw.log"
另一个终端 B 重启电视:adb -s "$TV" reboot
终端 A 在 U-Boot 阶段按回车。看到 mulan# 后逐条执行:factorydata read console_enable
factorydata write console_enable 1
factorydata read console_enable
setenv reboot_mode update
printenv reboot_mode
run switch_bootmode
不要执行 saveenv。
Recovery 中确认:grep -E '^(Uid|Gid|CapEff|Seccomp):' /proc/self/status
cat /sys/fs/selinux/enforce
必须是 UID 0,SELinux 输出 0。
完整分区备份
如果这一步不用做的话可以无视,直接跳转到下一节,但建议还是做一下备份,后期折腾分区坏了还能还原。Recovery:B=/sbin/busybox
$B mount /dev/block/data /data
D=/data/local/tmp/mulan-full-backup
$B mkdir -p "$D"
$B umount /cache
f(){ $B dd if=/dev/block/$1 of=$D/$1.img bs=1M; }
逐条执行:f bootloader
f reserved
f cache
f env
f logo
f recovery
f misc
f dtbo
f cri_data
f param
f boot
f rsv
f metadata
f vbmeta
f tee
f secure_recovery
f factorydata
f vendor
f odm
f system
f product
$B dd if=/dev/block/mmcblk0boot0 of=$D/mmcblk0boot0.img bs=1M
$B dd if=/dev/block/mmcblk0boot1 of=$D/mmcblk0boot1.img bs=1M
$B dd if=/dev/block/mtdblock0 of=$D/mtdblock0.img bs=1M
$B dd if=/dev/block/mmcblk0 of=$D/emmc-before-data.img bs=1M count=3184
$B chown -R 2000:2000 "$D"
$B chmod 700 "$D"
$B chmod 600 "$D"/*
$B sync
$B reboot
Android 启动后重新开启 ADB,把备份拉到电脑,并复制一份到其他存储:
mkdir -p "$XIAOMI/backups/mulan-full-backup"
adb connect "$TV"
adb -s "$TV" pull \
/data/local/tmp/mulan-full-backup/. \
"$XIAOMI/backups/mulan-full-backup/"
安装 Stage-B
电视正常启动并重新开启 ADB 后,在终端 B:<blockquote>adb -s "$TV" shell 'test ! -e /data/local/tmp/mulan-stage-b-install-20260719'
在终端 A 的 Recovery shell:<blockquote>B=/sbin/busybox
必须看到: INSTALL_SUCCESS
成功后:<blockquote>$B sync等待 Android 和 ADB 恢复:<blockquote>adb connect "$TV"必须是 Magisk 27.0、uid=0、bootstrap.rc=0,ADB 日志包含 SERVICE_SUCCESS。
启用内置 Zygisk
终端 B 执行:<blockquote>adb -s "$TV" shell
输出必须包含:key=zygisk|value=1
安装 Stage-C Final
终端 B:<blockquote>adb -s "$TV" shell 'test ! -e /data/local/tmp/mulan-stage-c-final'
必须看到: PREPARE_SUCCESS
终端 B 继续输入命令,进入 Recovery:adb -s "$TV" reboot recovery
终端 A:B=/sbin/busybox必须看到: INSTALL_SUCCESS出现 FAILED 时不要重启。成功后:$B sync
$B reboot
最终验证
等待约 90 秒,不要手动重新开启电视设置中的 ADB:adb connect "$TV"
必须满足:sys.boot_completed=1
SELinux=Enforcing
uid=0
stage-c-early.rc=0
stage-c-service.rc=0
STAGE_C_LATE_SUCCESS
Zygisk mode=builtin
ADB 日志包含 STABILIZATION_SUCCESS 和 SERVICE_SUCCESS
检查 Zygisk:adb -s "$TV" shell "/sbin/magisk su -c '必须看到 /system/lib/libzygisk.so。再正常重启一次并重复本节。
Magisk App 和模块
终端执行下面命令安装 magisk app:adb -s "$TV" install -r "$MAGISK_APK"
不要点击“修复运行环境”、Direct Install、核心更新或卸载。
模块必须兼容 Android 9、Magisk 27 和 32 位 zygote。安装模块后正常重启。
给应用授予 Root 权限
目前 magisk app 在小米电视系统无法正常弹窗授权,直到超时提示拒绝授权,这时候可以用下面 UID 授权:
1. 查应用 UID把包名替换成目标应用:export TV=192.168.50.202:5555
adb -s "$TV" shell
pm list packages -U | grep 'package:com.example.app '
示例输出:package:com.example.app uid:10075
记下 UID。不要直接给 uid:1000 等共享系统 UID 授权,否则同一 UID 下的其他系统组件也会获得 Root。
2. 永久允许
先确认 Magisk daemon 正常:pidof magiskd
/sbin/magisk su -c id
然后进入 Root shell,把 10075 换成实际 UID:/sbin/magisk su
APP_UID=10075
/sbin/magisk --sqlite "INSERT OR REPLACE INTO policies (uid,policy,until,logging,notification) VALUES ($APP_UID,2,0,1,0);"
/sbin/magisk --sqlite "SELECT uid,policy,until,logging,notification FROM policies WHERE uid=$APP_UID;"
exit
exit
正确结果包含:uid=10075
policy=2
until=0
含义:policy=2 允许
until=0 永不过期
logging=1 记录新的 su 请求
notification=0 不显示授权通知
这会覆盖该 UID 原有的拒绝记录,不再依赖电视上无法操作的 Magisk 弹窗。
3. 重新启动应用
adb -s "$TV" shell 'am force-stop com.example.app'
重新打开应用,再执行它的 Root 功能。
Magisk 日志中的旧“拒绝”不会自动消失,应以新的请求时间和 policies 查询结果为准。
4. 查看全部授权/sbin/magisk su -c '/sbin/magisk --sqlite "SELECT uid,policy,until,logging,notification FROM policies ORDER BY uid;"'
5. 撤销授权
/sbin/magisk su查询无结果表示已撤销。
6. 常见问题
No daemon is currently running!这不是 App 授权问题,而是 magiskd 没有运行。先正常重启电视,确认以下命令成功后再授权:pidof magiskd
/sbin/magisk su -c id
已写入 policy=2,应用仍提示没有 Root依次检查:
[*]包名对应的 UID 是否正确;
[*]应用是否在授权后被完全停止并重新打开;
[*]应用是否使用了其他进程或不同 UID;
[*]pidof magiskd 是否有输出;
[*]/sbin/magisk su -c id 是否仍返回 uid=0。
不要通过 Magisk App 的“修复运行环境”处理授权弹窗问题。
倒是好久没看到这么完整的教程了 {znds6}{znds6}{znds6} 首先我认可大佬!也佩服大佬! 只是enmmm 我眼界低吧 我实在没搞明白电视机root这有撒用? 谢谢分享 我是直接uboot下备份出来分区 解锁bl 关闭avb 然后修补面具刷进去的s pro miniled 2024 mt9653
页:
[1]
