03-22

建了一個(gè)tg群,歡迎py
https://t.me/dualbootpatcher
03-12
今天又試了一下omni,解壓ramdisk之后找不到fstab跟int.qcom,我會(huì)繼續(xù)研究這個(gè)問題
本人小白不懂代碼,都是照葫蘆畫瓢,參考鏈接:
https://github.com/chenxiaolong/DualBootPatcher/issues/845#issuecomment-372010564
有不對(duì)的地方歡迎斧正。目前我只初步測(cè)試了los15.1正常刷入啟動(dòng),但有個(gè)問題就是相機(jī)fc,我不知道問題出在哪里,歡迎大神指點(diǎn)。
準(zhǔn)備工作:
安裝termux
安裝mt文件管理器
安裝magisk
提取boot
打開要刷的ROM,提取出boot.img
然后復(fù)制到
/data/magisk
打開termux
su
cd /data/magisk
解包boot
./magiskboot --upack boot.img
解包之后有兩個(gè)文件需要我我們操作:
ramdisk.cpio 和 dtb
我們先處理ramdisk.cpio
1.解開ramdisk.cpio
./magiskboot --cpio ramdisk.cpio extract
會(huì)有很多文件,不要慌要操作的只有這兩個(gè):
fstab.qcom和int.qcom.rc
(說實(shí)話這個(gè)代碼我不會(huì)用,按理說
./magiskboot --cpio ramdisk.cpio extract fstab.qcom fstab.qcom
可以單獨(dú)解出fstab,但是每次都是全部解壓,不知道問題出在哪,如果有知道的大佬歡迎留言指點(diǎn)一下。)
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

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
需要我們自己添加,如果有了就不用管了。
弄好了之后格式如下:

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.在安卓手機(jī)上裝個(gè)Linux(安裝配置教程略,可以看我的安裝教程)
http://www.itdecent.cn/p/961957ee53d0
2.安裝device-tree-compiler
sudo apt-get install device-tree-compiler
3.解包dtb
(Linux可能讀取不到/data/magisk目錄,可以把dtb文件復(fù)制到sdcard目錄操作,弄完之后再?gòu)?fù)制回去)
dtc -O dts -I dtb -o dt.txt dtb

這里我們可以注意到,有一堆warning,我不知道是啥原因,也不知道相機(jī)無(wú)法啟動(dòng)跟這個(gè)是否有關(guān),但是dt.tx是解出來(lái)了。原教程就是這樣寫的,也沒多說。
4.這時(shí)候在目錄下可以發(fā)現(xiàn)一個(gè)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
打包完成后會(huì)在目錄下生成一個(gè)新文件new_boot.img
把這個(gè)文件替換刷機(jī)包里的boot.img
刷機(jī)包處理完畢,剩下的按正常流程刷入即可。