From 534c0d0a973b50cb73e7d3b435bdab8a221510ad Mon Sep 17 00:00:00 2001 From: Bjoern Kerler Date: Sat, 27 Nov 2021 19:01:13 +0100 Subject: [PATCH] Add meta boot via payload --- README.md | 9 +++++++++ mtk | 8 ++++++++ mtkclient/Library/meta.py | 1 + mtkclient/Library/mtk_preloader.py | 9 +++++++++ 4 files changed, 27 insertions(+) diff --git a/README.md b/README.md index 0bd5713..4889621 100644 --- a/README.md +++ b/README.md @@ -164,6 +164,15 @@ python mtk reset 10. Disconnect usb cable and enjoy your rooted phone :) +### Boot to meta mode via payload + +Example: + +``` +python mtk payload --metamode FASTBOOT +``` + + ### Unlock bootloader 1. Erase metadata and userdata (and md_udc if existing): diff --git a/mtk b/mtk index 939312f..3bf773d 100755 --- a/mtk +++ b/mtk @@ -627,6 +627,13 @@ class Main(metaclass=LogBase): if self.args.ptype is not None: ptype = self.args.ptype plt.runpayload(filename=payloadfile) + if args.metamode: + mtk.port.run_handshake() + mtk.preloader.jump_bl() + mtk.port.close(reset=True) + meta=META(mtk,loglevel) + if meta.init(metamode=args.metamode, display=True): + self.info(f"Successfully set meta mode : {args.metamode}") mtk.port.close(reset=True) self.close() elif cmd == "gettargetconfig": @@ -1753,6 +1760,7 @@ if __name__ == '__main__': parser_dumppreloader.add_argument('--socid', help='Read Soc ID') parser_payload.add_argument('--payload', type=str, help='Payload filename (optional)') + parser_payload.add_argument('--metamode', type=str, default=None, help='metamode to use '+metamodes) parser_payload.add_argument('--loader', type=str, help='Use specific loader, disable autodetection') parser_payload.add_argument('--filename', help='Optional payload to load') parser_payload.add_argument('--vid', type=str, help='Set usb vendor id used for MTK Preloader') diff --git a/mtkclient/Library/meta.py b/mtkclient/Library/meta.py index b8513ba..4482c3e 100644 --- a/mtkclient/Library/meta.py +++ b/mtkclient/Library/meta.py @@ -67,6 +67,7 @@ class META(metaclass=LogBase): resp = bytearray(EP_IN(maxinsize)) if resp==b"READY": return True + self.warning(resp) else: if cdc.connected: cdc.close() diff --git a/mtkclient/Library/mtk_preloader.py b/mtkclient/Library/mtk_preloader.py index ae54343..d1a509b 100755 --- a/mtkclient/Library/mtk_preloader.py +++ b/mtkclient/Library/mtk_preloader.py @@ -262,6 +262,15 @@ class Preloader(metaclass=LogBase): self.usbread(1) self.usbread(2) + def jump_bl(self): + if self.echo(self.Cmd.JUMP_BL.value): + status = self.rword() + if status <= 0xFF: + status2 = self.rword() + if status <= 0xFF: + return True + return False + def jump_to_partition(self, partitionname): if isinstance(partitionname, str): partitionname = bytes(partitionname, 'utf-8')[:64]