rjw | 6c1fd8f | 2022-11-30 14:33:01 +0800 | [diff] [blame] | 1 | #from imgtec import codescape
|
| 2 | import sys
|
| 3 | import time
|
| 4 | import os
|
| 5 | import gdb
|
| 6 | import Tkinter, tkFileDialog
|
| 7 | import ctypes
|
| 8 | import re
|
| 9 |
|
| 10 | #MD Side
|
| 11 | AP_REG_BASE=0xC0000000
|
| 12 | MD_REG_BASE=0xA0000000
|
| 13 |
|
| 14 | #AP side
|
| 15 | #AP_REG_BASE=0x10000000
|
| 16 | #MD_REG_BASE=0x20000000
|
| 17 |
|
| 18 | def memory_write( mem_addr, set_value ):
|
| 19 | gdb_cmd = 'set *' + str(mem_addr) + '=' + str(set_value)
|
| 20 | gdb.execute(gdb_cmd)
|
| 21 |
|
| 22 | def memory_read(mem_addr):
|
| 23 | gdb_cmd = 'x/x ' + str(mem_addr)
|
| 24 | mem_value = gdb.execute(gdb_cmd, to_string=True)
|
| 25 | mem_value = mem_value[12:23]
|
| 26 | hex_int = int(mem_value, 16)
|
| 27 | return hex_int
|
| 28 |
|
| 29 | def bus_dump_mem( file_name, start_addr, end_addr):
|
| 30 | gdb_cmds = [
|
| 31 | 'monitor mips bus_read on',
|
| 32 | 'dump memory ' + str(file_name) + ' ' + str(start_addr) + ' ' + str(end_addr),
|
| 33 | 'monitor mips bus_read off'
|
| 34 | ]
|
| 35 | for cmd in gdb_cmds:
|
| 36 | retval = gdb.execute(cmd, to_string=True)
|
| 37 |
|
| 38 | def core_dump_mem( file_name, start_addr, end_addr):
|
| 39 | gdb_cmds = [
|
| 40 | 'monitor mips bus_read off',
|
| 41 | 'dump binary memory ' + str(file_name) + ' ' + str(start_addr) + ' ' + str(end_addr),
|
| 42 | ]
|
| 43 | for cmd in gdb_cmds:
|
| 44 | retval = gdb.execute(cmd, to_string=True)
|
| 45 |
|
| 46 | def symbol_read(symbol):
|
| 47 | gdb_cmd = 'p ' + symbol
|
| 48 | mem_value = gdb.execute(gdb_cmd, to_string=True)
|
| 49 | return mem_value
|
| 50 |
|
| 51 | def dump_sys_mem():
|
| 52 | result = symbol_read('SysMemoryInfo')
|
| 53 | # $2 = {16384, 4103412, 79691776, 0, ... }
|
| 54 | m = re.search(r'{(.+?)}', result)
|
| 55 | sys_mem_arr = m.group(1).split(',')
|
| 56 | print 'total regions: ', len(sys_mem_arr)/2
|
| 57 | print sys_mem_arr
|
| 58 | for i in range(2, len(sys_mem_arr), 2):
|
| 59 | addr = int(sys_mem_arr[i],10)
|
| 60 | size = int(sys_mem_arr[i+1],10)
|
| 61 | print i,"start to dump", format(addr, '#010x'), format(size, '#x')
|
| 62 | if size != 0 and size != 0xFFFFFFFF:
|
| 63 | #seg_size = 102400
|
| 64 | #for j in range(addr, addr+size-seg_size, seg_size):
|
| 65 | # print " start to dump segment", format(j, '#010x'), format(seg_size, '#x')
|
| 66 | # core_dump_mem('sys_mem_'+format(j, '#010x')+'.bin', j, j+seg_size)
|
| 67 | core_dump_mem('sys_mem_'+format(addr, '#010x')+'.bin', addr, addr+size)
|
| 68 |
|
| 69 |
|
| 70 | if __name__ == "__main__":
|
| 71 |
|
| 72 |
|
| 73 | print "=== Start Dump Mem ==="
|
| 74 | tStart = time.time()
|
| 75 | dump_sys_mem()
|
| 76 | tEnd = time.time()
|
| 77 | print "=== End Dump Mem ==="
|
| 78 | print "elapsed time %f sec" % (tEnd - tStart)
|
| 79 |
|
| 80 | # tStart = time.time()
|
| 81 | # bus_dump_mem('a.bin', 0x0, 0x2000)
|
| 82 | # tEnd = time.time()
|
| 83 | # print "bus_dump_mem cost %f sec" % (tEnd - tStart)
|
| 84 |
|
| 85 | # tStart = time.time()
|
| 86 | # core_dump_mem('b.bin', 0x0, 0x2000)
|
| 87 | # tEnd = time.time()
|
| 88 | # print "core_dump_mem cost %f sec" % (tEnd - tStart)
|
| 89 | # |