Magisk 对 boot.img 做了什么?

Magisk 对 boot.img 进行了以下主要修改:

  1. 在 boot.img 中添加 Magisk 二进制文件:Magisk 管理器 app 会自动下载最新版本的 Magisk 二进制文件,然后将其添加到 boot.img 文件中。这个二进制文件负责管理 Magisk 框架的运行和 root 权限的获取。
  2. 修改 init 脚本:Magisk 会修改 boot.img 中的 init 脚本,以便在系统启动时运行 Magisk 二进制文件,并加载所需的模块。
  3. 禁用 dm-verity 和 forced encryption:Magisk 还会禁用 boot.img 中的 dm-verity 和 forced encryption 功能,以避免这些功能对 root 权限的获取造成干扰。
  4. 其他修改:Magisk 还可能进行其他修改,例如修改 SELinux 策略和添加额外的二进制文件。这些修改的具体内容可能会随着不同版本的 Magisk 而有所变化。

总之,Magisk 主要通过向 boot.img 中添加二进制文件和修改 init 脚本来注入 Magisk 框架并获取 root 权限,同时禁用某些功能以避免干扰。

-------------------

3399 配置笔记

1. adb shell 默认超级管理员
在build/core/main.mk下
将   ADDITIONAL_DEFAULT_PROPERTIES += ro.secure=1
改成ADDITIONAL_DEFAULT_PROPERTIES += ro.secure=0
然后执行make bootimage重新生成


2.默认启用USB连接
在device/rockchip/rk3399/init.box.rc文件中加入以下两行:
write /sys/kernel/debug/usb@fe800000/rk_usb_force_mode peripheral
setprop persist.usb.mode peripheral
然后执行make bootimage重新生成

3.默认启用USB调试
在device/rockchip/rk3399/rk3399_firefly_aio_box/system.prop中加入ro.adb.secure=0
然后make systemimage重新生成

4.隐藏虚拟按键
在build/tools/buildinfo.sh加入echo "qemu.hw.mainkeys=1"
然后make systemimage重新生成
也可以启动后直接在/system/build.prop里加入qemu.hw.mainkeys=1

5.修改屏幕分辨率和屏幕方向
在device/rockchip/rk3399/rk3399_firefly_aio_box/system.prop中
设置persist.sys.framebuffer.main字段值,比如设置成1280x720,就是默认横屏
分辨率为1280x720.如果想设置成竖屏,则设置成:720x1280
然后make systemimage重新生成

6.带有__DATE__,__TIME__宏的代码编译失败
编译时报错的内容如下:
error: expansion of date or time macro is not reproducible [-Werror,-Wdate-time]
我们在自己的Makefile中加:-Wno-error=date-time是没用的
得在build/core/config.mk文件中,找到TARGET_ERROR_FLAGS变量,
将它后面的-Werror=date-time选项去掉。
如果是Android8.0 在build/soong/cc/config/global.go找到deviceGlobalCflags,将其中的-Werror=date-time值去掉。
然后make systemimage重新生成

7.adb devices获取不到***
当我们执行adb devices的时候,有概率获取不到手机***,提示(no serial number).
解决办法:
将system/core/adb/daemon/main.cpp下的property_get("ro.serialno", value, "none");
改为property_get("sys.serialno", value, "none");
并将device/rockchip/common/init.rk30board.rc中的:
on property:sys.serialno=*
setprop ro.serialno ${sys.serialno}
注释掉
最后执行make bootimage重新生成

8.禁用dm-verity
device/rockchip/rk3399/init.rk3399.rc**释掉verity_update_state和verity_load_state
on early-boot
# Update dm-verity state and set partition.*.verified properties
# verity_update_state
on init
# Load persistent dm-verity state
# verity_load_state
make bootimage重新生成

9.生成镜像时提示Out of space
device/rockchip/common/BoardConfig.mk里将变量BOARD_XXXXXX_PARTITION_SIZE的值调大

10.设置默认语言为中文
build/target/product/full_base.mk里设置PRODUCT_LOCALES := zh_CN

11.隐藏状态栏电量图标
作为开发板,显示电量是没什么太大作用的,所以有时候我们需要隐藏它。想要隐藏电量图标,需要修改两处:
(1) frameworks/base/packages/SystemUI/res/layout/system_icons.xml下把android:id为battery的节点,添加																																															
android:visibility="gone"属性
(2) frameworks/base/packages/SystemUI/src/com/android/systemui/statusbar/policy/BatteryControllerImpl.java类的构造函数,注释掉以下两行:
public BatteryControllerImpl(Context context) {
//......
//registerReceiver();
//updatePowerSave();
}

12. 默认24小时制
(1)在frameworks/base/packages/SettingsProvider/res/values/defaults.xml文件中,将def_time_12_24字段值修改为24
<string name="def_time_12_24" translatable="false">24</string>
(2)frameworks/base/packages/SettingsProvider/src/com/android/providers/settings/DatabaseHelper.java的		
loadSystemSettings方法,添加:
loadStringSetting(stmt, Settings.System.TIME_12_24, R.string.def_time_12_24);

13. 关闭SELiunx
让system/core/init/init.cpp的selinux_is_disabled方法直接返回false

-----------

如何手动关闭ROM里的dm_verity?

注入init elf文件即可

猜你喜欢

转载自blog.csdn.net/ab6326795/article/details/135310158