blob: dc325e0bf7ea7cd8969732db758f156fce8a40a6 [file] [log] [blame]
rjw6c1fd8f2022-11-30 14:33:01 +08001#from imgtec import codescape
2import sys
3import time
4import os
5import gdb
6import Tkinter, tkFileDialog
7import ctypes
8import re
9
10#MD Side
11AP_REG_BASE=0xC0000000
12MD_REG_BASE=0xA0000000
13
14#AP side
15#AP_REG_BASE=0x10000000
16#MD_REG_BASE=0x20000000
17
18def memory_write( mem_addr, set_value ):
19 gdb_cmd = 'set *' + str(mem_addr) + '=' + str(set_value)
20 gdb.execute(gdb_cmd)
21
22def 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
29def 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
38def 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
46def symbol_read(symbol):
47 gdb_cmd = 'p ' + symbol
48 mem_value = gdb.execute(gdb_cmd, to_string=True)
49 return mem_value
50
51def 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
70if __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 #