gdb查看ip_addr

GDB调用函数,查看struct in_addr转换为字符串的形式.

(gdb) p net_ch.addr

$2 = {s_addr = 33559980}
(gdb) p net_ch.bcast
$3 = {s_addr = 4294907308}
(gdb) p net_ch.addr
$4 = {s_addr = 33559980}
(gdb) p net_ch.gateway 
$5 = {s_addr = 16782764}
(gdb) p (char *)inet_ntoa(33559980)
$6 = 0x7ffff7fbf758 "172.21.0.2"
(gdb) p (char *)inet_ntoa(0x33559980)
$7 = 0x7ffff7fbf758 "128.153.85.51"
(gdb) p (char *)inet_ntoa(33559980)
$8 = 0x7ffff7fbf758 "172.21.0.2"
(gdb) p (char *)inet_ntoa(4294907308)
$9 = 0x7ffff7fbf758 "172.21.255.255"
(gdb) p (char *)inet_ntoa(16782764)
$10 = 0x7ffff7fbf758 "172.21.0.1"
import json import os import threading #import ansicon import PySimpleGUI as sg from threading import Thread import functools import telnetlib import time import re ENABLE_PRINT = 1 RESPONSE = "" PREV_CMD = "" END_STR = "ROUTER_MPU /home\x1b[m # " STOP_FLAG = "NNN" def bios_send(s): result = [] while len(s) > 0: if len(s) <= 10: result.append(s) break else: sub_str = s[:10] result.append(sub_str) s = s[10:] for r in result: send(r) time.sleep(0.150) send(b"\r\n") def timeout(seconds_before_timeout): def deco(func): @functools.wraps(func) def wrapper(*args, **kwargs): res = [Exception('function [%s] timeout [%s seconds] exceeded!' % (func.__name__, seconds_before_timeout))] def newFunc(): try: res[0] = func(*args, **kwargs) except Exception as e: res[0] = e t = Thread(target=newFunc) t.daemon = True try: t.start() t.join(seconds_before_timeout) except Exception as e: print('error starting thread') raise e ret = res[0] if isinstance(ret, BaseException): raise ret return ret return wrapper return deco @timeout(5) def connect(HOST,PORT): tn = telnetlib.Telnet(HOST, PORT) return tn def send(content): global PREV_CMD if isinstance(content,bytes): tn.write(content) else: if not content.endswith("\n"): content+="\n" tn.write(content.encode('utf-8')) PREV_CMD = content def receive(timeout = 5): global RESPONSE global tn RESPONSE = tn.read_until(b'\n',timeout=timeout).decode('utf-8') return RESPONSE def send_when_receive(condition_cmd): global RESPONSE temp_response = RESPONSE for receive_content, send_content in condition_cmd: if not receive_content: send(send_content) else: if receive_content in temp_response: print("检测到打印:{}, 下发命令:{}".format(receive_content,temp_response)) send(send_content) time.sleep(1) def receive_timeout(timeout = 5): global tn response = tn.read_until(b'No end string, read until timeout\n',timeout=timeout).decode('utf-8') return response def receive_all(timeout = 5,end_str = END_STR): global RESPONSE global tn RESPONSE = "" prevtemp = "" for i in range(timeout*5): temp = receive_timeout(0.5) if temp: print(temp, end="") RESPONSE += temp if prevtemp.endswith(end_str) and temp == "": break prevtemp = temp return RESPONSE def record_time(): global LOG global RESPONSE global tn #send("reset") send("reboot") LOG = [] LOG.append((time.time(),"START")) while True: RESPONSE = tn.read_until(b'\n') try: RESPONSE = RESPONSE.decode('utf-8') if ENABLE_PRINT: print(RESPONSE) #print(RESPONSE) LOG.append((time.time(),RESPONSE)) if STOP_FLAG in RESPONSE: break except: if ENABLE_PRINT: print(RESPONSE) def calculate_time(): global SIMPLE_LOG prev_t =LOG[0][0] for (t,line) in LOG: if ("SLT_PrintStart@TestCase@" in line and "@START" in line): SIMPLE_LOG.append((t-prev_t,line.split("@")[2]+"_"+line.split("@")[3]+"_init")) prev_t = t elif ("SLT_PrintStart@TestCase@" in line and "@PASS" in line) or ("SLT_PrintStart@TestCase@" in line and "@FAIL" in line): SIMPLE_LOG.append((t-prev_t,line.split("@")[2]+"_"+line.split("@")[3])) prev_t = t elif(".....H.SM. .A .st.a.te.:" in line): SIMPLE_LOG.append((t-prev_t,"BIOS_init")) prev_t = t elif("Now.........................................Start rbos" in line or "Rbos already run ! Now Go to Rtos" in line): SIMPLE_LOG.append((t,"BIOS_test_cost")) prev_t = t elif("RBOS_TAISHAN_TEST_INDEX_ADDR" in line): SIMPLE_LOG.append(t-prev_t,"RBOS_test") prev_t = t elif("SLT_PrintStart@KeyInfor@SELF_DEF@SLT_Version@" in line): SIMPLE_LOG.append((t-prev_t,"sdk.out_boot")) prev_t = t elif("Uncompressing Linux... done, booting the 5.x kernel." in line): SIMPLE_LOG.append((t-prev_t,"Linux_boot")) prev_t = t SIMPLE_LOG.append((t-prev_t,"Error Code")) SIMPLE_LOG.append((LOG[-1][0]-LOG[0][0],"Total Time")) def getPrint(): while running: RESPONSE = tn.read_until(b'\n').decode('utf-8') print(RESPONSE) def getSdkOut(): send("n") send("q") send("y") FTP_IP = values["FTP_IP"] BOARD_LOCAL_IP= values["board_local_ip"] send("export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/home") send("ifconfig eth0 " + BOARD_LOCAL_IP + "up") time.sleep(0.01) time.sleep(0.02) send("cd /home") send("rm sdk.out") time.sleep(0.02) send("ftpget -u 1260 -p 1260 " + FTP_IP + " /home/sdk.out sdk.out") receive_all(10) connected = False if "can't connect to remote host" in RESPONSE: temp = 0 for i in range(5): send("rmmod hi1260_mii_mac.ko") send("/home/startup.sh 192.168.0.53") send("ifconfig eth0 " + BOARD_LOCAL_IP) receive_all(2) send("ping " + FTP_IP) receive_all(5) if "ms" in RESPONSE: connected = True send(b"\x03") break temp = i if connected: send("ftpget -u 1260 -p 1260 " + FTP_IP + " /home/sdk.out sdk.out") receive_all(10) send("chmod +x *") send("./gdb sdk.out") send("b slt_test_user_init") send("r") # tn.read_al receive_all(1, end_str="@SLT_PrintEnd\r\r\n") send(b"\x03") def print_every_100s(): global stop_loop global interval global loop_msg stop_loop = 0 while True: print("定时发送,间隔{}秒".format(interval)) send(loop_msg) # 等待100s time.sleep(interval) if stop_loop != 0: # 变量发生改变,跳出循环 stop_loop = 0 break def is_positive_integer(s): pattern = r'^[1-9]\d*$' if re.match(pattern, s): return True else: return False # 保存用户输入到文件 def save_config(): with open(DATA_FILE, 'w') as file: json.dump({ "IP": values["IP"], "port": values["port"], "FTP_IP": values["FTP_IP"], "芯片名称": values["芯片名称"], '发送信息': values["发送信息"], 'interval': values["interval"], "start_addr" : values["start_addr"], "end_addr": values["end_addr"], "文件FTP路径": "", }, file) DATA_FILE = 'pyremote3默认配置.json' default_data = { "IP": "71.19.0.120", "port": "", "FTP_IP": "71.19.0.120", "芯片名称": "Hi1260SV100", '发送信息': "", "board_local_ip": "71.19.0.53", 'interval': "", "start_addr" : "", "end_addr": "", "文件FTP路径": "", } if os.path.exists(DATA_FILE): try: with open(DATA_FILE, 'r') as file: data = json.load(file) # 更新默认数据为用户文件中的数据,但只保留我们关心的键 default_data.update({k: data[k] for k in default_data if k in data}) print(default_data) except json.JSONDecodeError: print("?") # 如果文件损坏或格式不正确,则使用默认数据重新创建文件 with open(DATA_FILE, 'w') as file: json.dump(default_data, file) else: # 如果文件不存在,则创建文件并写入默认数据 with open(DATA_FILE, 'w') as file: json.dump(default_data, file) #ansicon.load() output = sg.Output(size=(60, 20)) layout = [ [sg.Text('IP:'),sg.Input(key="IP", default_text=default_data["IP"], enable_events=True),sg.Text('Port:'),sg.Input(key="port", default_text="1001", enable_events=True)], [sg.Button('连接')], #[sg.Text('网关'),sg.Input(key="网关", default_text="192.168.0.100", enable_events=True)], #[sg.Text("条件1:")], #[sg.Text('检测到:'),sg.Input(key="receive1", default_text="hello", enable_events=True),sg.Text('下发命令:'),sg.Input(key="send1", default_text="world", enable_events=True)], [sg.Text("发送信息"),sg.Input(key='发送信息', size=(50, 50), default_text=default_data["发送信息"])], [sg.Button('ROUTER_MPU下发送'),sg.Button('Shell下发送'),sg.Text('每隔'),sg.Input(key='interval', default_text=default_data["interval"],size=(5,1)),sg.Text("秒"),sg.Button('定时发送'),sg.Button("停止定时发送")], [sg.Button('接收1s')], [sg.Text('芯片名称'),sg.Input(key="芯片名称", default_text=default_data["芯片名称"], enable_events=True),sg.Text('文件FTP路径'),sg.Input(key="文件FTP路径", default_text=default_data["文件FTP路径"], enable_events=True)], [sg.Text('FTP_IP:'),sg.Input(key="FTP_IP", default_text=default_data["FTP_IP"], enable_events=True),sg.Text('单板IP:'),sg.Input(key="board_local_ip", default_text=default_data["board_local_ip"], enable_events=True)], [sg.Text("SLT测试用"),sg.Button('重新获取sdk.out'),sg.Button("一键升级MT1"),sg.Button("一键升级MT2")], [sg.Button("使用说明")], [sg.Text('起始地址'),sg.Input(key='start_addr', default_text=default_data["start_addr"],size=(12,1)),sg.Text('结束地址'),sg.Input(key='end_addr', default_text=default_data["end_addr"],size=(12,1)),sg.Button('dump寄存器')], [output], ] window = sg.Window('远程单板连接', layout) start = False initial = False running = False stop_loop = 0 interval = 10000 loop_msg = "" isConnected = False while True: event, values = window.read() if initial == False: initial = True #f = open("settings.txt", 'rw') #settings = json.load(f) #window["IP"].update(value = settings["IP"]) #window["port"].update(value=settings["port"]) #if running: # #RESPONSE = tn.read_until(b'\n').decode('utf-8') # t = threading.Thread(target=getPrint) # t.start() #send_when_receive(values["receive1"], values["send1"]) if event == sg.WINDOW_CLOSED: break if event == "连接": ip = values["IP"] port = values["port"] #settings = {'IP': values['IP'], # 'port': values['port']} #f = open("settings.txt", 'w') #json.dump(settings, f) #f.close() #print("cd /home\r\n\x1b[32mROUTER_MPU /home\x1b[m # export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/home\r\n") try: tn = connect(ip, port) except Exception as e: print("链接失败,请检查IP地址和port。详细错误信息如下:") print(e) else: print("连接成功!") isConnected = True running = True t0 = threading.Thread(target=getPrint) t0.start() elif event == "定时发送": save_config() # 创建一个线程,用于每隔100s打印一次 if is_positive_integer(values['interval']): loop_msg = values["发送信息"] interval = int(values['interval']) loop_thread = threading.Thread(target=print_every_100s) loop_thread.start() else: sg.popup("请在每隔' '秒处输入正整数") elif event == "停止定时发送": stop_loop = 1 elif event == "ROUTER_MPU下发送": save_config() if isConnected: if values["发送信息"]: send(values["发送信息"]) else: sg.popup("请先连接单板") continue elif event == "Shell下发送": save_config() if isConnected: if values["发送信息"]: bios_send(values["发送信息"]) else: sg.popup("请先连接单板") continue elif event == "重新获取sdk.out": save_config() if not isConnected: sg.popup("请先连接单板") continue running = False time.sleep(0.01) t = threading.Thread(target=getSdkOut) t.start() running = True time.sleep(1) t0 = threading.Thread(target=getPrint) elif event == "接收1s": save_config() if not isConnected: sg.popup("请先连接单板") continue response = receive_timeout(1) print(response) running = True #elif event == "停止自动下发": # running = False elif event == "使用说明": sg.popup("使用IPOP共享串口后,在第一行输入IP地址和Port(其中Port是IPOP共享的端口,IP地址就是本机的IP,可在terminal里输入ipconfig查看),然后点连接。连接成功后填写FTP_IP、单板IP和芯片名称后,即可一键升级。\n" + "当前的芯片名称、文件FTP路径和、FTP_IP和单板IP会生成如下的命令:\n"+ "ifconfig eth0 " + values["board_local_ip"]+"\n"+ "ftp -get 0xa000000 eth0 " + values["FTP_IP"] + " " +os.path.join(values["文件FTP路径"], values["芯片名称"]+"_SLT_MTx_FLASHx_PARTx.bin 1260 1260\n")+"......") elif event == "一键升级MT1": save_config() if not isConnected: sg.popup("请先连接单板") continue running = False flag = True result = 0 bios_send("ifconfig eth0 " + values["board_local_ip"]) if flag: bios_send("ftp -get 0xa000000 eth0 " + values["FTP_IP"] + " " +os.path.join(values["文件FTP路径"], values["芯片名称"]+"_SLT_MT1_FLASH0_PART0.bin 1260 1260")) while flag: prev_response = receive_all(5) if "File Download Successfully" in prev_response + RESPONSE: bios_send("flash -w 0 0x0000000 0xa000000 0x2000000") receive_all(3) while "ret=0" not in RESPONSE: receive_all(5) result += 1 break elif "failed" in RESPONSE: flag = False break if flag: bios_send("ftp -get 0xa000000 eth0 " + values["FTP_IP"] + " " +os.path.join(values["文件FTP路径"], values["芯片名称"]+"_SLT_MT1_FLASH0_PART1.bin 1260 1260")) while flag: prev_response = receive_all(5) if "File Download Successfully" in prev_response + RESPONSE: bios_send("flash -w 0 0x2000000 0xa000000 0x2000000") while "ret=0" not in RESPONSE: receive_all(5) result += 1 break elif "failed" in RESPONSE: flag = False break if flag: bios_send("ftp -get 0xa000000 eth0 " + values["FTP_IP"] + " " +os.path.join(values["文件FTP路径"], values["芯片名称"]+"_SLT_MT1_FLASH1_PART0.bin 1260 1260")) while flag: prev_response = receive_all(5) if "File Download Successfully" in prev_response + RESPONSE: bios_send("flash -w 0 0x4000000 0xa000000 0x2000000") while "ret=0" not in RESPONSE: receive_all(5) result += 1 break elif "failed" in RESPONSE: flag = False break if flag: bios_send("ftp -get 0xa000000 eth0 " + values["FTP_IP"] + " " +os.path.join(values["文件FTP路径"], values["芯片名称"]+"_SLT_MT1_FLASH1_PART1.bin 1260 1260")) while flag: prev_response = receive_all(5) if "File Download Successfully" in prev_response + RESPONSE: bios_send("flash -w 0 0x6000000 0xa000000 0x2000000") while "ret=0" not in RESPONSE: receive_all(5) result += 1 break elif "failed" in RESPONSE: flag = False break if result == 4: sg.popup("升级成功") else: sg.popup("升级失败,请检查网口配置后重试") running = True t0.start() elif event == "一键升级MT2": save_config() if not isConnected: sg.popup("请先连接单板") continue flag = True result = 0 running = False bios_send("ifconfig eth0 " + values["board_local_ip"]) if flag: bios_send("ftp -get 0xa000000 eth0 " + values["FTP_IP"] + " " +os.path.join(values["文件FTP路径"], values["芯片名称"]+"_SLT_MT2_FLASH0_PART0.bin 1260 1260")) while flag: prev_response = receive_all(5) if "File Download Successfully" in prev_response + RESPONSE: bios_send("flash -w 0 0x0000000 0xa000000 0x2000000") receive_all(3) while "ret=0" not in RESPONSE: receive_all(5) result += 1 break elif "failed" in RESPONSE: flag = False break if flag: bios_send("ftp -get 0xa000000 eth0 " + values["FTP_IP"] + " " +os.path.join(values["文件FTP路径"], values["芯片名称"]+"_SLT_MT2_FLASH0_PART1.bin 1260 1260")) while flag: prev_response = receive_all(5) if "File Download Successfully" in prev_response + RESPONSE: bios_send("flash -w 0 0x2000000 0xa000000 0x2000000") while "ret=0" not in RESPONSE: receive_all(5) result += 1 break elif "failed" in RESPONSE: flag = False break if flag: bios_send("ftp -get 0xa000000 eth0 " + values["FTP_IP"] + " " + os.path.join(values["文件FTP路径"], values["芯片名称"]+"_SLT_MT2_FLASH1_PART0.bin 1260 1260")) while flag: prev_response = receive_all(5) if "File Download Successfully" in prev_response + RESPONSE: bios_send("flash -w 0 0x4000000 0xa000000 0x2000000") while "ret=0" not in RESPONSE: receive_all(5) result += 1 break elif "failed" in RESPONSE: flag = False break if flag: bios_send("ftp -get 0xa000000 eth0 " + values["FTP_IP"] + " " +os.path.join(values["文件FTP路径"], values["芯片名称"]+"_SLT_MT2_FLASH1_PART1.bin 1260 1260")) while flag: prev_response = receive_all(5) if "File Download Successfully" in prev_response + RESPONSE: bios_send("flash -w 0 0x6000000 0xa000000 0x2000000") while "ret=0" not in RESPONSE: receive_all(5) result += 1 break elif "failed" in RESPONSE: flag = False break if result == 4: sg.popup("升级成功") else: sg.popup("升级失败,请检查网口配置后重试") running = True t0.start() elif event == "dump寄存器": save_config() if not isConnected: sg.popup("请先连接单板") continue start_addr = values["start_addr"] end_addr = values["end_addr"] count = 0 try: for i in range(eval(start_addr), eval(end_addr) + 1): count +=1 if i % 4 == 0: send('devmem 0x{:04x}'.format(i)) if count % 400 == 0: print("等待1s") time.sleep(1) if count>4000: print("寄存器过多 暂时停止dump") break except: sg.popup("无法识别地址,请用十六进制或十进制数填写开始和结束地址") window.close() 请将上述代码的前端GUI改为PyQt
最新发布
07-01
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值