我想了很长时间是否可以重新发表有关哈布雷的文章,我研究了规则,似乎现在不被禁止。如果我输入有误,我将予以纠正:)
所以...
前一段时间,我为AV.io系列的Epiphan采集器编写了固件代码:
赛普拉斯FX3参与其中,而SDK则基于ThreadX构建。您可以将Olimex ARM-USB-OCD-H与OpenOCD一起用作JTAG调试器。不幸的是,OpenOCD对RTOS中的线程一无所知,尽管代码中提供了基本的支持,特别是对于我们的处理器,我们使用的寄存器堆栈方案与已经实现的寄存器堆栈方案不同。我必须理解和修改。至少在分布式工作的情况下,使用JTAG进行开发的收益很难被高估。
所以时间不多了。现在轮到Xilinx的FPGA及其MicroBlaze软件处理器,您可以在其中运行移植的FreeRTOS版本10.x。但是问题是完全一样的:调试器中不支持线程!
有关XSDK设备和调试工具的歌词
Xilinx提供了紧密集成的组件环境,用于在具有ARM Cortex-A53,ARM Cortex-R5和MicroBlaze内核的处理器上开发软件。MicroBlaze与众不同-它是在FPGA内部实现的软件处理器。内核的数量仅受芯片中可用空间的数量限制。
( CPU, FPGA, — Vivado) — XSDK ( 2020 Vitis), Eclipse. FPGA . , JTAG ( OpenOCD!) , . : , , .
, Eclipse, , — XSTC. . .
.
JTAG hw_server
. TCP , — 3121, , , 3000 — GDB :
N+0
(3000) — ARM Cortex-A53N+1
(3001) — ARM Cortex-R5N+2
(3002) — MicroBlaze ( )
-, .
, . , . , ( !) — System Debugger GDB. MicroBlaze GDB — mb-gdb
.
System Debugger . , Xilinx GDB — .
,
, RTOS OpenOCD, , , :
- RTOS TCB (Thread Control Block), , . . ( ) — Reverse Engineering! : , , .
- RTOS — . , , . , , — . .. . — .
- 1 — TCB ( — RTOS).
, GDB GDB , info threads
info registers
thread N
bt
.
, RTOS , , RTOS ( , SDK , ). , .
: . . p
, , . , ThreadX Cypress FX3. , . — .
… GDB-client GDB-server , , , MitM ""? , , , , ?
, : . gdbproxy , .
— . C++ ( , , ), Asio, C++17 , , C++2a — , , , 100%, 90% !
,
, — . . Asio , . . .
: . TCB, . … GDB- . . … ! — . , , ( — ) : qSymbol::
, : - ? — . — , . qSymbol:NAME
, qSymbol:ADDR:NAME
qSymbol::NAME
, nullptr
. - ( , — ) , .
. , , , , — … , !
.. , .
, : , . .
, . . (SMP , ) — . GDB ( ) — : . .
, GDB-client . , . : - , - SP (Stack Pointer) FP (Frame Pointer) . , .
: Set Current Thread ( OK EXX — XX — , ), . RTOS, , , . , — . — Current Execution? : — . , . ! . Set Current Thread Set Current Thread , xxxxxxxx
, — ! , RTOS , Set Current Thread , Set Current Thread . : . .
, SP : TCB . SP , .
, . . Stop Reply Packets. , . , breakpoint, watchpoint Break ( , , 0x03 Stop Reply Packet). , , . Stop Reply Packet, . . Stop Reply Packets : vCont
c
— Continue s
— Step ( ).
. , , .
, , . : . — . GDB. MicroBlaze GDB microblaze-tdep.h
enum microblaze_regnum
:
enum microblaze_regnum
{
MICROBLAZE_R0_REGNUM,
MICROBLAZE_R1_REGNUM, MICROBLAZE_SP_REGNUM = MICROBLAZE_R1_REGNUM,
MICROBLAZE_R2_REGNUM,
MICROBLAZE_R3_REGNUM, MICROBLAZE_RETVAL_REGNUM = MICROBLAZE_R3_REGNUM,
MICROBLAZE_R4_REGNUM,
MICROBLAZE_R5_REGNUM, MICROBLAZE_FIRST_ARGREG = MICROBLAZE_R5_REGNUM,
MICROBLAZE_R6_REGNUM,
MICROBLAZE_R7_REGNUM,
MICROBLAZE_R8_REGNUM,
MICROBLAZE_R9_REGNUM,
MICROBLAZE_R10_REGNUM, MICROBLAZE_LAST_ARGREG = MICROBLAZE_R10_REGNUM,
MICROBLAZE_R11_REGNUM,
MICROBLAZE_R12_REGNUM,
MICROBLAZE_R13_REGNUM,
MICROBLAZE_R14_REGNUM,
MICROBLAZE_R15_REGNUM,
MICROBLAZE_R16_REGNUM,
MICROBLAZE_R17_REGNUM,
MICROBLAZE_R18_REGNUM,
MICROBLAZE_R19_REGNUM,
MICROBLAZE_R20_REGNUM,
MICROBLAZE_R21_REGNUM,
MICROBLAZE_R22_REGNUM,
MICROBLAZE_R23_REGNUM,
MICROBLAZE_R24_REGNUM,
MICROBLAZE_R25_REGNUM,
MICROBLAZE_R26_REGNUM,
MICROBLAZE_R27_REGNUM,
MICROBLAZE_R28_REGNUM,
MICROBLAZE_R29_REGNUM,
MICROBLAZE_R30_REGNUM,
MICROBLAZE_R31_REGNUM,
MICROBLAZE_PC_REGNUM,
MICROBLAZE_MSR_REGNUM,
MICROBLAZE_EAR_REGNUM,
MICROBLAZE_ESR_REGNUM,
MICROBLAZE_FSR_REGNUM,
MICROBLAZE_BTR_REGNUM,
MICROBLAZE_PVR0_REGNUM,
MICROBLAZE_PVR1_REGNUM,
MICROBLAZE_PVR2_REGNUM,
MICROBLAZE_PVR3_REGNUM,
MICROBLAZE_PVR4_REGNUM,
MICROBLAZE_PVR5_REGNUM,
MICROBLAZE_PVR6_REGNUM,
MICROBLAZE_PVR7_REGNUM,
MICROBLAZE_PVR8_REGNUM,
MICROBLAZE_PVR9_REGNUM,
MICROBLAZE_PVR10_REGNUM,
MICROBLAZE_PVR11_REGNUM,
MICROBLAZE_REDR_REGNUM,
MICROBLAZE_RPID_REGNUM,
MICROBLAZE_RZPR_REGNUM,
MICROBLAZE_RTLBX_REGNUM,
MICROBLAZE_RTLBSX_REGNUM,
MICROBLAZE_RTLBLO_REGNUM,
MICROBLAZE_RTLBHI_REGNUM,
MICROBLAZE_SLR_REGNUM, MICROBLAZE_NUM_CORE_REGS = MICROBLAZE_SLR_REGNUM,
MICROBLAZE_SHR_REGNUM,
MICROBLAZE_NUM_REGS
};
, . - , , 00000000
xxxxxxxx
, — , — : unavail. — . , qFeatures
(TBD: !) , — .
, ?
: https://github.com/h4tr3d/gdbproxy/
, BSD MIT. OpenOCD (, : , , , ). .
: . , , RTOS, . . .
?
XSDK:
- — GDB , System Debugger
- GDB, 4002 (
gdbproxy
, ) gdbproxy
, XSDK hw_server
:
./gdbproxy --port 4002 --remote-host localhost --remote-port 3002 -- mb_freertos
- ...
- PROFIT!
在使用远程服务器的情况下hw_server
,由于XSDK配置的灵活性小,它gdbproxy
必须与相同的计算机上运行hw_server
。
发现
没有。最重要的是:支持FreeRTOS和MicroBlaze上的线程。