查看“︁Debug:coredump”︁的源代码
←
Debug:coredump
跳转到导航
跳转到搜索
因为以下原因,您没有权限编辑该页面:
不允许您执行您所请求的操作。
您可以查看和复制此页面的源代码。
1. 在CPU触发异常时,会把当前的内存中的数据dump到串口中,用户可以保存到日志为coredump.log,coredump格式如下。 -+-+-+- BFLB COREDUMP v0.0.1 +-+-+-+ <nowiki>------</nowiki> DATA BEGIN 62xxxxxx@00000400@predefined ------ ... ... <nowiki>------</nowiki> END R6yo3A== ------ 2. 将这些数据导入到gdb server中,可以使用gdb来对这些数据进行解析,获得异常发生时的一些状态。比如哪个进程发生了异常,别的进程的状态是什么样子的。 ./tools/byai/coredump.py命令会创建一个gdb server,创建虚拟的32bit内存空间,把elf文件与coredump文件加载到内存空间中,并自动打开gdb client连接。 usage: coredump.py [-h] [-x GDB_INIT] log_file elf_file 3. 如下的例子,可见coredump.py传入coredump.log与elf后,这可打印当前运行的任务,可以使用bouffalo_sdk.gdb内置的一些函数来对某个TCB进行backtrace。 <nowiki>:</nowiki>~/bouffalo_sdk$ ./tools/byai/coredump.py coredump_20260604b/coredump.log coredump_20260604b/image_transmission_bl616cl.elf Auto-selected free port: 50659 Starting local GDB server on port 50659... GDB server ready. Connect from GDB using: (gdb) file coredump_20260604b/image_transmission_bl616cl.elf (gdb) target remote localhost:50659 (gdb) source /home/wyb/repo/new4/bouffalo_sdk/tools/bouffalo_sdk.gdb Auto-starting GDB client: riscv64-unknown-elf-gdb -ex file coredump_20260604b/image_transmission_bl616cl.elf -ex target remote localhost:50659 -x /home/wyb/repo/new4/bouffalo_sdk/tools/bouffalo_sdk.gdb ... ... Reading symbols from coredump_20260604b/image_transmission_bl616cl.elf... Remote debugging using localhost:50659 Loading ELF PT_LOAD data from: coredump_20260604b/image_transmission_bl616cl.elf Loaded 6 ELF PT_LOAD segments, 623074 bytes at LMA Initialized 6 ELF PT_LOAD segments at LMA from coredump_20260604b/image_transmission_bl616cl.elf Parsing coredump from: coredump_20260604b/coredump.log Found 1 COREDUMP sections, processing the last one Parsed 4460 memory blocks Loaded 4460 coredump memory blocks at VMA from coredump_20260604b/ReceivedTofile-COM5-2026_6_4_11-43-48.log Target local: Client connected from 127.0.0.1:38348 0x00000000 in ?? () (gdb) p pxCurrentTCB $1 = (TCB_t * volatile) 0x880f49d4 (gdb) task_dump 0x880f49d4 $2 = {pxTopOfStack = 0x60fd83d4, xStateListItem = {xItemValue = 0, pxNext = 0x60fd0084 <pxReadyTasksLists+108>, pxPrevious = 0x60fd0084 <pxReadyTasksLists+108>, pvOwner = 0x880f49d4, pvContainer = 0x60fd007c <pxReadyTasksLists+100>}, xEventListItem = {xItemValue = 27, pxNext = 0x880f4974, pxPrevious = 0x880f4974, pvOwner = 0x880f49d4, pvContainer = 0x0}, uxPriority = 5, pxStack = 0x60fd7560, pcTaskName = "shell_task\000\000\000\000\000", pxEndOfStack = 0x60fd8550, uxCriticalNesting = 0, uxTCBNumber = 4, uxTaskNumber = 0, uxBasePriority = 5, uxMutexesHeld = 0, pxTaskTag = 0x0, pvThreadLocalStoragePointers = {0x0}, pvThreadLocalStoragePointersDelCallback = {0x0}, ulRunTimeCounter = 65, ulNotifiedValue = {0, 0, 0, 0}, ucNotifyState = "\000\000\000", ucStaticallyAllocated = 0 '\000', ucDelayAborted = 0 '\000', iTaskErrno = 0} FPU is CLEAN (FS=0x2) - using offset +31 words mstatus: 0x5880 stack_top: 0x60fd83d4 <nowiki>#</nowiki>0 0x800729b6 in shell_memtrace (argc=<optimized out>, argv=<optimized out>) at ./components/shell/shell.c:93 <nowiki>#</nowiki>1 0x80072f62 in shell_exec_cmd (retp=<optimized out>, length=<optimized out>, cmd=<optimized out>) at ./components/shell/shell.c:533 <nowiki>#</nowiki>2 shell_exec (cmd=0x60fd3916 <_shell+606> "memtrace", length=21) at ./components/shell/shell.c:601 <nowiki>#</nowiki>3 0x80073136 in shell_handler (data=<optimized out>) at ./components/shell/shell.c:794 <nowiki>#</nowiki>4 0x80073944 in shell_task (pvParameters=<optimized out>) at ./components/shell/shell_freertos.c:135 <nowiki>#</nowiki>5 0x00000000 in ?? () Backtrace stopped: frame did not save the PC (gdb) task_list_wait tcb: 0x880f7298 mstatus: 0x5880 [FPU_CLEAN] name: xxxx tcb: 0x880f4d20 mstatus: 0x5880 [FPU_CLEAN] name: tcpip_thread tcb: 0x60fccc08 mstatus: 0x5880 [FPU_CLEAN] name: display_thread tcb: 0x60fc8ae0 mstatus: 0x5880 [FPU_CLEAN] name: MainTask tcb: 0x880f73c4 mstatus: 0x5880 [FPU_CLEAN] name: xxxx tcb: 0x880f6850 mstatus: 0x5880 [FPU_CLEAN] name: xxxx tcb: 0x880f6e28 mstatus: 0x80007880 [FPU_CLEAN] name: xxxx tcb: 0x880f5124 mstatus: 0x80007880 [FPU_CLEAN] name: xxxx tcb: 0x60fd18c8 mstatus: 0x5880 [FPU_CLEAN] name: Tmr Svc tcb: 0x880f4aec mstatus: 0x5800 [FPU_CLEAN] name: wifi fw (gdb) task_list_ready tcb: 0x60fd1840 mstatus: 0x5880 [FPU_CLEAN] name: IDLE tcb: 0x880f49d4 mstatus: 0x5880 [FPU_CLEAN] name: shell_task Q:如何退出 A:按CTRL+D或者CTRL+C可以退出coredump.py Q:日志的格式,多个COREDUMP在同一个日志会怎么样 A:日志支持UTF8,UTF32LE、BE,CRLF/LF,基本上默认的格式不需要转换都支持,当日志中有多个保存的coredump时,会自动选择最后一个。 Q:有时候会有如下打印,是什么意思 crc check addr: 88021400, length: 00000400, end_crc: eebd05e9, crc: 8981de62 crc check addr: 8806e000, length: 00000400, end_crc: 2f25c5c9, crc: a9c6462e crc check addr: 880ac800, length: 00000400, end_crc: 28c04c90, crc: 79f28ecb crc check addr: 880c5400, length: 00000400, end_crc: 70dadb0a, crc: 8bcde759 A:在通过串口把内存中的数据dump出来时,尤其是带有PSRAM的情况,大量的数据通过串口通信可能会出错,这些是发现某段的CRC校验出错,很多时候一小段出错并不影响DEBUG。 Q:如何简单判断ELF与COREDUMP的对应关系 A:可以通过读取ELF文件与芯片上电时的时间来对比 ELF文件中的Build时间: ``` riscv64-unknown-elf-objdump -s coredump_20260604b/image_transmission_bl616cl.elf |grep -A 3 Build 80097030 0a000000 4275696c 643a3039 3a35383a ....Build:09:58: 80097040 35342c20 4a756e20 20342032 3032360d 54, Jun 4 2026. 80097050 0a000000 436f7079 72696768 74202863 ....Copyright (c 80097060 29203230 32322042 6f756666 616c6f6c ) 2022 Bouffalol ``` 启动日志中的Build时间: ``` Build:09:58:54, Jun 4 2026 ```
返回
Debug:coredump
。
导航菜单
个人工具
登录
命名空间
页面
讨论
大陆简体
查看
阅读
查看源代码
查看历史
更多
搜索
导航
首页
最近更改
随机页面
MediaWiki帮助
工具
链入页面
相关更改
特殊页面
页面信息