blob: dc325e0bf7ea7cd8969732db758f156fce8a40a6 [file] [log] [blame]
#from imgtec import codescape
import sys
import time
import os
import gdb
import Tkinter, tkFileDialog
import ctypes
import re
#MD Side
AP_REG_BASE=0xC0000000
MD_REG_BASE=0xA0000000
#AP side
#AP_REG_BASE=0x10000000
#MD_REG_BASE=0x20000000
def memory_write( mem_addr, set_value ):
gdb_cmd = 'set *' + str(mem_addr) + '=' + str(set_value)
gdb.execute(gdb_cmd)
def memory_read(mem_addr):
gdb_cmd = 'x/x ' + str(mem_addr)
mem_value = gdb.execute(gdb_cmd, to_string=True)
mem_value = mem_value[12:23]
hex_int = int(mem_value, 16)
return hex_int
def bus_dump_mem( file_name, start_addr, end_addr):
gdb_cmds = [
'monitor mips bus_read on',
'dump memory ' + str(file_name) + ' ' + str(start_addr) + ' ' + str(end_addr),
'monitor mips bus_read off'
]
for cmd in gdb_cmds:
retval = gdb.execute(cmd, to_string=True)
def core_dump_mem( file_name, start_addr, end_addr):
gdb_cmds = [
'monitor mips bus_read off',
'dump binary memory ' + str(file_name) + ' ' + str(start_addr) + ' ' + str(end_addr),
]
for cmd in gdb_cmds:
retval = gdb.execute(cmd, to_string=True)
def symbol_read(symbol):
gdb_cmd = 'p ' + symbol
mem_value = gdb.execute(gdb_cmd, to_string=True)
return mem_value
def dump_sys_mem():
result = symbol_read('SysMemoryInfo')
# $2 = {16384, 4103412, 79691776, 0, ... }
m = re.search(r'{(.+?)}', result)
sys_mem_arr = m.group(1).split(',')
print 'total regions: ', len(sys_mem_arr)/2
print sys_mem_arr
for i in range(2, len(sys_mem_arr), 2):
addr = int(sys_mem_arr[i],10)
size = int(sys_mem_arr[i+1],10)
print i,"start to dump", format(addr, '#010x'), format(size, '#x')
if size != 0 and size != 0xFFFFFFFF:
#seg_size = 102400
#for j in range(addr, addr+size-seg_size, seg_size):
# print " start to dump segment", format(j, '#010x'), format(seg_size, '#x')
# core_dump_mem('sys_mem_'+format(j, '#010x')+'.bin', j, j+seg_size)
core_dump_mem('sys_mem_'+format(addr, '#010x')+'.bin', addr, addr+size)
if __name__ == "__main__":
print "=== Start Dump Mem ==="
tStart = time.time()
dump_sys_mem()
tEnd = time.time()
print "=== End Dump Mem ==="
print "elapsed time %f sec" % (tEnd - tStart)
# tStart = time.time()
# bus_dump_mem('a.bin', 0x0, 0x2000)
# tEnd = time.time()
# print "bus_dump_mem cost %f sec" % (tEnd - tStart)
# tStart = time.time()
# core_dump_mem('b.bin', 0x0, 0x2000)
# tEnd = time.time()
# print "core_dump_mem cost %f sec" % (tEnd - tStart)
#