diff --git a/tools/pynuttx/nxgdb/dmesg.py b/tools/pynuttx/nxgdb/dmesg.py index 8f4a487c5f9..c4c8b028091 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---")