Skip to content

Commit

Permalink
Improve mt62xx/IoT support
Browse files Browse the repository at this point in the history
  • Loading branch information
bkerler committed Jul 8, 2023
1 parent 6bf9e64 commit 7ac42c2
Show file tree
Hide file tree
Showing 6 changed files with 156 additions and 107 deletions.
39 changes: 28 additions & 11 deletions mtkclient/Library/daconfig.py
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@
from mtkclient.config.brom_config import damodes
from mtkclient.Library.utils import structhelper


class Storage:
MTK_DA_HW_STORAGE_NOR = 0
MTK_DA_HW_STORAGE_NAND = 1
Expand Down Expand Up @@ -80,6 +81,7 @@ class entry_region:
m_start_addr = None
m_start_offset = None
m_sig_len = None

def __init__(self, data):
sh = structhelper(data)
self.m_buf = sh.dword()
Expand All @@ -88,8 +90,13 @@ def __init__(self, data):
self.m_start_offset = sh.dword()
self.m_sig_len = sh.dword()

def __repr__(self):
return f"Buf:{hex(self.m_buf)},Len:{hex(self.m_len)},Addr:{hex(self.m_start_addr)}," + \
f"Offset:{hex(self.m_start_offset)},Sig:{hex(self.m_sig_len)}"


class DA:
def __init__(self,data):
def __init__(self, data):
self.loader = None
sh = structhelper(data)
self.magic = sh.short()
Expand All @@ -110,6 +117,12 @@ def __init__(self,data):
def setfilename(self, loaderfilename: str):
self.loader = loaderfilename

def __repr__(self):
info = f"HWCode:{hex(self.hw_code)},HWSubCode:{hex(self.hw_sub_code)}," + \
f"HWVer:{hex(self.hw_version)},SWVer:{hex(self.sw_version)}"
return info


class DAconfig(metaclass=LogBase):
def __init__(self, mtk, loader=None, preloader=None, loglevel=logging.INFO):
self.__logger = logsetup(self, self.__logger, loglevel, mtk.config.gui)
Expand Down Expand Up @@ -149,7 +162,7 @@ def __init__(self, mtk, loader=None, preloader=None, loglevel=logging.INFO):
if not os.path.exists(loader):
self.warning("Couldn't open " + loader)
else:
self.info("Using custom loader: "+loader)
self.info("Using custom loader: " + loader)
self.parse_da_loader(loader)

def m_extract_emi(self, data):
Expand All @@ -159,12 +172,12 @@ def m_extract_emi(self, data):
data = data[idx:]
mlen = unpack("<I", data[0x20:0x20 + 4])[0]
siglen = unpack("<I", data[0x2C:0x2C + 4])[0]
data = data[:mlen-siglen]
dramsize = unpack("<I",data[-4:])[0]
if dramsize==0:
data = data[:mlen - siglen]
dramsize = unpack("<I", data[-4:])[0]
if dramsize == 0:
data = data[:-0x800]
dramsize = unpack("<I", data[-4:])[0]
data = data[-dramsize-4:-4]
data = data[-dramsize - 4:-4]
bldrstring = b"MTK_BLOADER_INFO_v"
len_bldrstring = len(bldrstring)
idx = data.find(bldrstring)
Expand Down Expand Up @@ -211,7 +224,8 @@ def parse_da_loader(self, loader):
da = DA(bootldr.read(0xDC))
da.setfilename(loader)
if da.hw_code not in self.dasetup:
self.dasetup[da.hw_code] = [da]
if da.hw_code!=0:
self.dasetup[da.hw_code] = [da]
else:
for ldr in self.dasetup[da.hw_code]:
found = False
Expand All @@ -221,7 +235,8 @@ def parse_da_loader(self, loader):
found = True
break
if not found:
self.dasetup[da.hw_code].append(da)
if da.hw_code != 0:
self.dasetup[da.hw_code].append(da)
return True
except Exception as e:
self.error("Couldn't open loader: " + loader + ". Reason: " + str(e))
Expand All @@ -241,11 +256,13 @@ def setup(self):
self.error("No da_loader config set up")
return self.da_loader


if __name__ == "__main__":
from mtkclient.Library.mtk_class import Mtk
from mtkclient.Library.mtk_main import Mtk_Config

config = Mtk_Config(loglevel=logging.INFO, gui=None,
guiprogress=None)
mtkg=Mtk(config=config)
dac=DAconfig(mtk=mtkg)
dac.extract_emi("/home/bjk/Projects/mtkclient_github/preloader_meizu6795_lwt_l1.bin")
mtkg = Mtk(config=config)
dac = DAconfig(mtk=mtkg)
dac.extract_emi("/home/bjk/Projects/mtkclient_github/preloader_meizu6795_lwt_l1.bin")
Loading

0 comments on commit 7ac42c2

Please sign in to comment.