From ded5a6aae558e8e2e6642ae504d6d558387a7336 Mon Sep 17 00:00:00 2001 From: yangao1 Date: Mon, 13 Jan 2025 21:10:40 +0800 Subject: [PATCH] nxgdb/dmesg.py:add use gdb dump rpmsg_syslog (gdb) dmesg RAM log: [01/06 02:27:05] [ 1] [cp] reset mode:1 ... [01/06 02:27:05] [ 1] [cp] Dump board_reset backtrace: [01/06 02:27:05] [ 1] [cp] sched_dumpstack: backtrace| 1: 0x10a0d880 0x10a0a78e 0x10a0d8b6 0x10a0f29e 0x10a0f182 [01/06 02:27:05] [ 1] [cp] Time: Mon Jan 6 02:27:05 2025 ---END of RAMLOG RPMSG syslog: dumpstack: backtrace|10: 0x10a0d880 0x10a0a78e 0x10a110de 0x10a3a482 0x10a3c4fa 0x10a23358 0x10a4aaee 0x10a34a7c [01/06 02:27:05] [ 1] [cp] sched_dumpstack: backtrace|10: 0x10a2330a 0x10a0f1f4 [01/06 02:27:05] [ 1] [cp] sched_dumpstack: backtrace|11: 0x10a0d880 0x10a0a78e 0x10a110de 0x10a3a482 0x10a15152 0x10a0f182 [01/06 02:27:05] [ 1] [cp] sched_dumpstack: backtrace|15: 0x10a0d880 0x10a0a78e 0x10a0d8b6 0x10a174d0 0x10a3a482 0x10a3c4fa 0x10a222ee 0x10a18c66 [01/06 02:27:05] [ 1] [cp] Time: Mon Jan 6 02:27:05 2025 ---END of RPMSG SYSLOG--- Signed-off-by: yangao1 --- tools/pynuttx/nxgdb/dmesg.py | 35 ++++++++++++++++++++++++----------- 1 file changed, 24 insertions(+), 11 deletions(-) diff --git a/tools/pynuttx/nxgdb/dmesg.py b/tools/pynuttx/nxgdb/dmesg.py index 8f4a487c5f..c4c8b02809 100644 --- a/tools/pynuttx/nxgdb/dmesg.py +++ b/tools/pynuttx/nxgdb/dmesg.py @@ -25,18 +25,17 @@ import gdb from . import utils CONFIG_RAMLOG_SYSLOG = utils.get_symbol_value("CONFIG_RAMLOG_SYSLOG") +CONFIG_SYSLOG_RPMSG = utils.get_symbol_value("CONFIG_SYSLOG_RPMSG") class Dmesg(gdb.Command): def __init__(self): - if CONFIG_RAMLOG_SYSLOG: + if CONFIG_RAMLOG_SYSLOG or CONFIG_SYSLOG_RPMSG: super().__init__("dmesg", gdb.COMMAND_USER) - def _get_buf(self): - sysdev = utils.gdb_eval_or_none("g_sysdev") - if not sysdev: - gdb.write("RAM log not available.\n") - return None + def _get_ramlog(self): + if not (sysdev := utils.gdb_eval_or_none("g_sysdev")): + return "RAM log not available" rl_header = sysdev["rl_header"] rl_bufsize = sysdev["rl_bufsize"] @@ -55,17 +54,31 @@ class Dmesg(gdb.Command): return buf.decode("utf-8", errors="replace") + def _get_rpmsg_syslog(self): + if not (priv := utils.gdb_eval_or_none("g_syslog_rpmsg")): + return "RPMsg syslog not avaliable" + + buffer = bytes(gdb.selected_inferior().read_memory(priv.buffer, priv.size)) + buf = buffer.replace(b"\0", "␀".encode("utf-8")) + return buf.decode("utf-8", errors="replace") + def diagnose(self, *args, **kwargs): - buf = self._get_buf() + ramlog = self._get_ramlog() + rpmsg_syslog = self._get_rpmsg_syslog() + return { - "title": "RAM log", + "title": "RAM log and RPMsg Syslog", "summary": ( - f"Buffer length:{len(buf)} bytes" if buf else "Buffer not available" + f"RAM log length: {len(ramlog)} bytes. RPMSG log length:{len(rpmsg_syslog)} bytes." ), "result": "info", "command": "dmesg", - "message": buf, + "message": f"RAM log:\n{ramlog}\n RPMSG syslog:{rpmsg_syslog}", } def invoke(self, args, from_tty): - gdb.write(f"{self._get_buf()}\n") + ramlog = self._get_ramlog() + rpmsg_syslog = self._get_rpmsg_syslog() + + print(f"RAM log:{ramlog}\n---END of RAMLOG") + print(f"RPMSG syslog:{rpmsg_syslog}\n---END of RPMSG SYSLOG---")