#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) | |
# |