Apply DualBoot with DualBoot Kernel Patcher
This guide will help you build a boot image with uefi/android dualboot feature.
Prepare
- An android device.
- Download
UEFI FDfile from Github Action(You may need to login to download artifacts) or Release Page of uefi repository. Magiskbootfor your environment, there are prebuilt binaries on github.- DualBoot kernel patcher binary and shellcode binaries for your devices from release page or action page.
:::Notice All these steps can be done on your android device. :::
Steps
Assume you have done the following steps on your android device.
- Root your device with magisk.
- Downloaded and installed termux.
- Installed root-repo and tsu in termux with apt.
Get Android Boot Image.
- The boot image usually can be found at
/dev/block/by-name/bootor/dev/block/by-name/boot_a(or _b). - Open your termux, and copy the boot image out for future use.
bashtsu # get root shell mkdir /sdcard/dualboot/ # create a folder to put files. cp /dev/block/by-name/boot /sdcard/dualboot/boot.img # copy to our folder and rename to boot.img. If your device has ab slot, please add _a or _b suffix.- The boot image usually can be found at
Unpack it with magiskboot.
- If your device was rooted by magisk, there should be an magiskboot binary at
/data/adb/magisk/magiskboot - By the way you can press the
tabbutton in termux to automatically fill path, instead of typing the characters one by one. - Do Unpack
bashcd /sdcard/dualboot/ # change working directory to our folder. /data/adb/magisk/magiskboot unpack boot.img # unpack- You will get something like this:
bash/sdcard/dualboot# /data/adb/magisk/magiskboot unpack boot.img Parsing boot image: [boot.img] HEADER_VER [1] KERNEL_SZ [41576325] RAMDISK_SZ [927736] SECOND_SZ [0] RECOV_DTBO_SZ [0] OS_VERSION [9.0.0] OS_PATCH_LEVEL [2021-05] PAGESIZE [4096] NAME [] CMDLINE [console=ttyMSM0,115200n8 earlycon=msm_geni_serial,0xa90000 androidboot.hardware=qcom androidboot.console=ttyMSM0 androidboot.memcg=1 lpm_levels.sleep_disabled=1 video=vfb:640x400,bpp=32,memsize=3072000 msm_rtb.filter=0x237 service_locator.enable=1 swiotlb=2048 firmware_class.path=/vendor/firmware_mnt/image loop.max_part=7 androidboot.usbcontroller=a600000.dwc3 buildvariant=user] CHECKSUM [e73518a6e1edf3062d9cebd3203a51069ef2f424000000000000000000000000] KERNEL_DTB_SZ [3972965] KERNEL_FMT [raw] RAMDISK_FMT [raw] /sdcard/dualboot# ls boot kernel kernel_dtb ramdisk.cpio- If your device was rooted by magisk, there should be an magiskboot binary at
::: TIP Please do not patch a patched kernel. :::
Apply patch with dualboot kernel patcher.
- Assume the patcher and shellcodes and config you downloaded above was saved at
/sdcard/Download/ - Unpack these zips with these cmds, or extract in file manager.
unzip /sdcard/Download/Shellcodes.zip unzip /sdcard/Download/DualBootKernelPatcher-Linux-arm64.zip unzip /sdcard/Download/Config.zip- Give permission to dualboot kernel patcher
bashmv DualBootKernelPatcher ~/ chmod +x ~/DualBootKernelPatcher- Patch kernel with a shellcode.
bash./DualBootKernelPatcher /sdcard/dualboot/patched_kernel <Path-to>/SM8150_EFI.fd /sdcard/dualboot/kernel <Path-To>/Config/DualBoot.Sm8150.cfg <Path-To>/ShellCode.XXXX.bin- Repack boot image with patched kernel
bashcd /sdcard/dualboot/ mv patched_kernel kernel /data/adb/magisk/magiskboot repack boot.img- You will get a file named
new-boot.imgif magiskboot success.
- Assume the patcher and shellcodes and config you downloaded above was saved at
Test with fastboot.
- Send
new-boot.imgto your computer:
powershelladb pull /sdcard/dualboot/new-boot.img- Reboot to fastboot
powershelladb reboot bootloader- Ensure OS-switch is on the correct state before it loading. Like magnet shell or tri-state key.
- Try load boot image once.
powershellfastboot boot new-boot.img- See if the device is entering a correct os.
- Send
Flash boot image into disk
- If everything goes well and boot image was backuped. You can flash boot image into disk now. Then no fastboot command is required when using dualboot.
- Flash boot:
powershellfastboot flash boot new-boot.imgRecover original boot image:
- If you want to remove dualboot, flash your backuped boot image.
powershellfastboot flash boot.img
Remove dualboot
Run DualBootPatchRemover on the patched kernel and rebuild the boot image. After flashing to boot parition the dualboot feature will disappear.