zynq中linux应用的远程调试配置

📅 2026/6/30 5:58:02
zynq中linux应用的远程调试配置
Vitis TCF适合规模小,依赖轻的简单测试Window - Show View -target ConnectionsClion GdbServer适合规模大,依赖重的工程windows 和 ubuntu 的clion都可以,但是windows的clion要用wsl里的交叉编译工具程序直接放在 NFS 共享目录编译后无需任何上传开发板本地 GDB将gdb编译进 Petalinux 根文件系统PC上# 进入petalinux工程petalinux-config-crootfs# 菜单路径Filesystem Packages → misc → gdb 勾选 gdb板载完整本地调试器、gdbserver用于CLion远程调试# 保存后重新编译根文件系统petalinux-build-crootfs# 重新打包系统镜像更新SD卡petalinux-package--boot...开发板上# 临时开启core转储重启失效ulimit-cunlimited# 运行程序段错误/崩溃自动生成core转储文件./hello# 用本地gdb加载core看崩溃位置gdb ./hello core.1234(gdb)btlinux中PL寄存器读写脚本PS通过AXI 转 SMMR,APB,AXI 等访问到PL数据和地址统一32位根据寄存器序号读写rootant:~/soft# ./rw.shUsage:# single write./rw.sh widx(dec)value(dec|0xhex|0bbin)# single read./rw.sh ridx(dec)# batch from file./rw.sh-fcmds.txt Examples(cmds.txt lines): w1111w320b110 w320x1110 r32r30rw.sh#!/bin/bashset-euopipefail# Config BASE0x43c00000# AXI-Lite base addressDEVMEM${DEVMEM:-devmem}# override if needed: DEVMEMbusybox devmem# Helpers parse_u32_any(){locals$1if[[-z$s]];thenechoERR: empty value2;return3;fi# 0b... binary (allow underscores)if[[$s~^0[bB][01_]$]];thenlocalbits${s:2}bits${bits//_/}[[$bits~^[01]$]]||{echoERR: invalid binary:$s2;return3;}echo$((2#$bits))return0fi# hex or decimalif[[$s~^0[xX][0-9a-fA-F]$]];thenecho$((s));return0fiif[[$s~^[0-9]$]];thenecho$((10#$s));return0fiechoERR: bad value:$s2return3}rd32_dec(){localidx$1localaddr$((BASE4*idx))localhex$($DEVMEM$addr32)localdec$((hex))printfR [%u] 0x%08X : %u (0x%08X)\n$idx$addr$dec$dec}wr32_dec(){localidx$1val_dec$2localaddr$((BASE4*idx))localval_hexprintf-vval_hex0x%08X$val_dec$DEVMEM$addr32$val_hex/dev/null}do_write(){localidx_str$1val_str$2[[$idx_str~^[0-9]$]]||{echoERR: bad index:$idx_str2;return2;}localidx$((10#$idx_str))localval_dec;val_dec$(parse_u32_any$val_str)||return$?wr32_dec$idx$val_declocalrb_dec;rb_dec$($DEVMEM$((BASE 4* idx))32)rb_dec$((rb_dec))printfW [%u] 0x%08X %u (0x%08X); Rb%u (0x%08X)%s\n\$idx$((BASE4*idx))$val_dec$val_dec$rb_dec$rb_dec\$([[$rb_dec-eq$val_dec]]echo||echo [WARN: mismatch])}usage(){cat2EOF Usage: # single write$0w idx(dec) value(dec|0xhex|0bbin) # single read$0r idx(dec) # batch from file$0-f cmds.txt Examples (cmds.txt lines): w 1 111 w 32 0b110 w 32 0x1110 r 32 r 30 EOFexit2}# Dispatch [[$#-eq0]]usageif[[$1-f$#-eq2]];thenwhileIFSread-rline||[[-n$line]];doline${line%%#*}[[-z${line//[[:space:]]/}]]continueread-rcmd idx val$linecase${cmd,,}inw)do_write$idx$val;;r)rd32_dec$idx;;*)echoERR: unknown cmd:$cmd2;;esacdone$2exit0fiif[[$#-eq3${1,,}w]];thendo_write$2$3exit0fiif[[$#-eq2${1,,}r]];thenrd32_dec$2exit0fiusage