Dualbootpatcher副系统为android 8.1时无法启动的解决方案

03-22

chenxiaolong终于有消息了,他正在努力适配安卓8,敬请期待
图片发自App

建了一个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

图片发自App

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

需要我们自己添加,如果有了就不用管了。

弄好了之后格式如下:


图片发自App

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
图片发自App

这里我们可以注意到,有一堆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

刷机包处理完毕,剩下的按正常流程刷入即可。

你可能感兴趣的:(Dualbootpatcher副系统为android 8.1时无法启动的解决方案)