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 <yangao1@xiaomi.com>
This commit is contained in:
yangao1 2025-01-13 21:10:40 +08:00 committed by Xiang Xiao
parent d1be769038
commit ded5a6aae5

View file

@ -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---")