Huawei firmware scanner & ramdisk direct download [python3][script] - Other Tools & General Discussion
Download directly the recovery_ramdisk image needed for Magisk, the system or any other image from the Huawei official website with proper CRC checking.
Scan and show details about latest firmwares for your device.
Usage examples :
-> To download only the recovery_ramdisk for magisk and the kernel images on the Mediapad M5 Pro's current firmware (update.hicloud.com/TDS/data/files/p3/s15/G3776/g1699/v252687/f1/full/filelist.xml) :
python3 script.py 3776 1699 252687 1 recovery_ramdisk kernel
-> To scan or check for latest Huawei Firmwares in the ranges /G3776/ ; /g1699/ ; /v260000/ to /v280000/ ; /f1/ :
replace first lines 1-10 with :
Code:
# mgg is the scan range for G : /G3776/
mgg = [3776, 3776]
# mg is the scan range for g : /g1699/
mg = [1699, 1699]
# mv is the scan range for v : /v252687/
mv = [260000, 280000]
# mf is the scan range for f : /f1/
mf = [1, 1]
Install :
install python3
pip3 install requests crcmod
Script :
Code:
# e.g. : http://update.hicloud.com:8180/TDS/data/files/p3/s15/G3776/g1699/v252687/f1/full/filelist.xml
# mgg is the scan range for G : /G3776/
mgg = [3776, 3776]
# mg is the scan range for g : /g1699/
mg = [1699, 1699]
# mv is the scan range for v : /v252687/
mv = [200000, 300000]
# mf is the scan range for f : /f1/
mf = [1, 1]
# the more threads the heavier the upload
NumberOfThreads=20
# dig +short update.hicloud.com
updatehost="update.hicloud.com"
updateServerAddressList=[
"211.152.136.73",
"211.152.136.75",
"211.152.136.30",
"211.152.137.18",
"211.152.137.14",
"211.152.137.16",
"211.152.136.11",
"211.152.136.74",
"211.152.137.15",
"211.152.136.76",
"211.152.136.29",
"211.152.136.41",
"211.152.137.17",
]
#updatehost="update.dbankcdn.com"
# dig +short update.dbankcdn.com
#updateServerAddressList=[
#"152.195.132.192",
#]
directDownloadHost = "update.dbankcdn.com"
# dig +short query.hicloud.com
queryServerAddress="80.158.19.121"
# RSA : IMEI
myIMEI=""
# look for the image inside following *.APP (UPDATE.APP, USERDATA.APP, PTABLE.APP)
LookForFirmwareInsideAPP = "UPDATE.APP"
'''
sort -r scanfound.html > result.tmp ; echo "<html><head><style>table { font-family: Sans-Serif; white-space: nowrap; font-size:9px; border-collapse: separate; border-spacing: 10px 0px;}</style></head><body><table>`cat result.tmp`</table></body></html>" > result.html ; rm result.tmp ; firefox result.html
'''
import time
import requests
import sys
import threading
import queue
import random
import json
import re
import os
import base64
import io
import struct
import datetime
import zlib
import crcmod
'''
latest valid version for device http://query.hicloud.com:80/sp_ard_common/v1/onestopCheck.action?verType=true
QueryServerURL http://query.hicloud.com:80/sp_ard_common/v2/Check.action?latest=true
RetrieveAuthInfoURL http://query.hicloud.com:80/sp_ard_common/v1/authorize.action
ReportStatusURL http://query.hicloud.com:80/sp_ard_common/v2/UpdateReport.action
'''
def getauthorizeaction(s, versionId):
headers1 = {
'User-Agent': useragent,
'Host' : "query.hicloud.com",
'Accept': 'application/json; charset=UTF-8',
'X-Requested-With': 'XMLHttpRequest',
'Connection': 'keep-alive'
}
url1="http://"+queryServerAddress+"/sp_ard_common/v1/authorize.action"
data1={
"deviceId" : "null",
"imei" : myIMEI,
"updateToken" : "null",
"vendor" : "null",
"ver" : "1",
"version" : [
{
"versionId" : versionId,
}
]
}
payload = json.dumps(data1)
while True :
try:
r = s.post(url=url1, data=payload, headers=headers1, allow_redirects=False, timeout=6)
if r.status_code == 200 :
reponse=str(r.content, encoding="utf-8")
rep=re.fullmatch(r'data=(.*?)&sign=(.*?)&cert=(.*?)', reponse)
if rep is not None :
dataout={
"data" : json.loads(base64.b64decode(rep.group(1))),
"sign" : base64.b64decode(rep.group(2)),
"cert" : base64.b64decode(rep.group(3))
}
return dataout
except Exception as e:
print("getauthorizeaction error : "+str(e))
time.sleep(1)
mystartbytes = 187
mymagicnum = "187"
myunknown = "187"
myunlockcode = "187"
def extractimg(source, outdir) :
global mymagicnum, myunknown, myunlockcode, downloadramdisk, mystartbytes
sourcel = source.tell()
source.seek(0)
i = 0
if sourcel < 20 :
return None, 0, 20
startbytes = source.read(4)
i += 4
hasstartbytes = False
while startbytes == b'\x00\x00\x00\x00' :
hasstartbytes = True
startbytes = source.read(4)
i += 4
if hasstartbytes and mystartbytes != int(i/4) :
mystartbytes = int(i/4)
print("Start Bytes : " + str(b'\x00\x00\x00\x00') + " * " + str(int(i/4)))
magicnum = startbytes
while True :
if not magicnum :
break
if magicnum != mymagicnum :
mymagicnum = magicnum
print("Magic Number : " + str(magicnum))
j = i-4
headersize = list(struct.unpack('<L', source.read(4)))[0]
if j + headersize > sourcel :
return None, j, j + headersize + 20
i += 4
unknown = source.read(4)
if unknown != myunknown :
myunknown = unknown
print("Unkown : " + str(unknown))
i += 4
unlockcode = source.read(8)
if unlockcode != myunlockcode :
myunlockcode = unlockcode
print("Unlockcode : " + str(unlockcode))
i += 8
moduleid = list(struct.unpack('<L', source.read(4)))[0]
i += 4
filesize = list(struct.unpack('<L', source.read(4)))[0]
if j + headersize + filesize > sourcel :
return None, j, j + headersize + filesize + 20
i += 4
date = str(source.read(16), encoding='utf-8').rstrip('\x00')
date = re.sub(r'(\d\d\d\d)\.(\d\d)\.(\d\d)', r'\3/\2/\1', date)
i += 16
time = str(source.read(16), encoding='utf-8').rstrip('\x00')
time = re.sub(r'(\d\d)\.(\d\d)\.(\d\d)', r'\1:\2:\3', time)
i += 16
filename = str(source.read(32), encoding='utf-8').rstrip('\x00').lower()
i += 32
headercsum = source.read(2)
i += 2
blocksize = list(struct.unpack('<H', source.read(2)))[0]
i += 2
blank2 = source.read(2)
if blank2 != b'\x00\x00' :
print("blank2 = " % (blank2))
i += 2
crcdatasize = headersize - (i-j)
crcdata = source.read(crcdatasize)
i+=crcdatasize
if len(downloadramdisk) == 0 :
if filename == "sha256rsa" :
return date, j, 0
else :
crcgood = "success : calculated CRC does match Huawei's"
with open(outdir+os.sep+filename+'.img', 'wb') as out :
s = 0
c = 0
readl = 4096
while s < filesize :
if s + readl > filesize :
readl = filesize - s
readdata = source.read(readl)
i += readl
crcv = crc(readdata)
if crcdata[c] != (crcv & 0xff) or crcdata[c+1] != ((crcv>>8) & 0xff) :
crcgood = "ERROR : calculated CRC does not match Huawei's"
out.write(readdata)
c += 2
s += 4096
print("%12d header %12d file %12d %32s %12s %8s %8x %4d %s" % (i-filesize-headersize, headersize, filesize, filename, date, time, moduleid, blocksize, crcgood))
if len(downloadramdisk) > 0 :
if filename in downloadramdisk :
downloadramdisk.remove(filename)
print(filename + " checked and saved as "+outdir+os.sep+filename+'.img')
if len(downloadramdisk) == 0 :
return date, j, 0
alignment_padding = (4 - i % 4) % 4
if alignment_padding :
source.seek(alignment_padding, 1)
i += alignment_padding
if i+4 > sourcel :
return date, i, 0
magicnum = source.read(4)
i += 4
return "2015", 0, 0
def downloadonlypartofzip(s, page, fich, debut, fin, appname) :
url1="http://"+directDownloadHost+"/TDS/data/files/p3/s15/G"+str(page[0])+"/g"+str(page[1])+"/v"+str(page[2])+"/f"+str(page[3])+"/full/"+fich
headers1 = {
'Host' : directDownloadHost,
'User-Agent': useragent,
'Connection': 'keep-alive',
'Range': 'bytes='+str(debut)+'-'+str(fin),
}
outdir = ""
if len(downloadramdisk) > 0 :
outdir = "G"+str(page[0])+"_g"+str(page[1])+"_v"+str(page[2])+"_f"+str(page[3])+os.sep+fich.replace("/", " ")+os.sep+appname
os.makedirs(outdir, exist_ok=True)
status = -1
while True :
status=0
filebytesl=0
r = None
try :
r = s.get(url=url1, headers=headers1, allow_redirects=False, stream=True, timeout=60)
status = r.status_code
except Exception as e :
print("\n downloadonlypartofzip erreur : "+str(e)+" : "+url1)
if status == 206 :
needminimum = 8192
r.raw.decode_content = True
z = zlib.decompressobj(wbits=-zlib.MAX_WBITS)
cherchencore = True
oltime = time.time()
fout = None
if len(downloadramdisk) > 0 :
fout = open("removethis.tmp", "w+b")
else :
fout = io.BytesIO(b'')
while cherchencore :
buf = z.unconsumed_tail
if buf == b'' :
buf = r.raw.read(8192)
if buf == b'' :
cherchencore = False
extr = z.decompress(buf)
if extr == b'':
cherchencore = False
fout.write(extr)
currentpos = fout.tell()
if time.time() - oltime > 1 :
oltime = time.time()
print("%10.1f MB < %.1f MB needed" % (currentpos/1000000.0, needminimum/1000000.0), end="\r")
if currentpos >= needminimum or not cherchencore :
foundit, stripuntil, needminimum = extractimg(fout, outdir)
if foundit is not None :
if len(downloadramdisk) == 0 :
fout.close()
return foundit
else :
fout.close()
return foundit
fout.seek(stripuntil)
if len(downloadramdisk) > 0 :
fout2 = open("removethis2.tmp", "w+b")
else :
fout2 = io.BytesIO(b'')
fout2.write(fout.read())
fout.close()
fout2.seek(0)
if len(downloadramdisk) > 0 :
fout = open("removethis.tmp", "w+b")
else :
fout = io.BytesIO(b'')
fout.write(fout2.read())
fout2.close()
fout.close()
time.sleep(1)
def getzipfilelist(s, page, fich, debut, fin):
updateServerAddress = updateServerAddressList[random.randint(0, len(updateServerAddressList)-1)]
url1="http://"+updateServerAddress+"/TDS/data/files/p3/s15/G"+str(page[0])+"/g"+str(page[1])+"/v"+str(page[2])+"/f"+str(page[3])+"/full/"+fich
headers1 = {
'Host' : updatehost,
'User-Agent': useragent,
'Connection': 'keep-alive',
'Range': 'bytes='+str(debut)+'-'+str(fin),
}
status = -1
while True :
status=0
filebytes=b''
filebytesl=0
try :
r = s.get(url=url1, headers=headers1, allow_redirects=False, stream=True, timeout=6)
status = r.status_code
if status == 206 :
for chunk in r.iter_content(chunk_size=8192) :
if chunk : # filter out keep-alive new chunks
filebytes += chunk
except Exception as e :
print("\n getzipfilelist erreur : "+str(e)+" : "+url1)
if status == 206 :
filezipdata={
"realdate" : "",
"version" : "",
"tag" : ""
}
i = 0
filebytesl = len(filebytes) - 1
while i < filebytesl :
compressionmethod = list(struct.unpack('<H', filebytes[i+10:i+10+2]))[0]
lastmodifdate = list(struct.unpack('<H', filebytes[i+14:i+14+2]))[0]
lastmodifdate = "%02d/%02d/%04d" % ((lastmodifdate>>11), (lastmodifdate>>7)&0b1111, 6+1980+(lastmodifdate&0b1111111))
compressedsize = list(struct.unpack('<L', filebytes[i+20:i+20+4]))[0]
uncompressedsize = list(struct.unpack('<L', filebytes[i+24:i+24+4]))[0]
filenamelength = list(struct.unpack('<H', filebytes[i+28:i+28+2]))[0]
extrafieldlength = list(struct.unpack('<H', filebytes[i+30:i+30+2]))[0]
filecommentlength = list(struct.unpack('<H', filebytes[i+32:i+32+2]))[0]
relativeoffset = list(struct.unpack('<L', filebytes[i+42:i+42+4]))[0]
filename = str(filebytes[i+46:i+46+filenamelength], encoding="utf-8").rstrip('\x00')
extrafield = filebytes[i+46+filenamelength:i+46+filenamelength+extrafieldlength]
filecomment = filebytes[i+46+filenamelength+extrafieldlength:i+46+filenamelength+extrafieldlength+filecommentlength]
#print("%s : %s ; uncompressed %d ; compressed %d ; offset %d" % (str(filename), lastmodifdate, uncompressedsize, compressedsize, relativeoffset))
if compressionmethod == 0 :
if uncompressedsize > 0 :
if filename == "VERSION.mbn" :
myversion = getfilecontent(s, page, fich, relativeoffset+30+filenamelength, relativeoffset+30+filenamelength+uncompressedsize-1)
myversion = str(myversion, encoding="utf-8").rstrip('\x00')
if len(myversion) > 0 :
if myversion[-1]=='\n' :
myversion = myversion[:-1]
filezipdata["version"] = myversion
elif filename == "UPT_VER.tag" :
prg=0
elif filename.endswith(".tag") :
mytag = getfilecontent(s, page, fich, relativeoffset+30+filenamelength, relativeoffset+30+filenamelength+uncompressedsize-1)
mytag = str(mytag, encoding="utf-8").rstrip('\x00')
if len(mytag) > 0 :
if mytag[-1]=='\n' :
mytag = mytag[:-1]
filezipdata["tag"] += mytag.lower() + " "
elif compressionmethod == 8 :
if filename == LookForFirmwareInsideAPP :
filezipdata["realdate"] = downloadonlypartofzip(s, page, fich, relativeoffset+30+filenamelength, relativeoffset+30+filenamelength+compressedsize-1, filename)
elif downloadeverything and filename.endswith(".APP") :
downloadonlypartofzip(s, page, fich, relativeoffset+30+filenamelength, relativeoffset+30+filenamelength+compressedsize-1, filename)
else :
print("new compression method : %d" % ())
i +=46+filenamelength+extrafieldlength+filecommentlength
return filezipdata
time.sleep(1)
def getfilecontent(s, page, fich, debut, fin):
updateServerAddress = updateServerAddressList[random.randint(0, len(updateServerAddressList)-1)]
url1="http://"+updateServerAddress+"/TDS/data/files/p3/s15/G"+str(page[0])+"/g"+str(page[1])+"/v"+str(page[2])+"/f"+str(page[3])+"/full/"+fich
headers1 = {
'Host' : updatehost,
'User-Agent': useragent,
'Connection': 'keep-alive',
'Range': 'bytes='+str(debut)+'-'+str(fin),
}
status = -1
while True :
status=0
filebytes=b''
filebytesl=0
try :
r = s.get(url=url1, headers=headers1, allow_redirects=False, stream=True, timeout=6)
status = r.status_code
if status == 206 :
for chunk in r.iter_content(chunk_size=8192) :
if chunk :
filebytes += chunk
except Exception as e :
print("\n getfilecontent erreur : "+str(e)+" : "+url1)
if status == 206 :
return filebytes
time.sleep(1)
def getzipinfo(s, page, fich, fichtaille):
updateServerAddress = updateServerAddressList[random.randint(0, len(updateServerAddressList)-1)]
url1="http://"+updateServerAddress+"/TDS/data/files/p3/s15/G"+str(page[0])+"/g"+str(page[1])+"/v"+str(page[2])+"/f"+str(page[3])+"/full/"+fich
fin = int(fichtaille)
debut = fin - 8192
headers1 = {
'Host' : updatehost,
'User-Agent': useragent,
'Connection': 'keep-alive',
'Range': 'bytes='+str(debut)+'-'+str(fin),
}
status = -1
while True :
status=0
filebytes=b''
filebytesl=0
texte=""
try :
r = s.get(url=url1, headers=headers1, allow_redirects=False, stream=True, timeout=6)
status = r.status_code
if status == 206 :
for chunk in r.iter_content(chunk_size=8192) :
if chunk :
filebytes += chunk
except Exception as e :
print("\n getzipinfo erreur : "+str(e)+" : "+url1)
if status == 206 :
filebytesl = len(filebytes) - 4
eocd = -1
i = 0
while i < filebytesl :
if filebytes[i:i+4] == b'PK\05\06' :
eocd = i
i += 4
i += 1
if eocd != -1 :
cdfh = list(struct.unpack('<L', filebytes[eocd+16:eocd+16+4]))[0]
cdfhl = list(struct.unpack('<L', filebytes[eocd+12:eocd+12+4]))[0]
return getzipfilelist(s, page, fich, cdfh, cdfh+cdfhl)
return []
time.sleep(1)
def getsechtml(s, page, fich):
updateServerAddress = updateServerAddressList[random.randint(0, len(updateServerAddressList)-1)]
url1="http://"+updateServerAddress+"/TDS/data/files/p3/s15/G"+str(page[0])+"/g"+str(page[1])+"/v"+str(page[2])+"/f"+str(page[3])+"/full/"+fich
headers1 = {
'Host' : updatehost,
'User-Agent': useragent,
'Connection': 'keep-alive'
}
status = -1
while True :
status=0
texte=""
try :
r = s.get(url=url1, headers=headers1, allow_redirects=False, timeout=6)
status = r.status_code
if status == 200 :
texte = str(r.content, encoding="utf-8")
except Exception as e :
print("\n getsechtml erreur : "+str(e)+" : "+url1)
if status == 200 :
version=re.search(r'<component .*?version=\"(.*?)\"/>', texte)
if version is not None :
version=version.group(1)
else :
version=""
language=re.search(r'<default-language name="(.*?)\"', texte)
if language is not None :
language=language.group(1)
else :
print(texte[:200])
language=""
return version, language
time.sleep(1)
def gethtml(s, page, fich):
updateServerAddress = updateServerAddressList[random.randint(0, len(updateServerAddressList)-1)]
url1="http://"+updateServerAddress+"/TDS/data/files/p3/s15/G"+str(page[0])+"/g"+str(page[1])+"/v"+str(page[2])+"/f"+str(page[3])+"/full/"+fich
headers1 = {
'Host' : updatehost,
'User-Agent': useragent,
'Connection': 'keep-alive'
}
status = -1
while True :
status=0
texte=""
try:
r = s.get(url=url1, headers=headers1, allow_redirects=False, timeout=6)
status = r.status_code
if status == 200 :
texte = str(r.content, encoding="utf-8")
except Exception as e :
print("\n gethtml erreur : "+str(e)+" : "+url1)
if status == 200 :
maxStashInfo=re.search(r'<maxStashInfo>(.*?)</maxStashInfo>', texte)
if maxStashInfo is not None :
maxStashInfo=maxStashInfo.group(1)
else :
maxStashInfo = ""
partitionName=re.search(r'<partitionName>(.*?)</partitionName>', texte)
if partitionName is not None :
partitionName=partitionName.group(1)
else :
partitionName = ""
value = re.search(r'<value>(.*?)</value>', texte)
if value is not None :
value = value.group(1)
else :
value = ""
packagetype=re.search(r'<packagetype>(.*?)</packagetype>', texte)
if packagetype is not None :
packagetype=packagetype.group(1)
else :
packagetype = ""
fileinfo=re.finditer(r'<file>.*?<spath>(.*?)</spath>.*?<md5>(.*?)</md5>.*?<size>(.*?)</size>.*?</file>', texte, re.S)
listefichier={}
for info in fileinfo :
zipname=info.group(1)
if zipname.endswith(".zip") :
listefichier[zipname]={"md5" : info.group(2) , "size" : info.group(3)}
vendorinfo=re.finditer(r'<vendorInfo (.*?)>', texte)
version=""
language=""
for info in vendorinfo :
info = info.group(1)
vendoritem=re.finditer(r'([^ =]+)=\"(.*?)\"', info)
listevendorinfodata={"logfile":"", "name":"", "newData":"", "package":""}
for vendordata in vendoritem :
listevendorinfodata[vendordata.group(1)]=vendordata.group(2)
logfilelen=len(listevendorinfodata["logfile"])
logfile=listevendorinfodata["logfile"]
subpath=listevendorinfodata["subpath"]
if len(subpath) > 0 :
logfile = subpath+"/"+logfile
listevendorinfodata["logfile"] = logfile
if listevendorinfodata["package"] in listefichier :
for vendordata in listevendorinfodata :
listefichier[listevendorinfodata["package"]][vendordata] = listevendorinfodata[vendordata]
if vendordata == "package" :
if len(subpath) > 0 :
listefichier[listevendorinfodata["package"]][vendordata] = subpath+"/"+listevendorinfodata[vendordata]
if logfilelen > 0 :
version, language = getsechtml(s, page, logfile)
authorized = getauthorizeaction(s, str(page[2]))
approvedstatus=""
versionNumber=""
if authorized["data"]["approvedVersionList"][0]["status"] == "0" :
versionNumber=authorized["data"]["approvedVersionList"][0]["versionNumber"]
approvedstatus="approved"
else :
versionNumber=""
approvedstatus=""
zipinfo = {}
for fichier in listefichier :
zipinfo[fichier] = getzipinfo(s, page, listefichier[fichier]["package"], listefichier[fichier]["size"])
with lock :
with open("scanfound.html", "a") as hout :
with open("scanfound.txt", "a") as fout :
mybaseaddress = "http://update.hicloud.com/TDS/data/files/p3/s15/G"+str(page[0])+"/g"+str(page[1])+"/v"+str(page[2])+"/f"+str(page[3])+"/full/"
strung = "%83s " % (mybaseaddress)
strong = "<tr><td><a href='"+mybaseaddress+"filelist.xml'>G"+str(page[0])+"/g"+str(page[1])+"/v"+str(page[2])+"/f"+str(page[3])+"/"+"</a></td>"
print(strung)
fout.write(strung)
hout.write(strong)
strung = "%65s %45s %15s %15s %15s %20s " % (
version,
versionNumber,
packagetype,
partitionName,
approvedstatus,
"size "+value
)
strong = "<td>%s</td><td>%s</td><td>%s</td><td>%s</td><td>%s</td><td>%s</td>" % (
version,
versionNumber,
packagetype,
partitionName,
approvedstatus,
"size "+value
)
print(strung)
fout.write(strung)
hout.write(strong)
premier=True
for fichier in listefichier :
if premier :
strung = "%16s %45s " % (zipinfo[fichier]["realdate"], zipinfo[fichier]["version"])
strong = "<td>%s</td><td>%s</td>" % (zipinfo[fichier]["realdate"], zipinfo[fichier]["version"])
print(strung)
fout.write(strung)
hout.write(strong)
strung = "( %30s %65s %20s %40s %55s %20s %62s ) " % (
listefichier[fichier]["name"],
listefichier[fichier]["package"],
"size "+listefichier[fichier]["size"],
"md5 "+listefichier[fichier]["md5"],
listefichier[fichier]["logfile"],
"newData "+listefichier[fichier]["newData"],
zipinfo[fichier]["tag"]
)
strong = "<td>(</td><td>%s</td><td>%s</td><td>%s</td><td>%s</td><td>%s</td><td>%s</td><td>%s</td><td>)</td>" % (
listefichier[fichier]["name"],
"<a href='"+mybaseaddress+listefichier[fichier]["package"]+"'>"+listefichier[fichier]["package"]+"</a>",
"size "+listefichier[fichier]["size"],
"md5 "+listefichier[fichier]["md5"],
"<a href='"+mybaseaddress+listefichier[fichier]["logfile"]+"'>"+listefichier[fichier]["logfile"]+"</a>",
"newData "+listefichier[fichier]["newData"],
zipinfo[fichier]["tag"]
)
print(strung)
fout.write(strung)
hout.write(strong)
if premier :
strung = " %10s %35s " % (language, "maxStashInfo "+maxStashInfo)
strong = "<td>%10s</td><td>%s</td>" % (language, "maxStashInfo "+maxStashInfo)
print(strung)
fout.write(strung)
hout.write(strong)
if premier :
premier=False
fout.write("\n")
hout.write("</tr>\n")
return status
time.sleep(1)
def gethtmlcode(s, page, fich) :
updateServerAddress = updateServerAddressList[random.randint(0, len(updateServerAddressList)-1)]
url1="http://"+updateServerAddress+"/TDS/data/files/p3/s15/G"+str(page[0])+"/g"+str(page[1])+"/v"+str(page[2])+"/f"+str(page[3])+"/full/"+fich
headers1 = {
'Host' : updatehost,
'User-Agent': useragent,
'Connection': 'keep-alive'
}
while True :
status = 0
try :
r = s.get(url=url1, headers=headers1, allow_redirects=False, timeout=6)
status = r.status_code
except Exception as e :
with lock :
print(".", end="")
if status == 200 :
gethtml(s, page, fich)
return status
elif status == 404 :
return status
time.sleep(1)
def worker() :
global cpt, lastcheck
while True :
page=q.get()
cpt+=1
result = 0
s = requests.Session()
result = gethtmlcode(s, page, "filelist.xml")
s.close()
if result is None :
with lock :
print("\nerreur avec : "+url)
elif result == 200 :
with lock :
print("\nfound : %8d %8d %8d %8d " % (page[0], page[1], page[2], page[3]))
if time.time() - lastcheck > 2 :
lastcheck = time.time()
with lock :
print("%6d : %8d %8d %8d %8d " % (cpt, page[0], page[1], page[2], page[3]), end="\r")
q.task_done()
s.close()
downloadeverything = False
downloadramdisk = []
sysargvl = len(sys.argv)
if sysargvl >= 5 :
NumberOfThreads = 1
mgg[0] = int(sys.argv[1])
mgg[1] = mgg[0]
mg[0] = int(sys.argv[2])
mg[1] = mg[0]
mv[0] = int(sys.argv[3])
mv[1] = mv[0]
mf[0] = int(sys.argv[4])
mf[1] = mf[0]
if sysargvl > 5 :
for k in range(5, sysargvl, 1) :
downloadramdisk.append(sys.argv[k])
print("download image : "+str(downloadramdisk))
else :
downloadeverything = True
downloadramdisk = ["thisfirmwaredoesntexist"]
print("download and extract everything")
cpt = 0
lastcheck=time.time()
useragent="HwOUCDownloadManager"
lock = threading.Lock()
crc = crcmod.mkCrcFun(0x11021, initCrc=0x0000, xorOut=0xFFFF)
q = queue.Queue()
for i in range(NumberOfThreads) :
t = threading.Thread(target=worker)
t.daemon = True
t.start()
moncpt=0
for ngg in range(mgg[0], 1+mgg[1], 1) :
for ng in range(mg[0], 1+mg[1], 1) :
for nv in range(mv[0], 1+mv[1], 1) :
for nf in range(mf[0], 1+mf[1], 1) :
moncpt+=1
q.put([ngg, ng, nv, nf])
while moncpt > cpt+NumberOfThreads*2 :
# speed & ram limit
time.sleep(0.2)
q.join()
if os.path.exists('removethis.tmp') :
os.remove('removethis.tmp')
if os.path.exists('removethis2.tmp') :
os.remove('removethis2.tmp')
scan output examples
Code:
G3776/g1699/v269667/f1/full/ CMR-LGRP2-OVS 9.0.1.190 full system size 7289700352 31/05/2019 CMR-LGRP2-OVS 9.0.1.190 ota_package_basepkg full_basepkg1 ( base update_full_base.zip size 3461734912 md5 D077E081963D2468EEA15A9F2F815FFE changelog_base.xml newData ) en-us maxStashInfo 52428800
G3776/g1699/v269666/f1/full/ CMR-LGRP2-OVS 9.0.1.190 increment system size 7289700352 31/05/2019 CMR-LGRP2-OVS 9.0.1.190 ota_package_basepkg full_base_datapkg ( base update_base.zip size 221550478 md5 F795354A07AFDAF4CA3B40E5FF759735 changelog_base.xml newData ) en-us maxStashInfo 614690816
G3776/g1699/v267133/f1/full/ CMR-LGRP3-CHN 9.0.1.180 full system size 6098518016 27/05/2019 CMR-LGRP3-CHN 9.0.1.180 ota_package_basepkg full_basepkg1 ( base update_full_base.zip size 3152883595 md5 6589C91649EE087AA2F8904B955E794C changelog_base.xml newData ) en-us maxStashInfo 52428800
G3776/g1699/v267132/f1/full/ CMR-LGRP3-CHN 9.0.1.180 increment system size 6098518016 27/05/2019 CMR-LGRP3-CHN 9.0.1.180 ota_package_basepkg full_base_datapkg ( base update_base.zip size 183785754 md5 37EA74F09026CFD0DF8E0D4DC90BBD75 changelog_base.xml newData ) en-us maxStashInfo 554369024
G3776/g1699/v264701/f1/full/ CMR-LGRP3-OVS 9.0.1.188 increment system size 7289700352 20/05/2019 CMR-LGRP3-OVS 9.0.1.188 ota_package_basepkg full_base_datapkg ( base update_base.zip size 184531256 md5 7C419C83A173511C79B6773B4229E991 changelog_base.xml newData ) en-us maxStashInfo 647573504
G3776/g1699/v264700/f1/full/ CMR-LGRP3-OVS 9.0.1.188 full system size 7289700352 20/05/2019 CMR-LGRP3-OVS 9.0.1.188 ota_package_basepkg full_basepkg1 ( base update_full_base.zip size 3431797280 md5 EB4ECBC46DAD5AAE59C96DC92AEA65BD changelog_base.xml newData ) en-us maxStashInfo 52428800
G3776/g1699/v262696/f1/full/ CMR-LGRP3-OVS 9.0.1.189 full system size 7289700352 14/05/2019 CMR-LGRP3-OVS 9.0.1.189 ota_package_basepkg full_basepkg1 ( base update_full_base.zip size 3439255881 md5 3134BEC7D2F571D6C4AF9045A2EC6E47 changelog_base.xml newData ) en-us maxStashInfo 52428800
G3776/g1699/v262695/f1/full/ CMR-LGRP3-OVS 9.0.1.189 increment system size 7289700352 14/05/2019 CMR-LGRP3-OVS 9.0.1.189 ota_package_basepkg full_base_datapkg ( base update_base.zip size 184440533 md5 94F6496DC6A89426C44CD9007A3EAE97 changelog_base.xml newData ) en-us maxStashInfo 622870528
G3776/g1699/v261844/f1/full/ CMR-W09 9.0.1.160(C10E2R1P2) CMR-W09-PRELOAD 9.0.1.2(C10R1) full preload approved size 8388608 30/04/2019 CMR-W09-PRELOAD 9.0.1.2(C10R1) ota_package_preloadpkg full_preloadpkg ( preload update_full_preload_CMR-W09_hw_ru_R1-C10.zip size 381856112 md5 EF5C9B3ABEE926F87A110FAB13080154 changelog_preload_hw_ru_R1-C10.xml newData ) en-us maxStashInfo 52428800
G3776/g1699/v261843/f1/full/ CMR-W09 9.0.1.160(C10E2R1P2) CMR-W09-CUST 9.0.1.2(C10) full version approved size 33554432 30/04/2019 CMR-W09-CUST 9.0.1.2(C10) ota_package_custpkg full_custpkg ( cust update_full_cust_CMR-W09_hw_ru.zip size 24912 md5 C0A44C57F6BE39BD50DD83776CB5C0C9 changelog_cust_hw_ru.xml newData ) en-us maxStashInfo 52428800
G3776/g1699/v261842/f1/full/ CMR-W09 9.0.1.185(C10E2R1P2) CMR-LGRP3-OVS 9.0.1.185 full system approved size 7289700352 30/04/2019 CMR-LGRP3-OVS 9.0.1.185 ota_package_basepkg full_basepkg1 ( base update_full_base.zip size 3444645597 md5 422C68D20C7918327D40CA2150167F03 changelog_base.xml newData ) en-us maxStashInfo 52428800
G3776/g1699/v259645/f1/full/ CMR-LGRP2-OVS 9.0.1.186 CMR-LGRP2-OVS 9.0.1.186 full system approved size 7289700352 08/05/2019 CMR-LGRP2-OVS 9.0.1.186 ota_package_basepkg full_basepkg1 ( base update_full_base.zip size 3482862642 md5 F2D87E658FE1A3D2FAE245C299318CF0 changelog_base.xml newData ) en-us maxStashInfo 52428800
G3776/g1699/v259644/f1/full/ CMR-LGRP2-OVS 9.0.1.186 increment system size 7289700352 08/05/2019 CMR-LGRP2-OVS 9.0.1.186 ota_package_basepkg full_base_datapkg ( base update_base.zip size 565082075 md5 555F408120003B37919FE74095674BC8 changelog_base.xml newData ) en-us maxStashInfo 605782016
G3776/g1699/v259643/f1/full/ CMR-LGRP2-OVS 9.0.1.186 CMR-LGRP2-OVS 9.0.1.186 increment system approved size 7289700352 08/05/2019 CMR-LGRP2-OVS 9.0.1.186 ota_package_basepkg full_base_datapkg ( base update_base.zip size 552410532 md5 081ACADB73A1DB56568BEA2C9D5DDBE3 changelog_base.xml newData ) en-us maxStashInfo 722653184
G3776/g1699/v259642/f1/full/ CMR-LGRP2-OVS 9.0.1.186 full system size 7289700352 08/05/2019 CMR-LGRP2-OVS 9.0.1.186 ota_package_basepkg full_basepkg1 ( base update_full_base.zip size 3482862597 md5 F2D7BA02E1271ECC0856259408AA0052 changelog_base.xml newData ) en-us maxStashInfo 52428800
G3776/g1699/v259594/f1/full/ CMR-AL19 9.0.1.186(C636E2R1P2) full system size 7289700352 07/05/2019 CMR-AL19 9.0.1.186(C636E2R1P2) fullpkg ( common update.zip size 2753943139 md5 0463C8C300CDB3EFFA671F969FE44DC9 changelog.xml newData ) en-us maxStashInfo 104857600( CMR-AL19-hw-spcseas CMR-AL19_hw_spcseas/update_full_CMR-AL19_hw_spcseas.zip size 1225528937 md5 D0E820CD78006EABB109FA8284822EC7 CMR-AL19_hw_spcseas/changelog_hw_spcseas.xml newData 1521486785 )
G3776/g1699/v258594/f1/full/ CMR-LGRP1-CHN 9.0.1.180 CMR-LGRP1-CHN 9.0.1.180 increment system approved size 6098518016 05/05/2019 CMR-LGRP1-CHN 9.0.1.180 ota_package_basepkg full_base_datapkg ( base update_base.zip size 213779821 md5 BCE4E33A6E71BD5B2BB595A5A6D4E9F7 changelog_base.xml newData ) en-us maxStashInfo 653479936
G3776/g1699/v258593/f1/full/ CMR-LGRP1-CHN 9.0.1.180 CMR-LGRP1-CHN 9.0.1.180 full system approved size 6098518016 05/05/2019 CMR-LGRP1-CHN 9.0.1.180 ota_package_basepkg full_basepkg1 ( base update_full_base.zip size 3182852207 md5 A99A3C22EEE5507C1AA8E473870083D5 changelog_base.xml newData ) en-us maxStashInfo 52428800
G3776/g1699/v257477/f1/full/ CMR-W09 9.0.1.160(C10E2R1P2) increment preload size 8388608 30/04/2019 CMR-W09-PRELOAD 9.0.1.2(C10R1) ota_package_preloadpkg ( preload update_preload_CMR-W09_hw_ru_R1-C10.zip size 17596 md5 063B53F0D249347F9457ED41A72E36B3 changelog_preload_hw_ru_R1-C10.xml newData ) en-us maxStashInfo 52670464
G3776/g1699/v257476/f1/full/ CMR-W09 9.0.1.160(C10E2R1P2) increment version size 33554432 30/04/2019 CMR-W09-CUST 9.0.1.2(C10) ota_package_custpkg ( cust update_cust_CMR-W09_hw_ru.zip size 17690 md5 2CC2D7DC8A0C1AECE313F8C185AA42C6 changelog_cust_hw_ru.xml newData ) en-us maxStashInfo 53043200
G3776/g1699/v257475/f1/full/ CMR-W09 9.0.1.185(C10E2R1P2) increment system size 7289700352 30/04/2019 CMR-LGRP3-OVS 9.0.1.185 ota_package_basepkg full_base_datapkg ( base update_base.zip size 513295880 md5 5319331E5EF45B76508A4E299631E69A changelog_base.xml newData ) en-us maxStashInfo 673046528
G3776/g1699/v257464/f1/full/ CMR-W09 9.0.1.185(C10E2R1P2) CMR-W09 9.0.1.185(C10E2R1P2) full system approved size 7289700352 30/04/2019 CMR-W09 9.0.1.185(C10E2R1P2) fullpkg ( common update.zip size 2715739139 md5 FC70F533EEEEEDB8732587D9B431BF1B changelog.xml newData ) en-us maxStashInfo 104857600( CMR-W09-hw-ru CMR-W09_hw_ru/update_full_CMR-W09_hw_ru.zip size 1110139200 md5 160C05B56611FD6ADDD0BD7A248AE700 CMR-W09_hw_ru/changelog_hw_ru.xml newData 1381223414 )
G3776/g1699/v253990/f1/full/ CMR-AL19 9.0.1.185(C185E2R1P2) CMR-AL19 9.0.1.185(C185E2R1P2) full system approved size 7289700352 19/04/2019 CMR-AL19 9.0.1.185(C185E2R1P2) fullpkg ( common update.zip size 2745770445 md5 02D15D77737C4C04407483FF351B0B9A changelog.xml newData ) en-us maxStashInfo 104857600( CMR-AL19-hw-meafnaf CMR-AL19_hw_meafnaf/update_full_CMR-AL19_hw_meafnaf.zip size 1217211834 md5 FBA14B935C7A7E2048C2A6C5048FF200 CMR-AL19_hw_meafnaf/changelog_hw_meafnaf.xml newData 1504457092 )
G3776/g1699/v253965/f1/full/ CMR-AL19 9.0.1.185(C185E2R1P2) increment system size 7289700352 19/04/2019 CMR-LGRP2-OVS 9.0.1.185 ota_package_basepkg full_base_datapkg ( base update_base.zip size 543244660 md5 EBB77C6A48B69D3667FBD89D21738C7D changelog_base.xml newData ) en-us maxStashInfo 687845376
G3776/g1699/v253964/f1/full/ CMR-AL19 9.0.1.185(C185E2R1P2) CMR-LGRP2-OVS 9.0.1.185 full system approved size 7289700352 19/04/2019 CMR-LGRP2-OVS 9.0.1.185 ota_package_basepkg full_basepkg1 ( base update_full_base.zip size 3474587207 md5 B7C2645CC9A600323239DAD9A05643D7 changelog_base.xml newData ) en-us maxStashInfo 52428800
G3776/g1699/v253701/f1/full/ CMR-AL09 9.0.1.185(C185E3R1P3) CMR-AL09 9.0.1.185(C185E3R1P3) full system approved size 7289700352 19/04/2019 CMR-AL09 9.0.1.185(C185E3R1P3) fullpkg ( common update.zip size 2745770483 md5 99D5CBB3C87677ABE907A4B5480538EA changelog.xml newData ) en-us maxStashInfo 104857600( CMR-AL09-hw-meafnaf CMR-AL09_hw_meafnaf/update_full_CMR-AL09_hw_meafnaf.zip size 895131283 md5 7597362653500702158609C3C6501648 CMR-AL09_hw_meafnaf/changelog_hw_meafnaf.xml newData 1037712644 )
G3776/g1699/v253700/f1/full/ CMR-AL09 9.0.1.185(C185E3R1P3) CMR-LGRP2-OVS 9.0.1.185 full system approved size 7289700352 19/04/2019 CMR-LGRP2-OVS 9.0.1.185 ota_package_basepkg full_basepkg1 ( base update_full_base.zip size 3474586642 md5 D7E7A22375655A28E6A868B281993DA3 changelog_base.xml newData ) en-us maxStashInfo 52428800
G3776/g1699/v253699/f1/full/ CMR-AL09 9.0.1.185(C185E3R1P3) increment system size 7289700352 19/04/2019 CMR-LGRP2-OVS 9.0.1.185 ota_package_basepkg full_base_datapkg ( base update_base.zip size 543244571 md5 726099A636E761F802A189FA326A5895 changelog_base.xml newData ) en-us maxStashInfo 687845376
G3776/g1699/v253283/f1/full/ CMR-LGRP3-OVS 9.0.1.183 CMR-LGRP3-OVS 9.0.1.183 increment system approved size 7289700352 19/04/2019 CMR-LGRP3-OVS 9.0.1.183 ota_package_basepkg full_base_datapkg ( base update_base.zip size 204052001 md5 4EAA1DE94BB165B159A1296CCE02CF6E changelog_base.xml newData ) en-gb maxStashInfo 628301824
G3776/g1699/v253282/f1/full/ CMR-LGRP3-OVS 9.0.1.183 CMR-LGRP3-OVS 9.0.1.183 full system approved size 7289700352 19/04/2019 CMR-LGRP3-OVS 9.0.1.183 ota_package_basepkg full_basepkg1 ( base update_full_base.zip size 3439290465 md5 3C600C259D59B82EC0FE255FF18E468A changelog_base.xml newData ) en-gb maxStashInfo 52428800
G3776/g1699/v253215/f1/full/ 请自行修改 CMR-AL19 9.0.1.179(C00E160R1P160) full system approved size 6098518016 15/04/2019 CMR-AL19 9.0.1.179(C00E160R1P160) fullpkg ( common update.zip size 2290029309 md5 8F074AA9FE2D03A22FDB2228E55E23DD changelog.xml newData ) en-us maxStashInfo 104857600( CMR-AL19-all-cn CMR-AL19_all_cn/update_full_CMR-AL19_all_cn.zip size 1474795447 md5 E9B787AD28B8BE4E8A5413AAD2A28BD2 CMR-AL19_all_cn/changelog_all_cn.xml newData 1900498683 )
G3776/g1699/v253214/f1/full/ 请自行修改 CMR-AL19 9.0.1.179(C00E160R1P160) full system approved size 6098518016 15/04/2019 CMR-AL19 9.0.1.179(C00E160R1P160) fullpkg ( common update.zip size 2290028891 md5 F115BA529F577658E8C2D1724307D856 changelog.xml newData ) en-us maxStashInfo 104857600( CMR-AL19-all-cn CMR-AL19_all_cn/update_full_CMR-AL19_all_cn.zip size 1474795483 md5 84DD6939681A71253F054DD6C5A98B2D CMR-AL19_all_cn/changelog_all_cn.xml newData 1900498683 )
G3776/g1699/v253213/f1/full/ 请自行修改 CMR-AL09 9.0.1.179(C00E160R1P160) full system approved size 6098518016 15/04/2019 CMR-AL09 9.0.1.179(C00E160R1P160) fullpkg ( common update.zip size 2290029074 md5 182D5D32D9176DC46393A23D031DE21D changelog.xml newData ) en-us maxStashInfo 104857600( CMR-AL09-all-cn CMR-AL09_all_cn/update_full_CMR-AL09_all_cn.zip size 1151605928 md5 55698FC45CEC34D4E1CD7957DA50C069 CMR-AL09_all_cn/changelog_all_cn.xml newData 1432107436 )
G3776/g1699/v253212/f1/full/ 请自行修改 CMR-AL09 9.0.1.179(C00E160R1P160) full system approved size 6098518016 15/04/2019 CMR-AL09 9.0.1.179(C00E160R1P160) fullpkg ( common update.zip size 2290029258 md5 75E1E60E3317D80AE1488FDE20D2D7A0 changelog.xml newData ) en-us maxStashInfo 104857600( CMR-AL09-all-cn CMR-AL09_all_cn/update_full_CMR-AL09_all_cn.zip size 1151605893 md5 0D02769A3BBD0E268095553225FBC259 CMR-AL09_all_cn/changelog_all_cn.xml newData 1432107436 )
G3776/g1699/v253211/f1/full/ 请自行修改 CMR-W19 9.0.1.179(C00E160R1P160) full system approved size 6098518016 15/04/2019 CMR-W19 9.0.1.179(C00E160R1P160) fullpkg ( common update.zip size 2260227664 md5 346FB91B7165E746F3FEB0538FA96ECC changelog.xml newData ) en-us maxStashInfo 104857600( CMR-W19-all-cn CMR-W19_all_cn/update_full_CMR-W19_all_cn.zip size 1474888974 md5 C164676F7E7FB8F34BA0660D3A737356 CMR-W19_all_cn/changelog_all_cn.xml newData 1900594503 )
G3776/g1699/v253210/f1/full/ 请自行修改 CMR-W09 9.0.1.179(C00E160R1P160) full system approved size 6098518016 15/04/2019 CMR-W09 9.0.1.179(C00E160R1P160) fullpkg ( common update.zip size 2260227576 md5 3F8289C11352DA8802960BC04496F618 changelog.xml newData ) en-us maxStashInfo 104857600( CMR-W09-all-cn CMR-W09_all_cn/update_full_CMR-W09_all_cn.zip size 1151698618 md5 01BE45B08C581762D419CACF7EED42C4 CMR-W09_all_cn/changelog_all_cn.xml newData 1432203256 )
G3776/g1699/v253209/f1/full/ 请自行修改 CMR-W09 9.0.1.179(C00E160R1P160) full system approved size 6098518016 15/04/2019 CMR-W09 9.0.1.179(C00E160R1P160) fullpkg ( common update.zip size 2260227546 md5 6130D558753CA58479C32D5A3D910177 changelog.xml newData ) en-us maxStashInfo 104857600( CMR-W09-all-cn CMR-W09_all_cn/update_full_CMR-W09_all_cn.zip size 1151698584 md5 C9A164F3D9B5325BE761919417860284 CMR-W09_all_cn/changelog_all_cn.xml newData 1432203256 )
G3776/g1699/v253208/f1/full/ 请自行修改 CMR-W19 9.0.1.179(C00E160R1P160) full system approved size 6098518016 15/04/2019 CMR-W19 9.0.1.179(C00E160R1P160) fullpkg ( common update.zip size 2260227636 md5 F1C1CA7AEC41FF821D546AD946600585 changelog.xml newData ) en-us maxStashInfo 104857600( CMR-W19-all-cn CMR-W19_all_cn/update_full_CMR-W19_all_cn.zip size 1474889010 md5 87A0DD7F500C34F94713442BEC3C166F CMR-W19_all_cn/changelog_all_cn.xml newData 1900594503 )
G3776/g1699/v252998/f1/full/ CMR-W19 9.0.1.185(C636E2R1P2) CMR-LGRP3-OVS 9.0.1.185 full system approved size 7289700352 19/04/2019 CMR-LGRP3-OVS 9.0.1.185 ota_package_basepkg full_basepkg1 ( base update_full_base.zip size 3444645101 md5 B6181B91745E146073A0E1C35E9C0C42 changelog_base.xml newData ) en-us maxStashInfo 52428800
G3776/g1699/v252997/f1/full/ CMR-W19 9.0.1.185(C636E2R1P2) increment system size 7289700352 19/04/2019 CMR-LGRP3-OVS 9.0.1.185 ota_package_basepkg full_base_datapkg ( base update_base.zip size 513295857 md5 B4735E994B7023CF60A5620CE831C2E0 changelog_base.xml newData ) en-us maxStashInfo 673046528
G3776/g1699/v252994/f1/full/ CMR-W19-CUST 9.0.1.2(C636) CMR-W19-CUST 9.0.1.2(C636) full version approved size 33554432 11/03/2019 CMR-W19-CUST 9.0.1.2(C636) ota_package_custpkg full_custpkg ( cust update_full_cust_CMR-W19_hw_spcseas.zip size 323453826 md5 A000F89CBB403EFB90BB881A6FA35A88 changelog_cust_hw_spcseas.xml newData ) en-us maxStashInfo 52428800
G3776/g1699/v252991/f1/full/ CMR-W19-PRELOAD 9.0.1.2(C636R1) CMR-W19-PRELOAD 9.0.1.2(C636R1) full preload approved size 8388608 11/03/2019 CMR-W19-PRELOAD 9.0.1.2(C636R1) ota_package_preloadpkg full_preloadpkg ( preload update_full_preload_CMR-W19_hw_spcseas_R1-C636.zip size 143544125 md5 81CED48D114A3951FE1DCDB2B6EFBC98 changelog_preload_hw_spcseas_R1-C636.xml newData ) en-us maxStashInfo 52428800
G3776/g1699/v252938/f1/full/ CMR-AL19 9.0.1.185(C10E3R1P3) CMR-AL19 9.0.1.185(C10E3R1P3) full system approved size 7289700352 18/04/2019 CMR-AL19 9.0.1.185(C10E3R1P3) fullpkg ( common update.zip size 2745770509 md5 1BC29EBDEBBCCA1A9A878F1FC53170F4 changelog.xml newData ) en-us maxStashInfo 104857600( CMR-AL19-hw-ru CMR-AL19_hw_ru/update_full_CMR-AL19_hw_ru.zip size 1433382839 md5 2CFD3642551915E30C8FA8C7547ABA65 CMR-AL19_hw_ru/changelog_hw_ru.xml newData 1849601500 )
Notes
- firmware image CRC checksums are verified and printed out directly while downloading
- all details about the current firmware are appended in an scanfound.txt document
Related
[GT-P6210 WIFI]bootloader output & default settings & Native ubuntu running
I recently installed ubuntu on GT-P6210, it works fine until i tried to port some drivers from Linaro Origen source, as I couldnt see anything from bootloaders and kernel, it's hard to get off the reboot loop, So I made a serial cable, thanks for Technomancer's post here:http://forum.xda-developers.com/showthread.php?t=1010314 and the following are those outputs from bootloaders, maybe it's helpful to someone: Welcome to Samsung Primitive Bootloader. build time: Jan 5 2012 22:13:07 current time: 0/1/3 0:9:30 [set_mmc_ocr] Sector Mode [hsmmc_init] MMC card is detected Product Name : MAG4FA <display_card_info:1009> ext_csd <display_card_info:1011>card_size: 15028 Total Card Size: 15029 MByte mmc_init: card initialization completed! pbl found bootable sbl in #49152. jump to sbl 0x4d400000. init_fuel_gauge - Start!! init_fuel_gauge - CGAIN=0x3cd5 check_battery_type: fuel_temp = 34, adc_temp = 40 set_fuel_gauge_parameter: battery_type = 1 init_fuel_gauge - Already initialized!! (SDI type) fuel_gauge_test_read - addr(0x00), data(0x0000) fuel_gauge_test_read - addr(0x01), data(0xff00) fuel_gauge_test_read - addr(0x02), data(0x7f80) fuel_gauge_test_read - addr(0x03), data(0xff01) fuel_gauge_test_read - addr(0x04), data(0x0000) fuel_gauge_test_read - addr(0x05), data(0x1e4c) fuel_gauge_test_read - addr(0x06), data(0x5f6c) fuel_gauge_test_read - addr(0x07), data(0x4d58) fuel_gauge_test_read - addr(0x08), data(0x224c) fuel_gauge_test_read - addr(0x09), data(0xca7a) fuel_gauge_test_read - addr(0x0a), data(0xf5f3) fuel_gauge_test_read - addr(0x0b), data(0xec06) fuel_gauge_test_read - addr(0x0d), data(0x48e6) fuel_gauge_test_read - addr(0x0e), data(0x5f5f) fuel_gauge_test_read - addr(0x0f), data(0x1e4d) fuel_gauge_test_read - addr(0x10), data(0x1fc0) fuel_gauge_test_read - addr(0x11), data(0x0bfb) fuel_gauge_test_read - addr(0x12), data(0x7d5a) fuel_gauge_test_read - addr(0x14), data(0x021f) fuel_gauge_test_read - addr(0x16), data(0x2055) fuel_gauge_test_read - addr(0x17), data(0x0d70) fuel_gauge_test_read - addr(0x18), data(0x290a) fuel_gauge_test_read - addr(0x19), data(0xc859) fuel_gauge_test_read - addr(0x1a), data(0x2716) fuel_gauge_test_read - addr(0x1b), data(0xd099) fuel_gauge_test_read - addr(0x1c), data(0x23e9) fuel_gauge_test_read - addr(0x1d), data(0x2210) fuel_gauge_test_read - addr(0x1e), data(0x0520) fuel_gauge_test_read - addr(0x1f), data(0x1def) fuel_gauge_test_read - addr(0x21), data(0x0092) fuel_gauge_test_read - addr(0x23), data(0x2934) fuel_gauge_test_read - addr(0x24), data(0x1400) fuel_gauge_test_read - addr(0x25), data(0x2305) fuel_gauge_test_read - addr(0x27), data(0x6d46) fuel_gauge_test_read - addr(0x29), data(0x87a4) fuel_gauge_test_read - addr(0x2a), data(0x506b) fuel_gauge_test_read - addr(0x2b), data(0x0010) fuel_gauge_test_read - addr(0x2c), data(0xe3e1) fuel_gauge_test_read - addr(0x2d), data(0x290e) fuel_gauge_test_read - addr(0x2e), data(0x3cd5) fuel_gauge_test_read - addr(0x2f), data(0x0000) fuel_gauge_test_read - addr(0x32), data(0x0800) fuel_gauge_test_read - addr(0x33), data(0x0000) fuel_gauge_test_read - addr(0x36), data(0x0100) fuel_gauge_test_read - addr(0x37), data(0x05e0) fuel_gauge_test_read - addr(0x38), data(0x0089) fuel_gauge_test_read - addr(0x39), data(0x132a) fuel_gauge_test_read - addr(0x3a), data(0x1458) fuel_gauge_test_read - addr(0x3b), data(0x057f) fuel_gauge_test_read - addr(0x3d), data(0x1008) fuel_gauge_test_read - addr(0x3f), data(0xe000) fuel_gauge_test_read - addr(0xfb), data(0xcd7e) fuel_gauge_test_read - addr(0xff), data(0x47ae) fuel_gauge_read_vfsoc : VFSOC(71), data(0x47ae) fuel_gauge_read_vcell : VCELL(4052), data(0xca9c) calculate_sdi_table_soc: Get table SOC in case of not charging!! calculate_sdi_table_soc: vcell(4052), table_soc(91) [VFSOC_Patch] differ(3), table_soc(91), vfsoc(71) fuel_gauge_read_vfsoc : VFSOC(71), data(0x47ae) fuel_gauge_read_vcell : VCELL(4052), data(0xca9c) calculate_sdi_table_soc: Get table SOC in case of not charging!! calculate_sdi_table_soc: vcell(4052), table_soc(91) [VFSOC_Patch] differ(3), table_soc(91), vfsoc(71) fuel_gauge_read_vfsoc : VFSOC(71), data(0x47ae) fuel_gauge_read_vcell : VCELL(4052), data(0xca9c) fuel_gauge_read_soc : SOC(95), data(0x5f6c) calculate_sdi_table_soc: Get table SOC in case of not charging!! calculate_sdi_table_soc: vcell(4052), table_soc(91) fuel_gauge_read_vfsoc : VFSOC(71), data(0x47ae) fuel_gauge_read_soc : SOC(95), data(0x5f6c) fuel_gauge_read_soc : SOC(95), data(0x5f6c) init_microusb_ic: MUIC: CONTROL1:0x3f init_microusb_ic: MUIC: CONTROL1:0x3f init_microusb_ic: MUIC: CONTROL2:0x3a init_microusb_ic: MUIC: CONTROL2:0x3a Secondary Bootloader v3.1 version. Copyright (C) 2011 System S/W Group. Samsung Electronics Co., Ltd. Board: P4 REV 02 / Jan 5 2012 22:13:13 current time: 0/1/3 0:9:31 booting code=0x0 [set_mmc_ocr] Sector Mode [hsmmc_init] MMC card is detected Product Name : MAG4FA CID:150100 4d414734 4641196e c10e81f <display_card_info:1043> ext_csd <display_card_info:1045>card_size: 15028 Total Card Size: 15029 MByte Total Sector Count: 30777344 MoviNand Initialization Complete! ===== PARTITION INFORMATION ===== ID : GANG (0x0) DEVICE : MMC FIRST UNIT : 0 NO. UNITS : 0 ================================= ID : BOOT (0x1) DEVICE : MMC FIRST UNIT : 0 NO. UNITS : 0 ================================= ID : EFS (0x4) DEVICE : MMC FIRST UNIT : 8192 NO. UNITS : 40960 ================================= ID : SBL1 (0x2) DEVICE : MMC FIRST UNIT : 49152 NO. UNITS : 2560 ================================= ID : SBL2 (0x3) DEVICE : MMC FIRST UNIT : 53248 NO. UNITS : 2560 ================================= ID : PARAM (0x5) DEVICE : MMC FIRST UNIT : 57344 NO. UNITS : 16384 ================================= ID : KERNEL (0x6) DEVICE : MMC FIRST UNIT : 73728 NO. UNITS : 16384 ================================= ID : RECOVERY (0x7) DEVICE : MMC FIRST UNIT : 90112 NO. UNITS : 16384 ================================= ID : CACHE (0x8) DEVICE : MMC FIRST UNIT : 106496 NO. UNITS : 409600 ================================= ID : FACTORYFS (0xa) DEVICE : MMC FIRST UNIT : 516096 NO. UNITS : 1572864 ================================= ID : DATAFS (0xb) DEVICE : MMC FIRST UNIT : 2088960 NO. UNITS : 27615232 ================================= ID : HIDDEN (0xc) DEVICE : MMC FIRST UNIT : 29704192 NO. UNITS : 1048576 ================================= ID : FOTA (0xd) DEVICE : MMC FIRST UNIT : 30752768 NO. UNITS : 16384 ================================= loke_init: j4fs_open..fsd_reclaim 1287: MST is not recognized(mst.magic=0x72726624) fsd_reclaim 1288: MST is not recognized fsd_reclaim 1603: Error(nErr=0x00000000) fsd_reclaim 1608: j4fs_rw_start is set to default value(128KB) j4fs_open 154: Error(nErr=0x40000000) failed init_ddi_data: usable ddi data. j4fs_read_file_bootloader 356: j4fs panic nps status file does not exist.. nps status is incorrect!! set default status.(completed) nps status=0x504d4f43 PMIC_IRQSRC = 0x00 PMIC_IRQ1 = 0x00 PMIC_IRQ2 = 0x08 PMIC_IRQ3 = 0x00 PMIC_IRQ4 = 0x11 PMIC_STATUS1 = 0x00 PMIC_STATUS2 = 0x16 PMIC_STATUS3 = 0x03 PMIC_STATUS4 = 0x00 bootloader base address=0x4d400000 LPDDR0 1st. cached=0x40000000, size=0xe400000 LPDDR0 non-cached=0x4e400000, size=0xa00000 LPDDR0 2nd. cached=0x4ee00000, size=0x1200000 RST_STAT = 0x20000000 get_hwrev() = 11 board_process_platform: MAGIC 0 at 40004000! check_reboot: INFORM3 = 12345670 save param.blk, size: 5268 j4fs_write_file_bootloader 185: j4fs panic mbcctrl = d4 mbcctrl = 14 mbcctrl = 14 fuel_gauge_read_vcell : VCELL(4051), data(0xca98) pm_check_low_battery: Now, Start Booting... check_30pin_cable: ch4. ADC value = 4095 check_30pin_cable: ch4. ADC value = 4088 check_30pin_cable: ch4. ADC value = 4093 microusb_get_attached_device: STATUS1:0x3f, 2:0x00 hw_pm_status: chg_status = 0, INFORM2 = 12345678 AST_POWERON.. ......kernel is non signed binary. div:15, FB_SOURCE_CLOCK:800000000, FB_PIXEL_CLOCK:53988360 mDNIe is enabled check_lcdtype : adc=1135, lctype=1 Autoboot (0 seconds) in progress, press any key to stop boot_kernel: debug level low! checkbit (00000000) ......kernel (id 0) is non signed binary. ATAG_CORE: 5 54410001 0 0 0 MEMCONFIG: 20e01323 20e01323 ATAG_MEM: 4 54410002 10000000 40000000 ATAG_MEM: 4 54410002 10000000 50000000 ATAG_MEM: 4 54410002 10000000 60000000 ATAG_MEM: 4 54410002 10000000 70000000 ATAG_SERIAL: 4 54410006 c10e81f 4641196e ATAG_REVISION: 3 54410007 b ATAG_CMDLINE: 47 54410009 'console=ttySAC2,115200 loglevel=4 sec_debug.enable=0 sec_debug.enable_user=0 c1_watchdog.sec_pet=5 [email protected] s3cfb.bootloaderfb=0x5ec00000 lcdtype=1 consoleblank=0 lpj=3981312 vmalloc=144m an' ATAG_NONE: 0 0 Starting kernel at 0x40008000... default env settings: SBL> printenv PARAM Rev 1.3 SERIAL_SPEED : 7 LOAD_RAMDISK : 0 BOOT_DELAY : 0 LCD_LEVEL : 97 SWITCH_SEL : 1 PHONE_DEBUG_ON : 0 LCD_DIM_LEVEL : 0 LCD_DIM_TIME : 6 MELODY_MODE : 1 REBOOT_MODE : 0 NATION_SEL : 0 LANGUAGE_SEL : 0 SET_DEFAULT_PARAM : 0 FLASH_LOCK_STATUS : 1 PARAM_INT_14 : 0 VERSION : I9000XXIL CMDLINE : console=ttySAC2,115200 loglevel=4 DELTA_LOCATION : /mnt/rsv PARAM_STR_3 : PARAM_STR_4 :
Can you provide a how-to install ubuntu on the gtab? or provide a link to which instructions you followed to install it? Thanks
bdds13 said: Can you provide a how-to install ubuntu on the gtab? or provide a link to which instructions you followed to install it? Thanks Click to expand... Click to collapse 2 steps: ubuntu rootfs on tf card; flash the attached zImage file with: heimdall flash --kernel zImage
Fyi, if you can build a kernel with sec_log support, you can get this bootloader info as well (on /proc/last_kmsg). I backported sec_log to the hc kernel from the galaxys2 ics source at a couple of points, it is pretty straightforward.
locerra said: Fyi, if you can build a kernel with sec_log support, you can get this bootloader info as well (on /proc/last_kmsg). I backported sec_log to the hc kernel from the galaxys2 ics source at a couple of points, it is pretty straightforward. Click to expand... Click to collapse thanks, I just had a look, it's on in my kernel, will check the messages in /proc
jackqin said: I recently installed ubuntu on GT-P6210, it works fine until i tried to port some drivers from Linaro Origen source Click to expand... Click to collapse Can you provide any details as to what was working and what wasn't? Hardware wise? Thanks
SirFunk said: Can you provide any details as to what was working and what wasn't? Hardware wise? Thanks Click to expand... Click to collapse I just needed framebuffer console, so I didn't get to X interface, for now, I can say multi-touch device is working, coz I saw touch events. most other devices should work, since the kernel is from Gary's working one, and I did some minor modifications to let Linux boot. I'll work on it and try to put together a rather complete rootfs, and update my progress here.
[Completed] [q] brom error 3149 when i try flashing b6000 yoga talblet
Hi guys I need helps ! :good: :crying: I tried to flash my by b6000 yoga tablet but each time i execute the process of flash i got brom error : 3149 i tried many solutions in the web without results i gave the device to another one to flash them but without results also Now When i Tried to power on it i saw nothing even if i flashed the preloader Here's the test of Memory What its the problem ? =============== Memory Detection Report =============== Internal RAM: Size = 0x00020000 (128KB) External RAM: Type = DRAM Size = 0x40000000 (1024MB/8192Mb) NAND Flash: ERROR: NAND Flash was not detected! EMMC : EMMC_PART_BOOT1 Size = 0x0000000000200000(2MB) EMMC_PART_BOOT2 Size = 0x0000000000200000(2MB) EMMC_PART_RPMB Size = 0x0000000000020000(0MB) EMMC_PART_GP1 Size = 0x0000000000000000(0MB) EMMC_PART_GP2 Size = 0x0000000000000000(0MB) EMMC_PART_GP3 Size = 0x0000000000000000(0MB) EMMC_PART_GP4 Size = 0x0000000000000000(0MB) EMMC_PART_USER Size = 0x00000003A3E00000(14910MB) ============ RAM Test ============ Data Bus Test : [D0][D1][D2][D3][D4][D5][D6][D7][D8][D9][D10][D11][D12][D13][D14][D15] OK!! Address Bus Test : [A1][A2][A3][A4][A5][A6][A7][A8][A9][A10][A11][A12][A13][A14][A15][A16][A17][A18][A19][A20][A21][A22][A23][A24][A25][A26][A27][A28][A29] OK!! RAM Pattern Test : Writing ... 0x44332211, 0xA5A5A5A5, + 0xA5A5A500, 0xA500A500, 0xA5000000, 0x00000000, 0xFFFF0000, 0xFFFFFFFF, OK!! Increment/Decrement Test : Writing ... OK!!
tberma said: Hi guys I need helps ! :good: :crying: I tried to flash my by b6000 yoga tablet but each time i execute the process of flash i got brom error : 3149 i tried many solutions in the web without results i gave the device to another one to flash them but without results also Now When i Tried to power on it i saw nothing even if i flashed the preloader Here's the test of Memory What its the problem ? ===============Memory Detection Report =============== Internal RAM: Size = 0x00020000 (128KB) External RAM: Type = DRAM Size = 0x40000000 (1024MB/8192Mb) NAND Flash: ERROR: NAND Flash was not detected! EMMC : EMMC_PART_BOOT1 Size = 0x0000000000200000(2MB) EMMC_PART_BOOT2 Size = 0x0000000000200000(2MB) EMMC_PART_RPMB Size = 0x0000000000020000(0MB) EMMC_PART_GP1 Size = 0x0000000000000000(0MB) EMMC_PART_GP2 Size = 0x0000000000000000(0MB) EMMC_PART_GP3 Size = 0x0000000000000000(0MB) EMMC_PART_GP4 Size = 0x0000000000000000(0MB) EMMC_PART_USER Size = 0x00000003A3E00000(14910MB) ============ RAM Test ============ Data Bus Test : [D0][D1][D2][D3][D4][D5][D6][D7][D8][D9][D10][D11][D12][D13][D14][D15] OK!! Address Bus Test : [A1][A2][A3][A4][A5][A6][A7][A8][A9][A10][A11][A12][A13][A14][A15][A16][A17][A18][A19][A20][A21][A22][A23][A24][A25][A26][A27][A28][A29] OK!! RAM Pattern Test : Writing ... 0x44332211, 0xA5A5A5A5, + 0xA5A5A500, 0xA500A500, 0xA5000000, 0x00000000, 0xFFFF0000, 0xFFFFFFFF, OK!! Increment/Decrement Test : Writing ... OK!! Click to expand... Click to collapse Hello, Thanks for using XDA Assist. There's no dedicated forum for your device here in XDA.You can post your query in Android Q&A,Help and Troubleshooting.Experts there may be able to help you ___ v7 XDA Assist
NAND Flash Was Not Detected
My problem is, after I power on my phone, it stuck at orange logo with white background. Then after a while, it reboot, and stuck again at that logo. Here's my memory test result from SP Flash Tool. What should I do? I flashed S203 CN rom and this problem persist. Code: =============== Memory Detection Report =============== Internal RAM: Size = 0x00020000 (128KB) External RAM: Type = DRAM Size = 0x40000000 (1024MB/8192Mb) NAND Flash: ERROR: NAND Flash was not detected! EMMC : EMMC_PART_BOOT1 Size = 0x0000000000400000(4MB) EMMC_PART_BOOT2 Size = 0x0000000000400000(4MB) EMMC_PART_RPMB Size = 0x0000000000080000(0MB) EMMC_PART_GP1 Size = 0x0000000000000000(0MB) EMMC_PART_GP2 Size = 0x0000000000000000(0MB) EMMC_PART_GP3 Size = 0x0000000000000000(0MB) EMMC_PART_GP4 Size = 0x0000000000000000(0MB) EMMC_PART_USER Size = 0x00000001D2000000(7456MB)
[Completed] Upgrade Partition Size
Hi to all First of all, thansk a lot for all hard job done for the all entire XDA Team. You helped us so much! Well, I 'm starting into the world of TWRP, Custom ROM, CM, etc. All because I have a Tablet Genesis GT1440 that after a Update, (gt1440_update.img, 392MB) my tablet get two data partitions: One with 0.99GB and another with 2,09GB (no SDCard installed, just the Internal Memory). And reading how to fix it, I got the page about the Unpacking/Repacking tool imgRepacker.exe With that, I unpacking the rom I mentioned above and found a lot of files, but one called sys_partition.fex maybe solve my problem. So I need some help to find out if is possible to edit this and solve the problem if the data partition. This is the file: ;--------------------------------------------------------------------------------------------------------- ; 说明: 脚本中的字符串区分大小写,用户可以修改"="后面的数值,但是不要修改前面的字符串 ;--------------------------------------------------------------------------------------------------------- ;-------------------------------------------------------------------------------------------------- ; 固件下载参数配置 ;-------------------------------------------------------------------------------------------------- ;**************************************************** ; mbr的大小, 以Kbyte为单位 ;**************************************************** [mbr] size = 16384 ;******************************************************************************************************** ; 分区配置 ; ; ; partition 定义范例: ; [partition] ; //表示是一个分区 ; name = USERFS2 ; //分区名称 ; size = 16384 ; //分区大小 单位: 扇区.分区表示个数最多2^31 * 512 = 2T ; downloadfile = "123.fex" ; //下载文件的路径和名称,可以使用相对路径,相对是指相对于image.cfg文件所在分区。也可以使用绝对路径 ; keydata = 1 ; //私有数据分区,重新量产数据将不丢失 ; encrypt = 1 ; //采用加密方式烧录,将提供数据加密,但损失烧录速度 ; user_type = ? ; //私有用法 ; verify = 1 ; //要求量产完成后校验是否正确 ; ; 注:1、name唯一, 不允许同名 ; 2、name最大12个字符 ; 3、size = 0, 将创建一个无大小的空分区 ; 4、为了安全和效率考虑,分区大小最好保证为16M字节的整数倍 ;******************************************************************************************************** [partition_start] ;------------------------------>mmcblk0p2/nanda [partition] name = bootloader size = 32768 downloadfile = "bootloader.fex" ;------------------------------>mmcblk0p5/nandb [partition] name = env size = 32768 downloadfile = "env.fex" ;------------------------------>mmcblk0p6/nandc [partition] name = boot size = 32768 downloadfile = "boot.fex" ;------------------------------>mmcblk0p7/nandd [partition] name = system size = 1572864 downloadfile = "system.fex" user_type = 0x2 ;------------------------------>mmcblk0p8/nande [partition] name = data size = 2097152 user_type = 0x2 ;------------------------------>mmcblk0p9/nandf [partition] name = misc size = 32768 ;------------------------------>mmcblk0p10/nandg [partition] name = recovery size = 65536 downloadfile = "recovery.fex" ;------------------------------>mmcblk0p11/nandh [partition] name = cache size = 1048576 user_type = 0x2 ;------------------------------>nandi, data image backup [partition] name = databk size = 262144 ;------------------------------>nandj, private data [partition] name = private size = 32768 keydata = 1 ;------------------------------>nandk, UDISK [partition] name = UDISK downloadfile = "diskfs.fex" verify = 0 So, I think if I correct this file with the corretcs values for data partition, may solve the problem.... or maybe the case is not so simple as I think.... But I am here to try it. The Tablet is a Genesis GT-1440, with a Allwinner A31 chipset Regards and thanks a lot for any help
Hello and thank you for using XDA Assist, please create an account and ask in our Android Q&A section. The expert's there should be able to help you. Kind regards & good luck Trafalgar Square XDA Assist
Help Needed: Huawei G610-U20 only vibrate when power on it
Hello I have this Huawei G610, suddenly it show me that Encrypted unsuccessful message, then I tried to reset the phone and it doesn't want to. I tried to Hard reset and i can't go to the Hard reset part> When I connect it to the usb port in order to try to flash it using stock rom and SP flash tools, the program can't complete formatting with an error. and my phone keeps showing the logo and vibrate then close and open doing the same thing again and looping. I tried to make a memory test, and that was the results: =============== Memory Detection Report =============== Internal RAM: Size = 0x00020000 (128KB) External RAM: Type = DRAM Size = 0x40000000 (1024MB/8192Mb) NAND Flash: ERROR: NAND Flash was not detected! EMMC : EMMC_PART_BOOT1 Size = 0x0000000000200000(2MB) EMMC_PART_BOOT2 Size = 0x0000000000200000(2MB) EMMC_PART_RPMB Size = 0x0000000000200000(2MB) EMMC_PART_GP1 Size = 0x0000000000000000(0MB) EMMC_PART_GP2 Size = 0x0000000000000000(0MB) EMMC_PART_GP3 Size = 0x0000000000000000(0MB) EMMC_PART_GP4 Size = 0x0000000000000000(0MB) EMMC_PART_USER Size = 0x00000000E7000000(3696MB) ============ RAM Test ============ Data Bus Test : [D0][D1][D2][D3][D4][D5][D6][D7][D8][D9][D10][D11][D12][D13][D14][D15] OK!! Address Bus Test : [A1][A2][A3][A4][A5][A6][A7][A8][A9][A10][A11][A12][A13][A14][A15][A16][A17][A18][A19][A20][A21][A22][A23][A24][A25][A26][A27][A28][A29] OK!! RAM Pattern Test : Writing ... 0x44332211, 0xA5A5A5A5, 0xA5A5A500, 0xA500A500, 0xA5000000, 0x00000000, 0xFFFF0000, 0xFFFFFFFF, OK!! Increment/Decrement Test : Writing ... OK!! ============ NAND Test ============ SKIP! NAND Flash was not detected! ============ EMMC Test ============ EMMC Pattern Test(0x5A5A): FAILED!! ============================================================================================ is it an EMMC problem? Needed to be replaced or what ?? Help Needed ... Thanks in advance
? any one ??
PLZ