فكرت لفترة طويلة فيما إذا كان من الممكن إعادة نشر مقال عن حبري ، درست القواعد ، يبدو أنه الآن ليس ممنوعًا. إذا أخطأت ، فسأصححه :)
وبالتالي...
منذ بعض الوقت ، كتبت رمز البرنامج الثابت لملتقطي Epiphan لخط AV.io:
كان Cypress FX3 متورطًا هناك ، وتم بناء SDK على رأس ThreadX. كمصحح JTAG ، يمكنك استخدام Olimex ARM-USB-OCD-H بالتزامن مع OpenOCD . لسوء الحظ ، لا يعرف OpenOCD شيئًا عن سلاسل الرسائل في RTOS ، وعلى الرغم من وجود الدعم الأساسي في التعليمات البرمجية ، خاصة بالنسبة لمعالجنا ، فقد استخدمنا نظام تكديس التسجيل الذي كان مختلفًا عما تم تنفيذه بالفعل. كان علي أن أفهم وأعدل . لا يمكن المبالغة في تقدير أرباح استخدام JTAG في التطوير ، على الأقل في حالة العمل الموزع .
لذا الوقت ينفد. الآن حان دور Xilinx's FPGA ومعالج برمجيات MicroBlaze ، حيث يمكنك تشغيل الإصدار 10x من FreeRTOS. لكن المشكلة هي نفسها تمامًا: لا يوجد دعم لمؤشرات الترابط في مصحح الأخطاء!
كلمات تتعلق بجهاز XSDK وأدوات التصحيح
يوفر Xilinx بيئة من المكونات المتكاملة بإحكام لتطوير البرامج على المعالجات باستخدام ARM Cortex-A53 و ARM Cortex-R5 و MicroBlaze core. يتميز 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.