03-22
建了一个tg群,欢迎py
https://t.me/dualbootpatcher
03-12
今天又试了一下omni,解压ramdisk之后找不到fstab跟int.qcom,我会继续研究这个问题
本人小白不懂代码,都是照葫芦画瓢,参考链接:
https://github.com/chenxiaolong/DualBootPatcher/issues/845#issuecomment-372010564
有不对的地方欢迎斧正。目前我只初步测试了los15.1正常刷入启动,但有个问题就是相机fc,我不知道问题出在哪里,欢迎大神指点。
准备工作:
安装termux
安装mt文件管理器
安装magisk
提取boot
打开要刷的ROM,提取出boot.img
然后复制到
/data/magisk
打开termux
su
cd /data/magisk
解包boot
./magiskboot --upack boot.img
解包之后有两个文件需要我我们操作:
ramdisk.cpio 和 dtb
我们先处理ramdisk.cpio
1.解开ramdisk.cpio
./magiskboot --cpio ramdisk.cpio extract
会有很多文件,不要慌要操作的只有这两个:
fstab.qcom和int.qcom.rc
(说实话这个代码我不会用,按理说
./magiskboot --cpio ramdisk.cpio extract fstab.qcom fstab.qcom
可以单独解出fstab,但是每次都是全部解压,不知道问题出在哪,如果有知道的大佬欢迎留言指点一下。)
2.用mt管理器打开fstab.qcom
加入这行代码,保存退出
/dev/block/bootdevice/by-name/system /system ext4 ro,barrier=1,discard wait
弄好之后格式如下:
/dev/block/bootdevice/by-name/system /system ext4 ro,barrier=1,discard wait
/dev/block/bootdevice/by-name/boot /boot emmc defaults defaults
/dev/block/bootdevice/by-name/recovery /recovery emmc defaults defaults
/dev/block/bootdevice/by-name/userdata /data f2fs nosuid,nodev,noatime,discard,nodiratime wait,check,encryptable=footer,formattable,length=-16384
/dev/block/bootdevice/by-name/userdata /data ext4 nosuid,nodev,noatime,barrier=1,noauto_da_alloc wait,check,encryptable=footer,formattable,length=-16384
/dev/block/bootdevice/by-name/cache /cache f2fs nosuid,nodev,noatime,inline_xattr,flush_merge,data_flush wait,check,formattable
/dev/block/bootdevice/by-name/cache /cache ext4 nosuid,nodev,noatime,barrier=1 wait,check,formattable
/dev/block/bootdevice/by-name/persist /persist ext4 nosuid,nodev,barrier=1 wait
/dev/block/bootdevice/by-name/dsp /dsp ext4 ro,nosuid,nodev,barrier=1 wait
/dev/block/bootdevice/by-name/modem /firmware vfat ro,shortname=lower,uid=1000,gid=1000,dmask=227,fmask=337,context=u:object_r:firmware_file:s0 wait
/dev/block/bootdevice/by-name/bluetooth /bt_firmware vfat ro,shortname=lower,uid=1002,gid=3002,dmask=222,fmask=333,context=u:object_r:bt_firmware_file:s0 wait
/dev/block/bootdevice/by-name/misc /misc emmc defaults defaults
Dualbootpatcher副系统为android 8.1时无法启动的解决方案
3.用mt管理器打开int.qcom.rc
找到这一段代码:
onfs
wait/dev/block/platform/soc/${ro.boot.bootdevice}
symlink/dev/block/platform/soc/${ro.boot.bootdevice}/dev/block/bootdevice
mount_allfstab.qcom
swapon_allfstab.qcom
有些ROM没有最后两行
mount_all fstab.qcom
swapon_all fstab.qcom
需要我们自己添加,如果有了就不用管了。
弄好了之后格式如下:
Dualbootpatcher副系统为android 8.1时无法启动的解决方案
4.把fstab.qcom和int.qcom.rc打包回ramdisk.cpio
./magiskboot --cpio ramdisk.cpio 'add 0640 fstab.qcom fstab.qcom' 'add 0640 init.qcom.rc init.qcom.rc'
第二步:处理dtb
1.在安卓手机上装个Linux(安装配置教程略,可以看我的安装教程)
https://www.jianshu.com/p/961957ee53d0
2.安装device-tree-compiler
sudo apt-get install device-tree-compiler
3.解包dtb
(Linux可能读取不到/data/magisk目录,可以把dtb文件复制到sdcard目录操作,弄完之后再复制回去)
dtc -O dts -I dtb -o dt.txt dtb
Dualbootpatcher副系统为android 8.1时无法启动的解决方案
这里我们可以注意到,有一堆warning,我不知道是啥原因,也不知道相机无法启动跟这个是否有关,但是dt.tx是解出来了。原教程就是这样写的,也没多说。
4.这时候在目录下可以发现一个dt.txt文件,打开找到如下代码:
firmware {
android {
compatible = "android,firmware";
fstab {
compatible = "android,fstab";
system {
compatible = "android,system";
dev = "/dev/block/platform/soc.0/f9824900.sdhci/by-name/system";
type = "ext4";
mnt_flags = "ro,barrier=1,inode_readahead_blks=8";
fsmgr_flags = "wait,verify";
};
};
};
};
把这段代码删掉
5.把dt.txt打包回dtb
dtc -O dtb -I dts -o dtb dt.txt
最后一步打包boot
./magiskboot --repack boot.img
打包完成后会在目录下生成一个新文件new_boot.img
把这个文件替换刷机包里的boot.img
刷机包处理完毕,剩下的按正常流程刷入即可。
网友评论